74922应用于键盘控制及六位数显示程序
org 00h ;清除显示器存储器30H~35H
start: MOV r4,#06h
MOV r0,#30h
clear: MOV @r0,#00h
inc r0
djnz r4,clear
l1: jb p1.4,keyin ;检测74138的DA脚=1? DA=1表示有键按下
call disp ;调用显示子程序
jmp l1
keyin: jb p1.4,$ ;按键放开否?
MOV a,p1 ;是则读入74922的按键值
anl a,#0fh ;取低4位(74922 A~D)
MOV dptr,#table ;到table取码
MOV c a,@a+dptr
MOV 20h,a ;暂存入(20H)
xrl a,#0ah ;是否按"*"?是则清除屏幕
jz start
MOV a,20h
xrl a,#0bh ;是否按"#"?是则清除屏幕
jz start
MOV a,20h ;除"*"和"#"其余都为数字键
xch a,30h ;现按键值存入(30H)
xch a,31h ;旧(30H)值存入(31H)
xch a,32h ;旧(31H)值存入(32H)
xch a,33h ;旧(32H)值存入(33H)
xch a,34h ;旧(33H)值存入(34H)
xch a,35h ;旧(34H)值存入(35H)
call disp ;调用扫描子程序
jmp l1
disp: MOV a,35h ;(35H)显示器D6地址
add a,#50h ;D6数据值加上74138扫描值
MOV p0,A ;显示D6
call delay ;扫描延时
MOV a,33h ;(33h)显示器D4地址
add a,#30h ;显示数据值加上74138扫描值
MOV p0,a ;显示D4
call delay ;扫描延时
MOV a,32h ;(32H)显示器D3地址
add a,#20h ;D2数据值加上74138扫描值
MOV p0,a ;显示D2
call delay ;扫描延时
MOV a,30h ;(30H)显示器D1扫描值
add a,#00h ;D1数据值加上74138扫描值
MOV p0,a ;显示D1
call delay ;扫描延时
ret
delay: MOV r7,#06 ;显示器扫描时间3毫秒
d1: MOV r6,#248
djnz r6,$
djnz r7,D1
ret
org 300h
table: db 01h,01h,03h,0ffh ;键盘码
db 04h,05h,06h,0ffh
db 07h,08h,09h,0ffh
db 0ah,00h,0bh,0ffh
end