51单片机矩阵键盘带去抖释放检测汇编

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: ACALL KEYSCAN ;调用子函数
MOV A,30H ;从30H单元取相应的数值
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
ACALL DELAY20MS
SJMP MAIN
MOV P1,#0FH ;线反转法
MOV A,P1
ANL A,#0FH
MOV B,A
MOV P1,#0F0H
MOV A,P1
ANL A,#0F0H
ORL A,B
MOV 30H,A
CJNE A,#0FFH, MASKVIB ;有键按下转去抖动
RET
MASKVIB: ACALL DELAY20MS
MOV P1,#0FH ;再次检测
MOV A,P1
ANL A,#0FH
MOV B,A
MOV P1,#0F0H
MOV A,P1
ANL A,#0F0H
ORL A,B
CJNE A,30H, QUITKEY;比较两次扫描键值
RELEASE: MOV P1,#0FFH ;释放检测
MOV A,P1
CJNE A,#0FFH, RELEASE ;等待释放
KEYPRO: MOV B,30H ;键值处理程序
MOV DPTR,#KEYV ALUE
MOV R7,#0FFH
KEY1: INC R7
MOV A,R7
MOVC A,@A+DPTR
CJNE A,B,KEY2
MOV A, R7
MOV 30H,A;键码保存
SETB 20H ;键值有效标志位
RET
KEY2: CJNE A,#00H,KEY1 ;扫描键值结束标志
QUITKEY: RET ;键扫描无效退出
DELAY20MS: ;延时20MS子程序,使用40,41,42单元
MOV 40H,#20 ;
NEXT1: MOV 41H,#20
NEXT2: MOV 42H,#248
DJNZ 42H,$
DJNZ 41H,NEXT2
DJNZ 40H,NEXT1
RET
KEYV ALUE: DB 77H,7BH,7DH,7EH ;键码表
DB 0B7H,0BBH,0BDH,0BEH
DB 0D7H,0DBH,0DDH,0DEH
DB 0E7H,0EBH,0EDH,0EEH
DB 00H
TABLE: DB 0C0H,0F9H,0A4H,0B0H ;共阳数码管编码表
DB 99H,92H,82H,0F8H
DB 80H,90H,88H,83H
DB 0C6H,0A1H,86H,8EH
END
矩阵键盘扫描子程序,使用P1口。

扫描有效在20H位置1,键码保存在30H单元;30H单元总会有数值,每次调用应检测20H位标志是否为1;
子程序使用了R7、40H、41H、42H和20H位;
测试结果从P2输出。

相关文档
最新文档