矩阵键盘及数码管显示
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ORG 0030H
MOV P2,#0FEH ;置数码管选择初值
TEST: ;按键检测程序
MOV P1,#0F0H ;读P1口高四位数据前先置1 MOV A,P1 ;读P1口高四位
ANL A,#0F0H ;将A低四位清零,便于检测是否
;有键按下
CJNE A,#0F0H,L1 ;有键按下就跳到L1
SJMP TEST ;没键按下就重新开始检测
L1: ;行扫描
MOV A,#0FEH ;置行扫描初值
L2:
PUSH ACC ;保存行扫描值
MOV P1,A
MOV A,P1 ;读P1口的值
ANL A,#0F0H
CJNE A,#0F0H,L3 ;该行有键按下,则转到延时程序L3 POP ACC ;没键按下则弹出行扫描值
RL A ;准备下一行扫描
CJNE A,#0EFH,L2 ;4行没扫描完就开始扫描下一行SJMP TEST ;4行扫描完则重新检测按键
L3: ;确定键编码
MOV A,P1 ;读P1口的值
ANL A,#0F0H ;保存列码
MOV R2,A ;将列码存入R2
POP ACC ;弹出行扫描值
ANL A,#0FH ;保存行码
ORL A,R2 ;得到完整的键码
MOV B,A ;将键码存入B
L4: ;检测是否有抖动或者键按住ACALL DELAY ;不放,直到抖动消失或按键MOV P1,#0F0H ;弹起,才显示按下的键所对MOV A,P1 ;应的字形
ANL A,#0F0H
CJNE A,#0F0H,L4
ACALL DISPLAY ;调用键值处理及显示程序SJMP TEST ;显示完后检测下一个按键DELAY: ;40ms延时去抖动子程序
MOV R5,#06H
D1:MOV R6,#0FAH
D2:DJNZ R6,D2
DJNZ R5,D1
RET
DISPLAY: ;键值处理及显示程序
MOV A,#00H ;置键码表偏移量初值
MOV DPTR,#TAB1 ;读入键码表表头地址
L5:
PUSH ACC ;保存偏移量
MOVC A,@A+DPTR ;读出键码
CJNE A,B,L6 ;将检测到的键码与键码表中的比
;较,若不相等,则转到L6 SJMP L7 ;若相等,转到L7
L6:
POP ACC ;弹出偏移量
INC A ;偏移量加1
CJNE A,#0FH,L5 ;若键码表未查完,则比较B与
;下一个键码
RET ;若查完,返回主程序
L7:
MOV DPTR,#TAB2 ;读入字型码表表头地址
POP ACC ;弹出检测到的键码所对应的
;偏移量
MOVC A,@A+DPTR ;得到键码所对应的字型码PUSH ACC ;保存字型码
MOV A,P2 ;暂存数码管选择位
RR A
MOV P2,A ;选择下一个数码管
POP ACC ;弹出字型码
MOV P0,A ;将字型码送数码管显示
RET ;返回主程序
TAB1: DB 0EEH,0DEH,0BEH,7EH,0EDH,0DDH,0BDH,7DH,0EBH,0DBH, 0BBH,7BH,0E7H,0D7H,0B7H,077H
TAB2: DB 28H,7EH,0A2H,62H,74H,61H,21H,7AH,20H,60H,0A9H,0A1 H,0B1H,34H,0ADH,0B0H
END