【问】
ORG 0000H
LJMP MAIN
ORG 000BH
AJMP TT0
ORG 0300H
MAIN:MOV R3,#0FEH ;字位保存在R3
MOV TMOD ,#00H ;工作方式0
MOV TH0,#00H
MOV TL0,#00H
SETB EA
SETB ET0
SETB TR0;启动T0
SJMP $;等待
TT0:CLR TR0
MOV TH0,#00H
MOV TL0,#00H
LCALL KEY;调用键盘子程序
LCALL DISPLAY;调用显示子函数
SETB TR0
RETI
//-----------------------------------------------------------------------------------
KEY:MOV A,P1
ANL A,#80H;P1口与1000 0000相与
JZ KEY1
MOV A,P1
ANL A,#0FH
MOV 30H,A ;字形的操作
MOV A,P1 ;检测按钮是否已经放开
ANL A,#80H
JNZ KEY1
MOVA,R3 ;字位的操作
RL A ;右移
MOV R3,A
MOV 70H,A
KEY1:RET
DISPLAY:
MOV A,30H;30H的内容为
MOV DPTR,#TAB;
MOVC A,@A+DPTR;
MOV P0,A;送字形
MOV A,70H
MOV P2,A ;送字位
LCALL DELAY1MS
RET
DELAY1MS:
MOV R7,#01H
DL1:
MOV R6,#8EH
DL0:
MOV R5,#02H
DJNZ R5,$
DJNZ R6,DL0
DJNZ R7,DL1
RET
TAB:DB 3fH,06H,5bH,4fH,66H,6dH,7dH,07H,7fH,67H
DB 77H,7cH,39H,5eH,79H,71H
END
现在的问题是,想让数码管第一次按下的键值现在在最左边,第八次按下的键值显示在最右边,以此类推,数码管是共阴极的,我真心不知道到怎么在动态显示的同时还把位选移到下一位。希望大家帮忙看看,谢谢了。
【答】
可以实现的。
当先后按下《1、3、0、8、d、A》,显示如下图:
程序见:http://www.eeskill.com/article/id/50630。