📄 位移按键实验.asm
字号:
ORG 00H
MOV SP,#50H
MOV R1,#20H
MOV R4,#0BH
DD1: MOV @R1,#18
INC R1
DJNZ R4,DD1
MOV R3,#11101111B
MOV P1,#0FFH
SJMP KEY_1
;;;;;;;;;;;;;;;;;;;;移位显示;;;;;;;;;;;;;;;;
DR1:MOV R2,26H
MOV 26H,24H
MOV 24H,#00H
MOV A,23H
MOV 23H,R2
MOV R2,22H
MOV 22H,A
MOV A,21H
MOV 21H,R2
MOV 20H,A
SJMP DR2
;;;;;;;;;;;显示子程序;;;;;;;;;;;;;;;;;;;;;;
SATRT:
MOV A,24H
CJNE A,#00,DR1
MOV 23H,26H
DR2: 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 TIME1M ;显示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口复位
RET
;;;;;;;;;;;;;;;;;;;;;4*4键盘扫描程序;;;;;;;;;;;;;;;;;;;;
KEY_1:
LCALL SATRT
MOV A,R3
MOV R3,A
MOV P1,A
MOV A,P1
XRL A,#11111111B
CJNE A,#10,E1
E1: CJNE A,#88H,E2
AJMP KEY1
E2: CJNE A,#84H,E3
AJMP KEY2
E3: CJNE A,#82H,E4
AJMP KEY3
E4: CJNE A,#81H,E5
AJMP KEY4
E5: CJNE A,#48H,E6
AJMP KEY5
E6: CJNE A,#44H,E7
AJMP KEY6
E7: CJNE A,#42H,E8
AJMP KEY7
E8: CJNE A,#41H,E9
AJMP KEY8
E9: CJNE A,#28H,E10
AJMP KEY9
E10: CJNE A,#24H,E11
AJMP KEY10
E11: CJNE A,#22H,E12
AJMP KEY11
E12: CJNE A,#21H,E13
AJMP KEY12
E13: CJNE A,#18H,E14
AJMP KEY13
E14: CJNE A,#14H,E15
AJMP KEY14
E15: CJNE A,#12H,E16
AJMP KEY15
E16: CJNE A,#11H,E17
AJMP KEY16
E17:MOV A,R3
RL A
MOV R3,A
JNB ACC.0,E18
AJMP KEY_OUT
E18:MOV R3,#11101111B
AJMP KEY_OUT
KEY_OUT:
AJMP KEY_1
;;;;;;;;;;;;;;;;;;键值执行程序;;;;;;;;;;;;;;;;;;;;
KEY1:
MOV 24H,#1
AJMP KEY_2
KEY2: LCALL TIME10M
MOV 24H,#2
AJMP KEY_2
KEY3: LCALL TIME10M
MOV 24H,#3
AJMP KEY_2
KEY4: LCALL TIME10M
MOV 24H,#4
AJMP KEY_2
KEY5: LCALL TIME10M
MOV 24H,#5
AJMP KEY_2
KEY6: LCALL TIME10M
MOV 24H,#6
AJMP KEY_2
KEY7: LCALL TIME10M
MOV 24H,#7
AJMP KEY_2
KEY8: LCALL TIME10M
MOV 24H,#8
AJMP KEY_2
KEY9: LCALL TIME10M
MOV 24H,#9
AJMP KEY_2
KEY10: LCALL TIME10M
MOV 24H,#10
AJMP KEY_2
KEY11: LCALL TIME10M
MOV 24H,#11
AJMP KEY_2
KEY12: LCALL TIME10M
MOV 24H,#12
AJMP KEY_2
KEY13: LCALL TIME10M
MOV 24H,#13
AJMP KEY_2
KEY14: LCALL TIME10M
MOV 24H,#14
AJMP KEY_2
KEY15: LCALL TIME10M
MOV 24H,#15
AJMP KEY_2
KEY16: LCALL TIME10M
MOV 24H,#16
AJMP KEY_2
;;;;;;;;;;;;;;键盘放开程序;;;;;;;;;;;;;;;;;;;;;;
KEY_2:
LCALL SATRT
MOV A,P1
ANL A,#00001111B
XRL A,#00001111B
JNZ KEY_2
AJMP KEY_1
;;;;;;;;;;;;;;;;;;;防斗延时程序;;;;;;;;;;;;;;;;
TIME10M:
MOV R7,#25
D2: MOV R6,#255
D1: DJNZ R6,D1
DJNZ R7,D2
RET
;;;;;;;;;;;;;;显示延时程序;;;;;;;;;;;;;;
TIME1M:
MOV R7,#100
DI2: MOV R6,#10
DI1: DJNZ R6,DI1
DJNZ R7,DI2
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 + -