我用8951做了个3×4矩阵式键盘输入,8字数码管显示输出的电路,即根据按键显示相应数字的小程序.但问题是输出显示的只是1×4矩阵的效果.哎!无奈!我看了网上的几个自称调试成功的程序,但copy过来也是一样的效果.难道没办法很好的使用吗? 以下是我的程序,望高手们指点一二. (电路部分p1.0-p1.3口控制键盘的四行,p1.4-p1.6控制键盘的三列.p2口控制8字数码管输出.) org 00h jmp star org 30h star: mov r1,#00h; mov r0,#0efh; call main; call dis; jmp star; main: mov p1,#0fh; mov a,p1; xrl a,#0fh; jnz k2; jmp main; k2: call delay; mov p1,#0fh; mov a,p1; xrl a,#0fh; jnz k3; jmp main; k3: mov p1,r0; mov a,p1; jb p1.0,xx1; mov a,r1; jmp dis; xx1:jb p1.1,xx2; inc r1; mov a,r1; jmp dis; xx2:jb p1.2,xx3; inc r1; mov a,r1; jmp dis; xx3:jb p1.3,xx4; inc r1; mov a,r1; jmp dis; xx4: mov a,r0 rl a; mov r0,a; inc r1; cjne r0,#7fh,k3; jmp star; ret; dis:mov dptr,#tab; movc a,@a+dptr; mov p2,a; push acc; mov p1,#0fh; mov a,p1; anl a,#0fh; cjne a,#0fh,dis; pop acc; ret; DELAY: ;40ms延时去抖动子程序8*FA*2=40ms MOV R5,#08H L7: MOV R6,#0FAH L8: DJNZ R6,L8 DJNZ R5,L7 RET tab:
db 28h,34h,28h,34h,0a9h,60h,20h,7ah,20h,21h,61h,74h,30h,62h,0a2h,7eh end |