📄 smg.lst
字号:
i --> R20
pdata --> R22
00E4 940E01A2 CALL push_gset2
00E6 01B8 MOVW R22,R16
(0043) /*******************************************
(0044) 函数名称: All_smg_display
(0045) 功 能: 6个数码管显示指定的内容
(0046) 参 数: *pdata--显示内容数组地址
(0047) 返回值 : 无
(0048) /********************************************/
(0049) void All_smg_display(uchar *pdata)
(0050) {
(0051) uchar i;
(0052) for(i=0;i<6;i++)
00E7 2744 CLR R20
00E8 C00C RJMP 0x00F5
(0053) {
(0054) One_smg_display(pdata[i],i+1);
00E9 2F24 MOV R18,R20
00EA 5F2F SUBI R18,0xFF
00EB 2FE4 MOV R30,R20
00EC 27FF CLR R31
00ED 0FE6 ADD R30,R22
00EE 1FF7 ADC R31,R23
00EF 8100 LDD R16,0+Z
00F0 DFC7 RCALL _One_smg_display
(0055) Delayms(1);
00F1 E001 LDI R16,1
00F2 E010 LDI R17,0
00F3 DF88 RCALL _Delayms
00F4 9543 INC R20
00F5 3046 CPI R20,6
00F6 F390 BCS 0x00E9
(0056) }
(0057) }
00F7 940E01AA CALL pop_gset2
00F9 9508 RET
_Cycle_smg_display:
i --> R20
j --> R10
pdata --> R22
00FA 940E01A6 CALL push_gset3
00FC 01B8 MOVW R22,R16
(0058) /*******************************************
(0059) 函数名称: Cycle_smg_display
(0060) 功 能: 6个数码管从右向左循环滚动显示指定的内容(循环一次)
(0061) 参 数: *pdata--显示内容数组地址
(0062) 返回值 : 无
(0063) /********************************************/
(0064) void Cycle_smg_display(uchar *pdata)
(0065) {
(0066) uchar i,j;
(0067) for(i=0;i<240;i++) //共滚动6次,每次内容显示40个循环
00FD 2744 CLR R20
00FE C02B RJMP 0x012A
(0068) {
(0069) for(j=0;j<6;j++) //扫描6个数码管
00FF 24AA CLR R10
0100 C025 RJMP 0x0126
(0070) {
(0071) One_smg_display(pdata[(i/40+j)%6],j+1);//显示
0101 2D2A MOV R18,R10
0102 5F2F SUBI R18,0xFF
0103 E288 LDI R24,0x28
0104 E090 LDI R25,0
0105 2F04 MOV R16,R20
0106 2711 CLR R17
0107 932F PUSH R18
0108 933F PUSH R19
0109 019C MOVW R18,R24
010A 940E0160 CALL div16s
010C 0118 MOVW R2,R16
010D 913F POP R19
010E 912F POP R18
010F 2C4A MOV R4,R10
0110 2455 CLR R5
0111 0C24 ADD R2,R4
0112 1C35 ADC R3,R5
0113 E086 LDI R24,6
0114 E090 LDI R25,0
0115 932F PUSH R18
0116 933F PUSH R19
0117 019C MOVW R18,R24
0118 0181 MOVW R16,R2
0119 940E015E CALL mod16s
011B 01F8 MOVW R30,R16
011C 913F POP R19
011D 912F POP R18
011E 0FE6 ADD R30,R22
011F 1FF7 ADC R31,R23
0120 8100 LDD R16,0+Z
0121 DF96 RCALL _One_smg_display
(0072) Delayus(2000); //调整显示时间和亮度(时间越长亮度越高,但是太长数码管就闪了)
0122 ED00 LDI R16,0xD0
0123 E017 LDI R17,7
0124 DF3F RCALL _Delayus
0125 94A3 INC R10
0126 2D8A MOV R24,R10
0127 3086 CPI R24,6
0128 F2C0 BCS 0x0101
0129 9543 INC R20
012A 3F40 CPI R20,0xF0
012B F298 BCS 0x00FF
(0073) }
(0074) }
(0075) }
012C 940E01AD CALL pop_gset3
012E 9508 RET
_main:
data --> Y+0
012F 9726 SBIW R28,6
(0076) /*******************************************
(0077) 函数名称: main
(0078) 功 能: 6个数码管循环滚动显示指定的内容
(0079) 参 数: 无
(0080) 返回值 : 无
(0081) /********************************************/
(0082) void main(void)
(0083) {
(0084) uchar data[6]={1,2,3,4,5,6};//六个数码管滚动显示1,2,3,4,5,6
0130 E880 LDI R24,0x80
0131 E090 LDI R25,0
0132 01FE MOVW R30,R28
0133 E006 LDI R16,6
0134 E010 LDI R17,0
0135 93FA ST R31,-Y
0136 93EA ST R30,-Y
0137 939A ST R25,-Y
0138 938A ST R24,-Y
0139 940E01B0 CALL asgncblk
(0085) Board_init( ); //初始化开发板
013B DF56 RCALL _Board_init
013C C002 RJMP 0x013F
(0086) while(1)
(0087) {
(0088) Cycle_smg_display(data);
013D 018E MOVW R16,R28
013E DFBB RCALL _Cycle_smg_display
013F CFFD RJMP 0x013D
(0089) }
(0090) }FILE: <library>
0140 9626 ADIW R28,6
0141 9508 RET
mod16u:
0142 9468 BSET 6
0143 C001 RJMP xdiv16u
div16u:
0144 94E8 BCLR 6
xdiv16u:
0145 92EA ST R14,-Y
0146 92FA ST R15,-Y
0147 938A ST R24,-Y
0148 24EE CLR R14
0149 24FF CLR R15
014A E180 LDI R24,0x10
014B 0F00 LSL R16
014C 1F11 ROL R17
014D 1CEE ROL R14
014E 1CFF ROL R15
014F 16E2 CP R14,R18
0150 06F3 CPC R15,R19
0151 F018 BCS 0x0155
0152 1AE2 SUB R14,R18
0153 0AF3 SBC R15,R19
0154 9503 INC R16
0155 958A DEC R24
0156 F7A1 BNE 0x014B
0157 F416 BRTC 0x015A
0158 2D0E MOV R16,R14
0159 2D1F MOV R17,R15
015A 9189 LD R24,Y+
015B 90F9 LD R15,Y+
015C 90E9 LD R14,Y+
015D 9508 RET
mod16s:
015E 9468 BSET 6
015F C001 RJMP 0x0161
div16s:
0160 94E8 BCLR 6
0161 92DA ST R13,-Y
0162 2ED1 MOV R13,R17
0163 26D3 EOR R13,R19
0164 FF17 SBRS R17,7
0165 C004 RJMP 0x016A
0166 9510 COM R17
0167 9500 COM R16
0168 5F0F SUBI R16,0xFF
0169 4F1F SBCI R17,0xFF
016A FF37 SBRS R19,7
016B C004 RJMP 0x0170
016C 9530 COM R19
016D 9520 COM R18
016E 5F2F SUBI R18,0xFF
016F 4F3F SBCI R19,0xFF
0170 940E0145 CALL xdiv16u
0172 F036 BRTS 0x0179
0173 FED7 SBRS R13,7
0174 C004 RJMP 0x0179
0175 9510 COM R17
0176 9500 COM R16
0177 5F0F SUBI R16,0xFF
0178 4F1F SBCI R17,0xFF
0179 90D9 LD R13,Y+
017A 9508 RET
empy16s:
017B 920A ST R0,-Y
017C 921A ST R1,-Y
017D 938A ST R24,-Y
017E 939A ST R25,-Y
017F 9F02 MUL R16,R18
0180 01C0 MOVW R24,R0
0181 9F12 MUL R17,R18
0182 0D90 ADD R25,R0
0183 9F03 MUL R16,R19
0184 0D90 ADD R25,R0
0185 018C MOVW R16,R24
0186 9199 LD R25,Y+
0187 9189 LD R24,Y+
0188 9019 LD R1,Y+
0189 9009 LD R0,Y+
018A 9508 RET
push_gset1:
018B 935A ST R21,-Y
018C 934A ST R20,-Y
018D 9508 RET
pop_gset1:
018E E0E1 LDI R30,1
pop:
018F 9149 LD R20,Y+
0190 9159 LD R21,Y+
0191 FDE0 SBRC R30,0
0192 9508 RET
0193 9169 LD R22,Y+
0194 9179 LD R23,Y+
0195 FDE1 SBRC R30,1
0196 9508 RET
0197 90A9 LD R10,Y+
0198 90B9 LD R11,Y+
0199 FDE2 SBRC R30,2
019A 9508 RET
019B 90C9 LD R12,Y+
019C 90D9 LD R13,Y+
019D FDE3 SBRC R30,3
019E 9508 RET
019F 90E9 LD R14,Y+
01A0 90F9 LD R15,Y+
01A1 9508 RET
push_gset2:
01A2 937A ST R23,-Y
01A3 936A ST R22,-Y
01A4 940C018B JMP push_gset1
push_gset3:
01A6 92BA ST R11,-Y
01A7 92AA ST R10,-Y
01A8 940C01A2 JMP push_gset2
pop_gset2:
01AA E0E2 LDI R30,2
01AB 940C018F JMP pop
pop_gset3:
01AD E0E4 LDI R30,4
01AE 940C018F JMP pop
asgncblk:
01B0 93AA ST R26,-Y
01B1 93BA ST R27,-Y
01B2 93EA ST R30,-Y
01B3 93FA ST R31,-Y
01B4 920A ST R0,-Y
01B5 81AF LDD R26,7+Y
01B6 85B8 LDD R27,8+Y
01B7 81ED LDD R30,5+Y
01B8 81FE LDD R31,6+Y
01B9 3000 CPI R16,0
01BA 0701 CPC R16,R17
01BB F031 BEQ 0x01C2
01BC 95C8 LPM
01BD 920D ST R0,X+
01BE 9631 ADIW R30,1
01BF 5001 SUBI R16,1
01C0 4010 SBCI R17,0
01C1 CFF7 RJMP 0x01B9
01C2 9009 LD R0,Y+
01C3 91F9 LD R31,Y+
01C4 91E9 LD R30,Y+
01C5 91B9 LD R27,Y+
01C6 91A9 LD R26,Y+
01C7 9624 ADIW R28,4
01C8 9508 RET
lsl8:
01C9 2311 TST R17
01CA F019 BEQ 0x01CE
01CB 0F00 LSL R16
01CC 951A DEC R17
01CD CFFB RJMP lsl8
01CE 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -