📄 ex9-6.asm
字号:
ORG 0000H
START: LJMP MAIN
ORG 0030H
MAIN: MOV SP,#60H
MOV 7AH,#00
MOV 7BH,#01
MOV 7CH,#02
MOV 7DH,#03
MOV 7EH,#04
MOV 7FH,#05
MOV DPTR,#7F00H ;8155命令口地址
MOV A,#03H ;置8155PA、PB口为输出,PC口为输入
MOVX @DPTR,A
LOOP: LCALL DISP
LCALL KEY
MOV A,R4
CJNE A,#88H,DSP
SJMP LOOP
DSP: MOV 7AH,A ;键值送入显示缓冲区单元7AH
MOV 7BH,#010H
MOV 7CH,#010H
MOV 7DH,#010H
MOV 7EH,#010H
MOV 7FH,#010H
SJMP LOOP
;按键识别子程序
KEY: MOV R4,#00H ;0→键号寄存器R4
MOV R2,#01H ;扫描模式01H→R2
KEY1: MOV DPTR,#7F02H
MOV A,R2
MOVX @DPTR,A ;扫描模式→8155PB口
INC DPTR
MOVX A,@DPTR ;读8155PC口
JB ACC.0,KEY2 ;0列无键闭合,转判1列
MOV A,#00H ;0列有键闭合,0→A
AJMP KEY5
KEY2: JB ACC.1,KEY3 ;1列无键闭合,转判2列
MOV A,#01H ;1列有键闭合,列线号01H→A
AJMP KEY5
KEY3: JB ACC.2,KEY4 ;2列无键闭合,转判3列
MOV A,#02H ;2列有键闭合,02H→A
AJMP KEY5
KEY4: JB ACC.3,NEXT ;3列无键闭合,转判下一行
MOV A,#03H ;3列有键闭合,03H→A
KEY5: ADD A,R4 ;列线号+(R4)作为键值→A
MOV R4,A ;键值→R4
RET ;返回
NEXT: MOV A,R4;
ADD A,#04 ;键号寄存器加4
MOV R4,A
MOV A,R2
JB ACC.3,NEXT1 ;判别是否已扫描到最后一行
RL A ;扫描模式左移一位
MOV R2,A
AJMP KEY1 ;重新开始扫描下一行
NEXT1: MOV R4,#88H ;扫描到最后一行仍无按键置无键闭合标志
RET
;数码管显示组程序
DISP: MOV R0,#7AH ;置显示缓冲器指针初值
MOV R3,#01H ;置扫描模式初值
DISPB1: MOV DPTR,#7F02H ;8155 PB口地址
MOV A,#0h ;熄灭所有LED
MOVX @DPTR,A
MOV DPTR,#7F01H ;8155 PA口地址
MOV A, @R0 ;取显示数据
ADD A,#014H ;加偏移量
MOVC A, @A+PC ;查表取段码
MOVX @DPTR,A ;段码→8155 PA口
MOV A,R3
MOV DPTR,#7F02H ;8155 PB口地址
MOVX @DPTR,A ;扫描模式→8155 PB口
ACALL DELAY ;延时
INC R0
MOV A,R3
JB ACC.6,DISPB2 ;判6位LED显示完否
RL A ;扫描模式左移1位
MOV R3,A
AJMP DISPB1
DISPB2: MOV R3,#01H
RET
SEGPT2: Db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h ;段码表
db 7fh,6fh,77h,7ch,39h,5eh,79h,71h
db 00h,02h,08h,00h,59h,0fh,76h
;延时子程序
DELAY: MOV R4,#0FFH
DELAY1: DJNZ R4,DELAY1
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -