📄 4_4.asm
字号:
动态显示程序设计
DIR: Mov R0,#79H;置缓冲器指针初值
MOV r3,#01H
MOV A,R3
Ld0: Mov Dptr ,#tf01h;扫描模式一8155H的Pa口
MoV @dptr,A
INC DPtr
mov A,@R0;取现示数据
ADD A,#0DH ;加偏移置
MOVc A,@a+dptr;查表取段数据
dir1: movx @dptr,A;段数据8155H的PB口
ACALI dely;延时1瓜
iNC R0
mOV A,R3
Jb A.5,LDl
Rl A
MOv R3,A
ajmp ld0
LDl: Ret
DSEG:DB 3FH、06H,5BH,4FH,66H,6DH
DB 7dh,07H,7FH,6FH,77H,7cH
DB 39H,5EH,79H,7lH,73H,3EH
DB 3lH,6EH.1CH,23H,40H,03H
DB 18H,00,00,00
DUl: MOv R7,#02H;延迟于程序
DL: MOv R6,#0ffH
DU: DjNZ R6,Dl6
DjNz R7,DL
ReT
键输入子程序
KEY1: ACALL KS1
JNZ LK1
NI: ACALL DELY
AJMP KEY1
LK1: ACALL DELY
ASALL DELY
ACALL KS1
JNZ LK2
ACALL DELY
AJMP KEY1
LK2: MOV R2,#0FEH
MOV R4,#00H
LK4: MOV DPTR ,#7F01H
MOV A,R2
MOVX @DPTR,A
INC DPTR
INC DPTR
MOVX A,@DPTR
JB A.0,LONE
MOV A,#00H
AJMP LKP
LONE: JB A.1,LTW0
MOV A,#08H
AJMP LKP
LTW0: JB A.2,LTHR
MOV A,#10H
AJMP LKP
LTHR: JB A.3,NEXT
MOV A,#18H
LKP: ADD A,R4
PUSH A
LK3: ACALL DELY
ACALL KS1
JNZ LK3
POP A
KND: RET
NEXT: INC R4
MOV A,R2
JNB A.7,KND
RL,A
MOV R2,A
AJMP LK4
KND: AJMP KEY1
KS1: MOV DPTR,#7F01H
MOV A,#00H
MOVX @DPTR,A
INC DPTR
INC DPTR
MOVX A,@DPRT
CPL A
ANL A,#0FH
RET
DIS: MOV A,#00000011B
MOV DPTR,#7F00H
MOVX @DPTR,A
MOV R0,#78H
MOV R3,#7FH
MOV A,R3
LD: MOV DPTR,#7F01H
MOVX @DPTR,A
INC DPTR
MOV A,@R0
ADD A,#0DH
MOVC @DPTR,A
ACALL DLY
MOV A,R3
JNB A.0,LD1
RR A
MOV R3,A
INC R0
AJMP LDO
LD1: SJMP LD1
DSEG: DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,67H
DB 77H,7CH,39H,5EH,79H
DB 71H,73H,3EH,31H,6EH
DB 0FFH,00H
DLY: MOV R7,#02H
DL: MOV R6,#0FFH
DL1: DJNZ R6,DL1
DJNZ R7,DL
RET
ORG 8000H
ST: MOV DPTR,#7F00H;8155初始化
MOV A,#03H
MOVX,@DPTR,A
DIR: MOV R0,#7eH
MOV R3,#01H;位选为第一位
MOV A,R3
LDO: MOV DPTR,#7F01H;指向8155a口
MOV @DPTR,A
INC DPTR
MOV A,@R0;取显示数据
ADD A,#0CH;加偏移量
MOVC A,@PC+A;查表
MOVX @DPTR,A;去段数据表
ACALL DIMS;调延时
INC R0;指向下一缓冲单元
MOV A,R3
JB A.7,LD1
LD1: RET
ORG 8020H
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;0,1,2,3,4,5,6,7
DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H ;8,9,A,B,C,D,E,F ;段数据表
DIMS: MOV R7,#02H;延时子程序
DL: MOV R6,@0FFH
DL1: DJNZ R6,DL1
DZNL R7,DL
RET
ORG 8040H
KEY: LCALL KS ;调用判断有无键按下
JNZ K1 ;有按键,延时去抖
LCALL DIR ;调显示延时
SJMP KEY ;无键按下,返回
K1: LCALL DIR ;两次调用显示延时
LCALL DIR
LCALL KS ;查有无键按下
JNZ K2 ;a!=0,有键
LCALL DIR
SJMP KEY ;不是按键返回
K2: MOV R2,#OFEH;扫描方式-》r2(首列扫描)
MOV R4,#0CH;列号偏移-》r4
K4: MOV DPTR,#7FO1H;指向8155a
MOV A,R2
MOVX @DPTR,A;送列扫描字
INC DPTR;指向8155c
INC DPTR
MOVX A,@DPTR;8155c读行状态
JB A.0,L1;0行无键查1行
MOV A,#00H有键按下,行首号到a
SJMP KP
L1: JB A.1,L2
MOV A,#O8H
SJMP KP
L2: JB A.2,L3
MOV A,#10H
SJMP KP
L3: JB A.3,XT
MOV A,#18H
KP: ADD A,R4;求键号行首键号+列偏移
PUSH A;入栈保护
K3: LCALL DIR
LCALL KS;等键释放
JNZ K3;未释放等待
POP A;释放,键号-》a
RET
XT: INC R1 ;指向下一列,列号+1
MOV A,R2;判断8列扫描完?
JNB A.7,KN;完则返回
RL A;扫描字左移
MOV R2,A;扫描字-》r2
SJMP K4;转下列扫描
KN: SJMP KEY
KS: MOV DPTR,#7F01H;指向8155a
MOV A,#00H
MOVX @DPTR,A
INC DPTR
INC DPTR
MOVX A,@DPTR
CPL A
ANL A,#0FH
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -