8255键盘4*4

news/2024/12/4 23:37:07/
PORT_A EQU 0FF9H;8255A端口地址
PORT_B EQU 0FFBH;8255B端口地址
PORT_CTL EQU 0FFFH;8255C端口地址
;数据段定义,键盘扫描表
DATA	SEGMENT	
; 
TABLE DB 77H,7B,7D,7E,0B7H,0BBH,0BDH,0BEHDB 0D7H,0DBH,0DDH,0DEH,0E7H,0EBH,0EEH
DATA ENDS
;堆栈段
STACK SEGMENT	STACKDW 50 DUP(0)
TOP_STACK LABEL	WORD	
STACK ENDS
;代码段
CODE SEGMENT	ASSUME	CS:CODE,DS:DATA,SS:STACK
MAIN: MOV AX,STACKMOV DX,AX;LEA	SP	TOP_STACKMOV AX,DATAMOV DX,AX
;初始化8255A输出BC输入
MOV DX, PROT_CTL
MOV AL,10001011B
OUT DX,AL	
;向每一行清0
MOV	AL,0
MOV DX,PORR_A
OUT DX,AL
MOV DX,PORT_B
;读列看是否有键被按下
WAIT_OPEN:
IN AL,DX
AND AL,0FH
CMP	AL,0FH
JNE WAIT_OPEN
WAIT_PRES:
IN AL,DX
AND AL,0FH
CMP	AL,0FH
JE WAIT_PRES	
MOV CX 16EAH
DELAY: LOOP DELAY
IN AL,DX
AND AL,0FH
CMP AL,0FH
JNZ WAIT_PRES
;键还是被压着,确定哪一个
MOV AL,0FEH
MOV CL,AL
NEXT_ROW:MOV DX,PORT_AOUT DX,ALMOV DX,PORT_BIN AL,DXAND AL,0FHCMP AL,0FHJNE ENCODEROL	CL,01MOV AL,CLJMP NEXT_ROW	
;找到了一对低电平
ENCODE:MOV BX,000FHIN AL,DX
NEXT_TRY:CMP AL,TABLE[BX]JE DONEDEC BXJNS NEXT_TRYMOV AH,01HJMP EXITDONE:MOV AL,BLMOV AH,00EXIT: HLT	
CODE	ENDSEND

http://www.ppmy.cn/news/660868.html

相关文章

输入设备之按键(键盘)

目录 一、输入设备 二、input 子系统 三、读取数据的流程 四、解析数据 具体事件 ①按键类事件 ②相对位移事件 ③绝对位移事件 五、数据同步 六、编写代码之读取 struct input_event 数据 代码如下 验证 现象解释 七、编写按键APP 一、输入设备 输入设备其实就…

键盘HID_键值表

一、键盘设备和主机的hid规范 /*键盘发送给PC的数据每次8个字节data0 data1 data2 data3 data4 data5 data6 data7 定义分别是:**data0 --|--bit0: Left Control是否按下,按下为1|--bit1: Left Shift 是否按下,按下为1|--bit2: Left Alt 是否…

键盘HID码表

键盘HID码表 #define Keyboard_a 4 // Keyboard a and A #define Keyboard_b 5 // Keyboard b and B #define Keyboard_c 6 // Keyboard c and C #define Keyboard_d 7 // Keyboard d and D #define Keyb…

【QMK键盘】简单的QMK固件键盘环境搭建

目录 前言一、QMK固件支持的芯片二、QMK环境搭建1.获取QMK MSYS2.安装QMK MSYS3.获取QMK固件4.编译测试 前言 由于我开始上班了,但是只有一块键盘,每天上下班得拿来拿去十分不方便,为了满足我 购买键盘的欲望 我打开淘宝看了一下键盘所以就。…

Go-time模块源码-理解并计算每月开始之前的天数 - 代码解析与应用

今天在看源码的时候看到了一个数组,感觉很莫名其妙,代码如下: 代码 // daysBefore[m] counts the number of days in a non-leap year // before month m begins. There is an entry for m12, counting // the number of days before Janua…

web自动化测试:selenium怎么实现关键字驱动

要做 ui 自动化测试,使用关键字驱动可以说是必须会的一种测试方式,它既可以在纯代码的自动化程序中运行,也可以在测试平台中使用。 使用纯代码方式时,自动化工程师先写好一个通用的程序,其他手工测试人员只需要把执行…

施耐德、科士达、艾特网能等多品牌精密空调集中监控方案

管理范围大、效率低? 网点多,设备分散、距离远,不适合目前集中化管理的模式。传统人工管理效率低。 无法及时预知风险? 不能第一时间得知精密空调异常和告警,及时排除隐患和故障。难以及时发现精密空调存在的隐患。…

JS知识点汇总(五)--执行上下文

1. JavaScript中执行上下文和执行栈是什么? 1、执行上下文 执行上下文是一种对Javascript代码执行环境的抽象概念,也就是说只要有Javascript代码运行,那么它就一定是运行在执行上下文中 执行上下文的类型分为三种: 全局执行上…