lius.lst
来自「本人编写的mega16单片机控制的 八种花样流水灯源代码」· LST 代码 · 共 741 行 · 第 1/2 页
LST
741 行
136 E010 LDI R17,0
137 DF27 RCALL _DelayMs
138 9159 LD R21,Y+
139 9149 LD R20,Y+
13A 9508 RET
(0085) }
(0086) }
(0087)
(0088) void main()
(0089) {
(0090) int l,m,n,o,p,q,r,s,i,j;
(0091) DDRA =0X00; //端口上拉输入
_main:
r --> R20
j --> R22
s --> R22
q --> R22
p --> R22
o --> R22
n --> R22
m --> R22
l --> R22
i --> R10
13B 2422 CLR R2
13C BA2A OUT 0x1A,R2
(0092) PORTA=0XFF;
13D EF8F LDI R24,0xFF
13E BB8B OUT 0x1B,R24
(0093) DDRB =0x00; //端口输出
13F BA27 OUT 0x17,R2
(0094) PORTB=0xFF; //输出高电平,LED熄灭
140 BB88 OUT 0x18,R24
(0095) DDRC =0XFF;
141 BB84 OUT 0x14,R24
(0096) PORTC=0XFF;
142 BB85 OUT 0x15,R24
(0097) DDRD =0X00;
143 BA21 OUT 0x11,R2
(0098) PORTD=0XFF;
144 BB82 OUT 0x12,R24
(0099)
(0100) for (r=0;r<5;r++)
145 2744 CLR R20
146 2755 CLR R21
(0101) {
(0102) for(l=0;l<5;l++) //模式1:顺序点亮
147 2766 CLR R22
148 2777 CLR R23
(0103) {
(0104) for (i = 0; i < 8; i++) //顺序单个点亮LED
149 24AA CLR R10
14A 24BB CLR R11
(0105) LED_01(i);
14B 0185 MOVW R16,R10
14C DF31 RCALL _LED_01
14D 01C5 MOVW R24,R10
14E 9601 ADIW R24,1
14F 015C MOVW R10,R24
150 3088 CPI R24,0x8
151 E0E0 LDI R30,0
152 079E CPC R25,R30
153 F3BC BLT 0x014B
(0106) for (i = 6; i > 0; i--) //逆序单个点亮LED
154 E086 LDI R24,6
155 E090 LDI R25,0
156 015C MOVW R10,R24
(0107) LED_01(i);
157 0185 MOVW R16,R10
158 DF25 RCALL _LED_01
159 01C5 MOVW R24,R10
15A 9701 SBIW R24,1
15B 015C MOVW R10,R24
15C 2422 CLR R2
15D 2433 CLR R3
15E 1628 CP R2,R24
15F 0639 CPC R3,R25
160 F3B4 BLT 0x0157
161 5F6F SUBI R22,0xFF
162 4F7F SBCI R23,0xFF
163 3065 CPI R22,5
164 E0E0 LDI R30,0
165 077E CPC R23,R30
166 F314 BLT 0x0149
(0108) }
(0109) LED_off();
167 DF12 RCALL _LED_off
(0110)
(0111) for(m=0;m<5;m++) //模式2:顺序单个间隔点亮
168 2766 CLR R22
169 2777 CLR R23
(0112) {
(0113) for (i = 0; i < 8; i += 2) //顺序间隔点亮LED
16A 24AA CLR R10
16B 24BB CLR R11
(0114) LED_01(i);
16C 0185 MOVW R16,R10
16D DF10 RCALL _LED_01
16E 01C5 MOVW R24,R10
16F 9602 ADIW R24,2
170 015C MOVW R10,R24
171 3088 CPI R24,0x8
172 E0E0 LDI R30,0
173 079E CPC R25,R30
174 F3BC BLT 0x016C
(0115) for (i = 7; i > 0; i -= 2) //逆序间隔点亮LED
175 E087 LDI R24,7
176 E090 LDI R25,0
177 015C MOVW R10,R24
(0116) LED_01(i);
178 0185 MOVW R16,R10
179 DF04 RCALL _LED_01
17A 01C5 MOVW R24,R10
17B 9702 SBIW R24,2
17C 015C MOVW R10,R24
17D 2422 CLR R2
17E 2433 CLR R3
17F 1628 CP R2,R24
180 0639 CPC R3,R25
181 F3B4 BLT 0x0178
182 5F6F SUBI R22,0xFF
183 4F7F SBCI R23,0xFF
184 3065 CPI R22,5
185 E0E0 LDI R30,0
186 077E CPC R23,R30
187 F314 BLT 0x016A
(0117) }
(0118) LED_off();
188 DEF1 RCALL _LED_off
(0119)
(0120) for(n=0;n<5;n++) //模式3:间隔点亮
189 2766 CLR R22
18A 2777 CLR R23
(0121) {
(0122) for (i = 2; i < 8; i++) //间隔顺序同时点亮
18B E082 LDI R24,2
18C E090 LDI R25,0
18D 015C MOVW R10,R24
(0123) LED_02(i);
18E 0185 MOVW R16,R10
18F DF00 RCALL _LED_02
190 01C5 MOVW R24,R10
191 9601 ADIW R24,1
192 015C MOVW R10,R24
193 3088 CPI R24,0x8
194 E0E0 LDI R30,0
195 079E CPC R25,R30
196 F3BC BLT 0x018E
(0124) for (i = 6; i > 2; i--) //间隔逆序同时点亮
197 E086 LDI R24,6
198 E090 LDI R25,0
199 015C MOVW R10,R24
(0125) LED_02(i);
19A 0185 MOVW R16,R10
19B DEF4 RCALL _LED_02
19C 01C5 MOVW R24,R10
19D 9701 SBIW R24,1
19E 015C MOVW R10,R24
19F E082 LDI R24,2
1A0 E090 LDI R25,0
1A1 158A CP R24,R10
1A2 059B CPC R25,R11
1A3 F3B4 BLT 0x019A
1A4 5F6F SUBI R22,0xFF
1A5 4F7F SBCI R23,0xFF
1A6 3065 CPI R22,5
1A7 E0E0 LDI R30,0
1A8 077E CPC R23,R30
1A9 F30C BLT 0x018B
(0126) }
(0127) LED_off();
1AA DECF RCALL _LED_off
(0128)
(0129) for(o=0;o<5;o++) //模式4:相临点亮
1AB 2766 CLR R22
1AC 2777 CLR R23
(0130) {
(0131) for (i = 1; i < 8; i++) //相临顺序同时点亮
1AD E081 LDI R24,1
1AE E090 LDI R25,0
1AF 015C MOVW R10,R24
(0132) LED_03(i);
1B0 0185 MOVW R16,R10
1B1 DEFA RCALL _LED_03
1B2 01C5 MOVW R24,R10
1B3 9601 ADIW R24,1
1B4 015C MOVW R10,R24
1B5 3088 CPI R24,0x8
1B6 E0E0 LDI R30,0
1B7 079E CPC R25,R30
1B8 F3BC BLT 0x01B0
(0133) for (i = 6; i > 1; i--) //相临逆序同时点亮
1B9 E086 LDI R24,6
1BA E090 LDI R25,0
1BB 015C MOVW R10,R24
(0134) LED_03(i);
1BC 0185 MOVW R16,R10
1BD DEEE RCALL _LED_03
1BE 01C5 MOVW R24,R10
1BF 9701 SBIW R24,1
1C0 015C MOVW R10,R24
1C1 E081 LDI R24,1
1C2 E090 LDI R25,0
1C3 158A CP R24,R10
1C4 059B CPC R25,R11
1C5 F3B4 BLT 0x01BC
1C6 5F6F SUBI R22,0xFF
1C7 4F7F SBCI R23,0xFF
1C8 3065 CPI R22,5
1C9 E0E0 LDI R30,0
1CA 077E CPC R23,R30
1CB F30C BLT 0x01AD
(0135) }
(0136) LED_off();
1CC DEAD RCALL _LED_off
(0137)
(0138) for(p=0;p<5;p++) //模式5:发散聚集点亮
1CD 2766 CLR R22
1CE 2777 CLR R23
(0139) {
(0140) for(i=0;i<4;i++) //发散点亮
1CF 24AA CLR R10
1D0 24BB CLR R11
(0141) LED_04(i);
1D1 0185 MOVW R16,R10
1D2 DEF5 RCALL _LED_04
1D3 01C5 MOVW R24,R10
1D4 9601 ADIW R24,1
1D5 015C MOVW R10,R24
1D6 3084 CPI R24,4
1D7 E0E0 LDI R30,0
1D8 079E CPC R25,R30
1D9 F3BC BLT 0x01D1
(0142) for(i=2;i>0;i--) //聚集点亮
1DA E082 LDI R24,2
1DB E090 LDI R25,0
1DC 015C MOVW R10,R24
(0143) LED_04(i);
1DD 0185 MOVW R16,R10
1DE DEE9 RCALL _LED_04
1DF 01C5 MOVW R24,R10
1E0 9701 SBIW R24,1
1E1 015C MOVW R10,R24
1E2 2422 CLR R2
1E3 2433 CLR R3
1E4 1628 CP R2,R24
1E5 0639 CPC R3,R25
1E6 F3B4 BLT 0x01DD
1E7 5F6F SUBI R22,0xFF
1E8 4F7F SBCI R23,0xFF
1E9 3065 CPI R22,5
1EA E0E0 LDI R30,0
1EB 077E CPC R23,R30
1EC F314 BLT 0x01CF
(0144) }
(0145) LED_off();
1ED DE8C RCALL _LED_off
(0146)
(0147) for(q=0;q<5;q++) //模式6:四四点亮
1EE 2766 CLR R22
1EF 2777 CLR R23
(0148) {
(0149) for(i=0;i<4;i++) //四四顺序点亮
1F0 24AA CLR R10
1F1 24BB CLR R11
(0150) LED_05(i);
1F2 0185 MOVW R16,R10
1F3 DF01 RCALL _LED_05
1F4 01C5 MOVW R24,R10
1F5 9601 ADIW R24,1
1F6 015C MOVW R10,R24
1F7 3084 CPI R24,4
1F8 E0E0 LDI R30,0
1F9 079E CPC R25,R30
1FA F3BC BLT 0x01F2
(0151) for(i=2;i>0;i--) //四四逆序点亮
1FB E082 LDI R24,2
1FC E090 LDI R25,0
1FD 015C MOVW R10,R24
(0152) LED_05(i);
1FE 0185 MOVW R16,R10
1FF DEF5 RCALL _LED_05
200 01C5 MOVW R24,R10
201 9701 SBIW R24,1
202 015C MOVW R10,R24
203 2422 CLR R2
204 2433 CLR R3
205 1628 CP R2,R24
206 0639 CPC R3,R25
207 F3B4 BLT 0x01FE
208 5F6F SUBI R22,0xFF
209 4F7F SBCI R23,0xFF
20A 3065 CPI R22,5
20B E0E0 LDI R30,0
20C 077E CPC R23,R30
20D F314 BLT 0x01F0
(0153) }
(0154) LED_off();
20E DE6B RCALL _LED_off
(0155)
(0156) for(s=0;s<5;s++) //模式7:四四点亮
20F 2766 CLR R22
210 2777 CLR R23
(0157) {
(0158) for(i=0;i<2;i++) //四四顺序点亮
211 24AA CLR R10
212 24BB CLR R11
(0159) LED_06(i);
213 0185 MOVW R16,R10
214 DF0D RCALL _LED_06
215 01C5 MOVW R24,R10
216 9601 ADIW R24,1
217 015C MOVW R10,R24
218 3082 CPI R24,2
219 E0E0 LDI R30,0
21A 079E CPC R25,R30
21B F3BC BLT 0x0213
21C 5F6F SUBI R22,0xFF
21D 4F7F SBCI R23,0xFF
21E 3065 CPI R22,5
21F E0E0 LDI R30,0
220 077E CPC R23,R30
221 F37C BLT 0x0211
(0160) }
(0161) LED_off();
222 DE57 RCALL _LED_off
(0162)
(0163) for(j=0;j<10;j++) //模式8:全部点亮熄灭
223 2766 CLR R22
224 2777 CLR R23
(0164) {
(0165) LED_on();
225 DE50 RCALL _LED_on
(0166) LED_off();
226 DE53 RCALL _LED_off
227 5F6F SUBI R22,0xFF
228 4F7F SBCI R23,0xFF
229 306A CPI R22,0xA
22A E0E0 LDI R30,0
22B 077E CPC R23,R30
22C F3C4 BLT 0x0225
22D 5F4F SUBI R20,0xFF
22E 4F5F SBCI R21,0xFF
22F 3045 CPI R20,5
230 E0E0 LDI R30,0
231 075E CPC R21,R30
232 F40C BGE 0x0234
233 CF13 RJMP 0x0147
(0167) }
(0168) }
(0169) //MCUCR=0x40; //空闲模式,CPU占用100%
(0170) //MCUCR=0x50; //ADC噪声抑制模式,CPU占用100%
(0171) //MCUCR=0x60; //掉电模式,CPU占用80%
(0172) //MCUCR=0x70; //省电模式,CPU占用4%
(0173) //MCUCR=0xE0; //Standby模式,CPU占用80%
(0174) MCUCR=0xF0; //扩展Standby模式,CPU占用4%
234 EF80 LDI R24,0xF0
235 BF85 OUT 0x35,R24
(0175) asm("sleep"); //CPU休眠指令
FILE: <library>
236 9588 SLEEP
237 9508 RET
lsl16:
238 2322 TST R18
239 F021 BEQ 0x023E
23A 0F00 LSL R16
23B 1F11 ROL R17
23C 952A DEC R18
23D CFFA RJMP lsl16
23E 9508 RET
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?