|
发表于 2012-2-24 23:26:51
|
显示全部楼层
回复【楼主位】wozhoujue
-----------------------------------------------------------------------
我是新手,最近自己用汇编编了个程序调试成功。没自信看你的,不会C51
;********************************************************************************
;本程序实现扫描按键显示功能. *
;分别按16个键盘显示分别显示数字0123456789ABCDEF *
;键盘口P1,数码管显示一位, 数码管段位p0口 *
;********************************************************************************
org 0000h
ajmp main
org 0080h
main:
mov 30h,#00h;键盘码缓存
mov p1,#0fh;输出扫描码
lcall delay2;仿抖处理
mov a,p1
mov r3,a
cjne a,#0fh,loop1;有输入,则输出下一个扫描码
ajmp main
loop1:
mov p1,#0f0h;输出扫描码
mov r0,p1
mov a,r0
cjne a,#0f0h,loop2
ajmp main
loop2:
mov a,r3
xrl a,r0
mov 30h,a;暂存键盘码
lcall chek;调用查询键盘码程序
lcall display;调用显示程序段
ajmp main;循环扫描
;#########查询键盘码
chek:
mov r1,#00h
mov dptr,#tab1 ;键盘码首地址
ck1:
mov a,r1
inc r1
movc a,@a+dptr;取键盘码
jz ck2;取到00h,则说明键盘误动作,退出
cjne a,30h,ck1
ck2:
dec r1
mov a,r1;取出相对地址
ret
;#########获取显示码并显示
display:
mov dptr,#tab2
movc a,@a+dptr;取显示码
mov p2,#0efh
mov p0,a
ret
;#########延时
delay2: ;延时去抖动子程序
MOV R5,#10
L7: MOV R6,#10
L8: DJNZ R6,L8
DJNZ R5,L7
RET
tab1:
db 77h,0b7h,0d7h,0e7h,7bh,0bbh,0dbh,0ebh,7dh,0bdh,0ddh,0edh,7eh,0beh,0deh,0eeh,00h ;键盘码表
tab2:
db 28h,7eh,0a2h,62h,74h,61h,21h,7ah,20h,60h,30h,25h,0a9h,26h,0a1h,0b1h,0ffh ;数码管0123456789ABCDEF
end |
|