📄 ketset.asm
字号:
LED1 EQU 20H
LED2 EQU 21H
LED3 EQU 22H
LED4 EQU 23H
LLED EQU 25H
ORG 0000H
LCALL START
ORG 000BH ;定时器0中断入口
PUSH ACC
PUSH PSW
MOV 22H,R4
MOV R0,#20H ;指向显示数据首址
MOV R5,#0EFH ;扫描控制字初值
PLAY: MOV A,R5 ;扫描字放入A
MOV P2,A ;从P2口输出
MOV A,@R0 ;取显示数据到A
MOV DPTR,#TAB ;取段码表地址
MOVC A,@A+DPTR ;查显示数据对应段码
MOV P0,A ;段码放入P0口
LCALL TIME10M ;显示1MS
INC R0 ;指向下一地址
MOV A,R5 ;扫描控制字放入A
JNB ACC.7,ENDOUT ;ACC.7=0时一次显示结束
RL A ;A中数据循环左移
MOV R5,A ;放回R5内
AJMP PLAY ;跳回PLAY循环
ENDOUT: SETB P2.7 ;一次显示结束,P3口复位
;P1口复位
MOV TH0,#0dcH
MOV TL0,#000H
POP PSW
POP ACC
RETI ;子程序返回
START:
MOV SP,#50H
MOV LED1,#1
MOV LED2,#2
MOV LED3,#3
MOV LED4,#4
MOV R3,#11101111B
MOV R4,#00
MOV P1,#0FFH
MOV TMOD,#01H ;设定T0为工作方式2,八位自动重载。
MOV TH0,#0dcH ;
MOV TL0,#000H ;256-(250*11.0592/12)=256-230.4=25.6 250us(11.0592)
;用25时,中断时间为250.6510417us
;
SETB TR0 ;开定时器0
SETB ET0 ;致能定时0中断
CLR TF0 ;清定时0中断标志
SETB EA ;开总中断
KEY_1:
MOV A,R3
MOV R3,A
MOV P1,A
MOV A,P1
XRL A,#11111111B
CJNE A,#16,E1
LCALL KEY_OUT
E1: CJNE A,#88H,E2
LCALL KEY1
E2: CJNE A,#84H,E3
LCALL KEY2
E3: CJNE A,#82H,E4
LCALL KEY3
E4: CJNE A,#81H,E5
LCALL KEY4
E5: CJNE A,#48H,E6
LCALL KEY5
E6: CJNE A,#44H,E7
LCALL KEY6
E7: CJNE A,#42H,E8
LCALL KEY7
E8: CJNE A,#41H,E9
LCALL KEY8
E9: CJNE A,#28H,E10
LCALL KEY9
E10: CJNE A,#24H,E11
LCALL KEY10
E11: CJNE A,#22H,E12
LCALL KEY11
E12: CJNE A,#21H,E13
LCALL KEY12
E13: CJNE A,#18H,E14
LCALL KEY13
E14: CJNE A,#14H,E15
LCALL KEY14
E15: CJNE A,#12H,E16
LCALL KEY15
E16: CJNE A,#11H,E17
LCALL KEY16
E17:MOV A,R3
RL A
MOV R3,A
JNB ACC.0,E18
LCALL KEY_OUT
E18:MOV R3,#11101111B
LCALL KEY_OUT
KEY_OUT:
LCALL KEY_1
KEY1: LCALL TIME10M
MOV R4,#1
LCALL KEY_2
KEY2: LCALL TIME10M
MOV R4,#2
LCALL KEY_2
KEY3: LCALL TIME10M
MOV R4,#3
LCALL KEY_2
KEY4: LCALL TIME10M
MOV R4,#4
LCALL KEY_2
KEY5: LCALL TIME10M
MOV R4,#5
LCALL KEY_2
KEY6: LCALL TIME10M
MOV R4,#6
LCALL KEY_2
KEY7: LCALL TIME10M
MOV R4,#7
LCALL KEY_2
KEY8: LCALL TIME10M
MOV R4,#8
LCALL KEY_2
KEY9: LCALL TIME10M
MOV R4,#9
LCALL KEY_2
KEY10: LCALL TIME10M
MOV R4,#10
LCALL KEY_2
KEY11: LCALL TIME10M
MOV R4,#11
LCALL KEY_2
KEY12: LCALL TIME10M
MOV R4,#12
LCALL KEY_2
KEY13: LCALL TIME10M
MOV R4,#13
LCALL KEY_2
KEY14: LCALL TIME10M
MOV R4,#14
LCALL KEY_2
KEY15: LCALL TIME10M
MOV R4,#15
LCALL KEY_2
KEY16: LCALL TIME10M
MOV R4,#16
LCALL KEY_2
KEY_2:MOV A,P1
ANL A,#00001111B
XRL A,#00001111B
JNZ KEY_2
LCALL KEY_1
TIME10M:
MOV R7,#20
D2: MOV R6,#150
D1: DJNZ R6,D1
DJNZ R7,D2
RET
TAB: DB 00101000B ;0
DB 11101011B ;1
DB 00110010B ;2
DB 10100010B ;3
DB 11100001B ;4
DB 10100100B ;5
DB 00100100B ;6
DB 11101010B ;7
DB 00100000B ;8
DB 10100000B ;9
DB 00101000B ;0
DB 01100000B ;A
DB 00100101B ;b
DB 00111100B ;C
DB 00100011B ;d
DB 00110100B ;E
DB 01110100B ;F
DB 11110111B ;-
DB 11111111B ;
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -