4鍵六位數(shù)顯示程序
org 00h
start: MOV r4,#06h
MOV r0,#30h
clear: MOV @r0,#00h
inc r0
djnz r4,clear
l1: MOV r3,#0f7h ;掃描初值(P13=0)
MOV r1,#00h ;取碼指針
l2: MOV a,r3 ;開始掃描
MOV p1,a ;將掃描值輸入至P1
MOV a,p1 ;讀入P1值,判斷是否有鍵按下?
MOV r4,a ;存入R4,以判斷是否開放
setb c ;C=1
rrc a ;掃描下一行(P13~P10)
MOV r3,a ;存回掃描寄存器
jc l2 ;C=1?是則P10尚未掃描到
jmp l1 ;C=0則4行已掃描完畢
keyin: MOV r7,#60 ;消除抖動(dòng)
d2: MOV r6,#248
djnz r6,$
djnz r7,d2
d3: MOV a,p1 ;讀入P1值
xrl a,r4 ;與上次讀入值作比較
jz d3 ;ACC=0則相等,表示按鈕未放
MOV a,r1 ;按鈕已放開,取碼指針載入累加器
MOV dptr,#table ;數(shù)據(jù)指針指到TABLE
MOV c a,@a+dptr ;至TABLE取碼
xch a,30h ;舊(30H)值存入(31H)
xch a,31h ;舊(31H)值存入(32H)
xch a,32h ;舊(32H)值存入(33H)
xch a,33h ;舊(33H)值存入(34H)
xch a,34h ;舊(34H)值存入(35H)
call disp ;調(diào)用顯示子程序
jmp l1
disp: MOV a,35h
add a,#50h ;D6數(shù)據(jù)值加上74138掃描值
MOV p0,a ;顯示D6
call delay ;掃描延時(shí)
MOV a,34h
add a,#40h ;顯示數(shù)據(jù)值加上74138掃描值
MOV p0,a ;顯示D5
call delay ;掃描延時(shí)
MOV a,33h
add a,#30h ;D4數(shù)據(jù)值加上74138掃描值
MOV p0,a ;顯示D4
call delay ;掃描延時(shí)
MOV a,32h
add a,#20h ;D3數(shù)據(jù)值上加上74138
MOV p0,a ;顯示D3
call delay ;掃描延時(shí)
MOV a,30h
add a,#00h ;D1數(shù)據(jù)值加上74138掃描值
MOV p0,a ;顯示D1
call delay ;掃描延時(shí)
delay: MOV r7,#06 ;顯示器掃描時(shí)間
d1: MOV r6,#248 ;
djnz r6,$ ;
djnz r7,d1 ;
ret
org 300h
table: db 0ch,08h,04h,00h ;
db 0dh,09h,05h,01h ;
db 0eh,0ah,06h,02h ;
db 0fh,0bh,07h,03h ;
end