本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要 登录 才可以下载或查看,没有账号?注册会员
×
ORG 0000H
AJMP START ;到主程序
ORG 000BH ;中断入口
ajmp tim0 ;
START:MOV TMOD,#01H;设定定时器工作方式 1
setb ea
setb et0 ;中断使能
setb tr0 ;启动time0
l1: call key ;调用key
clr ea ;中断屏蔽
jb f0,l1 ;没有按那么f0=1否则=0
mov a,22h ;如果按了取码指针存入a
rl a ;乘2
MOV DPTR,#table ;表头地址送DPTR
MOVC A,@A+DPTR ;查表取代码
mov th0,a ;高字节存入th0
mov 21h,a ;存入21h
mov a,22h ;再载入取码指针
rl a ;乘2
rr a ;加1
MOVC A,@A+DPTR ;查表取代码
mov tl0,a ; 低字节存入tl0
mov 20h,a ;再存入20h
l2: call key ;调用按键处理
setb ea ;中断使能
jb f0,l1 ;有按否
jmp l2 ;有则跳到l2
key: setb f0 ;f0=1
mov r3,#0f7h ;扫描初值
mov r1,#00h ;取码指针初值
l3: mov a,r3 ;载入扫描指针
mov p3,a ;输入至P2,开始扫描
mov a,p3 ;读入P2
clr c
cpl c ;令C=1
mov r5,#04h ;检测P27~24
l4: rlc a ;左移一位
jnc keyin ;检测行C=0
inc r1 ;没有则取码指针加1;
djnz r5,l4 ;4列检测完毕?
mov a,r3 ;载入扫描指针
clr c
cpl c ;C=1
rrc a ;扫描下一行
mov r3,a ;存回R3扫描指针寄存器
jc l3 ;C=0表示扫描完毕
ret
keyin: mov 22h,r1 ;取码指针存入22H
clr f0 ;令F0=0
ret
tim0: push acc ;将A的值暂存于堆栈
push psw ;将PSW的值暂存于堆栈
mov tl0,20h ;重设计数值
mov th0,21h
cpl p1.0 ;将P1.0取反
pop psw ;至堆栈取回PSW的值
pop acc ; 至堆栈取回A的值
reti ;返回主程序
table:dw 64021,64103,64260,64400
dw 64524,64580,64684,64777
dw 64820,64898,64968,65030
dw 65058,65110,65157,65178
end |
|