📄 sdisp.asm
字号:
;该程序实现在三个数码管上显示123,显示停留5秒钟
;然后以0.5秒为间隔闪动5次,不断循环。
;采用静态显示方式
LED EQU 8000H ;左边第1个数码管的地址
BUFFER EQU 30H ;显示缓冲区首地址
FLASH BIT 00H ;闪烁标志
ORG 0
LJMP START
ORG 30H
START: MOV SP,#60H
SETB FLASH ;使显示常亮
MOV R0,#BUFFER
MOV R2,#3 ;给显示缓冲区的单元数
MOV A,#1
LOOP1: MOV @R0,A ;给显示缓冲区赋值
INC A
INC R0
DJNZ R2,LOOP1
LOOP: LCALL DISP ;显示数据
LCALL DELAY5S ;延时5秒钟
MOV R3,#10 ;闪烁10次
LL1: LCALL DISP
LCALL DELAY ;延时0.5秒
CPL FLASH ;闪烁标志取反实现显示的闪烁
DJNZ R3,LL1
SETB FLASH ;闪烁标志置1,实现显示常亮
SJMP LOOP
;显示子程序
;当FLASH标志为1时,将显示缓冲区的16进制数显示出来
;当FLASH标志为0时,熄灭所有显示器
;使用寄存器为A、R0、R2和DPTR
DISP: MOV R0,#BUFFER
MOV R2,#3 ;一共有3个数码管
MOV DPTR,#LED ;送数码管地址
JNB FLASH,DISP2 ;若闪烁标志为0,则转移
DISP1: PUSH DPH ;保护数码管地址
PUSH DPL
MOV A,@R0
MOV DPTR,#TAB ;指向显示段码的码表
MOVC A,@A+DPTR ;查表将需要显示的数据变换为显示段码
POP DPL
POP DPH
MOVX @DPTR,A ;段码送数码管显示
INC R0 ;指向下一个要显示的数据
MOV A,DPH
ADD A,#10H
MOV DPH,A ;指向下一个数码管
DJNZ R2,DISP1 ;没有显示完则继续
RET
DISP2: CLR A
MOVX @DPTR,A ;熄灭数码管
MOV A,DPH
ADD A,#10H
MOV DPH,A ;指向下一个数码管
DJNZ R2,DISP2
RET
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
;延时0.5秒子程序
;使用寄存器:R5、R6和R7
DELAY: MOV R5,#2 ;延时0.5秒子程序
D1: MOV R6,#250
D2: MOV R7,#250
D3: NOP
NOP
DJNZ R7,D3
DJNZ R6,D2
DJNZ R5,D1
RET
;延时5秒子程序
;使用寄存器:R4
DELAY5S:MOV R4,#10 ;延时5秒子程序
DD1: LCALL DELAY
DJNZ R4,DD1
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -