📄 jianpanxianshi.asm
字号:
ORG 0000H
ORI:MOV R2,#01000000B ;扫描初值
MOV R1,#00H ;取码指针
AJMP MAIN
ORG 0100H
MAIN:
KEY:MOV R3,#0DFH ;列扫描 11011111
MOV R4,#00H ; 键码指针
L2:MOV A,R3 ;开始扫描
MOV DPTR,#8002H ;位码地址
MOVX @DPTR,A ;列扫描信号输出端口 位显码送8002
MOV DPTR,#8001H ;键读入行地址
MOVX A,@DPTR ; 从 端口读入行信号
SETB C ;设有无键按下的标志位
MOV R6,#04H ;
L3:RRC A ;
JNC KEYIN
INC R4
DJNZ R6,L3
MOV A,R3 ;扫描值载入
SETB C
RRC A ;列右
MOV R3,A ;列号存回扫描积存器
JC L2
SJMP SHOW
KEYIN:MOV A,R4
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#8004H
MOVX @DPTR,A
MOV DPTR,#8002H
MOV A,#00000001B
MOVX @DPTR,A
LCALL DELAY2
AJMP MAIN
SHOW: MOV DPTR,#DATE ;显示日期
MOV A,R1
INC R1
MOVC A,@A+DPTR
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV R0,A
MOV A,R0
MOV DPTR,#8004H
MOVX @DPTR,A
MOV A,R2
RR A
MOV R2,A
MOV DPTR,#8002H
MOVX @DPTR,A
LCALL DELAY
CJNE R2,#01H,SHOW
LJMP ORI
ORG 0200H
DELAY:MOV TMOD,#00H ;定时器零工作在方式零
MOV TH0,#0D8H;置定时器初值
MOV TL0,#0FFH
SETB TR0; 启动定时器零
LP1: JBC TF0,LP2
LJMP LP1
LP2: RET ;返回主程序 显示日期的延时
ORG 0250H
DELAY2: MOV TMOD,#00H ;定时器零工作在方式零
MOV TH0,#0B1H;置5ms定时器初值
MOV TL0,#1CH
MOV R1,#20;设置循环次数
MOV R3,#2
SETB TR0; 启动定时器零
LOOP1:JBC TF0,LOOP2
LJMP LOOP1
LOOP2:
DJNZ R1,LOOP1
DJNZ R3,LOOP1
RET ;返回主程序 按键的延时
ORG 0300H
TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,
DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
DATE:DB 00H,08H,00H,06H,01H,06H
TABLE:DB 00H,01H,04H,07H
DB 0FH,02H,05H,08H
DB 0EH,03H,06H,09H
DB 0DH,0CH,0BH,0AH ; LED字型显示代表码
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -