📄 ddisp.sdi
字号:
,,,;该程序实现在六个数码管上显示123456,显示停留5秒钟
,,,;然后以0.5秒为间隔闪动5次,不断循环。
,,,;显示方式为动态显示
,,,LED1 EQU 8000H ;数码管段驱动器的地址
,,,LED2 EQU 9000H ;数码管位驱动器的地址
,,,BUFFER EQU 30H ;显示缓冲区首地址
,,,FLASH BIT 00H ;闪烁标志
,,, ORG 0
0000,02 00 30,, LJMP START
,,, ORG 0BH
000B,02 00 5F,, LJMP DISP
,,, ORG 30H
0030,75 81 60,START,START: MOV SP,#60H
0033,75 89 01,, MOV TMOD,#01H ;设T0为方式1
0036,75 8C D8,, MOV TH0,#0D8H ;10ms定时初值
0039,75 8A F0,, MOV TL0,#0F0H
003C,D2 A9,, SETB ET0 ;允许T0中断
003E,D2 AF,, SETB EA ;开CPU总中断
0040,D2 8C,, SETB TR0 ;启动T0计数
0042,D2 00,, SETB FLASH ;使显示常亮
0044,78 30,, MOV R0,#BUFFER
0046,7A 06,, MOV R2,#6 ;显示缓冲区单元数
0048,74 01,, MOV A,#1
004A,F6,LOOP1,LOOP1: MOV @R0,A ;给显示缓冲区赋值
004B,04,, INC A
004C,08,, INC R0
004D,DA FB,, DJNZ R2,LOOP1
004F,12 00 DC,LOOP,LOOP: LCALL DELAY5S ;延时5秒钟
0052,7B 0A,, MOV R3,#10 ;闪烁10次
0054,12 00 CD,LL1,LL1: LCALL DELAY ;延时0.5秒
0057,B2 00,, CPL FLASH ;闪烁标志取反实现显示的闪烁
0059,DB F9,, DJNZ R3,LL1
005B,D2 00,, SETB FLASH ;闪烁标志置1,实现显示常亮
005D,80 F0,, SJMP LOOP
,,,;T0中断服务程序,实现每10ms一次的定时动态显示功能
,,,;当FLASH标志为1时,将显示缓冲区的16进制数显示出来
,,,;当FLASH标志为0时,熄灭所有显示器
,,,;使用寄存器为A、R0-R6和DPTR
005F,C0 D0,DISP,DISP: PUSH PSW
0061,C0 E0,, PUSH ACC
0063,C0 83,, PUSH DPH
0065,C0 82,, PUSH DPL
0067,D2 D3,, SETB RS0 ;选择1区工作寄存器
0069,C2 D4,, CLR RS1
006B,C2 8C,, CLR TR0 ;停止T0计数
006D,75 8C D8,, MOV TH0,#0D8H ;10ms定时初值
0070,75 8A F0,, MOV TL0,#0F0H
0073,D2 8C,, SETB TR0 ;启动T0计数
0075,78 30,, MOV R0,#BUFFER
0077,79 FE,, MOV R1,#0FEH ;位码初值
0079,7A 06,, MOV R2,#6 ;一共有6个数码管
007B,90 80 00,, MOV DPTR,#LED1 ;送数码管段驱动器地址
007E,AB 83,, MOV R3,DPH ;存段驱动器地址
0080,AC 82,, MOV R4,DPL
0082,90 90 00,, MOV DPTR,#LED2 ;送数码管位驱动器地址
0085,AD 83,, MOV R5,DPH ;存位驱动器地址
0087,AE 82,, MOV R6,DPL
0089,30 00 21,, JNB FLASH,DISP2 ;若闪烁标志为0,则转移
008C,E6,DISP1,DISP1: MOV A,@R0 ;取要显示数据
008D,90 00 B6,, MOV DPTR,#TAB ;指向显示段码的码表
0090,93,, MOVC A,@A+DPTR ;查表将需要显示的数据变换为显示段码
0091,8B 83,, MOV DPH,R3 ;恢复段驱动器地址
0093,8C 82,, MOV DPL,R4
0095,F0,, MOVX @DPTR,A ;段码送数码管段驱动器
0096,E9,, MOV A,R1 ;取显示位码
0097,8D 83,, MOV DPH,R5 ;恢复位驱动器地址
0099,8E 82,, MOV DPL,R6
009B,F0,, MOVX @DPTR,A ;点亮一个数码管
009C,23,, RL A ;指向下一位数码管
009D,F9,, MOV R1,A ;存位码
009E,08,, INC R0 ;指向下一个要显示的数据
009F,12 00 C6,, LCALL D1MS ;点亮数码管1ms
00A2,DA E8,, DJNZ R2,DISP1 ;没有显示完则继续
00A4,D0 82,DISP3,DISP3: POP DPL
00A6,D0 83,, POP DPH
00A8,D0 E0,, POP ACC
00AA,D0 D0,, POP PSW
00AC,32,, RETI
00AD,8D 83,DISP2,DISP2: MOV DPH,R5 ;恢复位驱动器地址
00AF,8E 82,, MOV DPL,R6
00B1,74 FF,, MOV A,#0FFH
00B3,F0,, MOVX @DPTR,A ;熄灭数码管
00B4,80 EE,, SJMP DISP3
00B6,3F 06 5B 4F,TAB,TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
00BE,7F 6F 77 7C,, DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
,,,;延时1ms子程序
,,,;使用寄存器R7
00C6,7F FA,D1MS,D1MS: MOV R7,#250
00C8,00,D1MS1,D1MS1: NOP
00C9,00,, NOP
00CA,DF FC,, DJNZ R7,D1MS1
00CC,22,, RET
,,,;延时0.5秒子程序
,,,;使用寄存器:R5、R6和R7
00CD,7D 02,DELAY,DELAY: MOV R5,#2 ;延时0.5秒子程序
00CF,7E FA,D1,D1: MOV R6,#250
00D1,7F FA,D2,D2: MOV R7,#250
00D3,00,D3,D3: NOP
00D4,00,, NOP
00D5,DF FC,, DJNZ R7,D3
00D7,DE F8,, DJNZ R6,D2
00D9,DD F4,, DJNZ R5,D1
00DB,22,, RET
,,,;延时5秒子程序
,,,;使用寄存器:R4
00DC,7C 0A,DELAY5S,DELAY5S:MOV R4,#10 ;延时5秒子程序
00DE,12 00 CD,DD1,DD1: LCALL DELAY
00E1,DC FB,, DJNZ R4,DD1
00E3,22,, RET
000E,,, END
,,,
,,,
,,,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -