📄 led-16sm.lst
字号:
__start:
__text_start:
9C EFCF LDI R28,0xFF
9D E2D1 LDI R29,0x21
9E BFCD OUT 0x3D,R28
9F BFDE OUT 0x3E,R29
A0 51CE SUBI R28,0x1E
A1 40D0 SBCI R29,0
A2 EA0A LDI R16,0xAA
A3 8308 STD Y+0,R16
A4 2400 CLR R0
A5 E4EE LDI R30,0x4E
A6 E0F2 LDI R31,2
A7 E012 LDI R17,2
A8 35E4 CPI R30,0x54
A9 07F1 CPC R31,R17
AA F011 BEQ 0x00AD
AB 9201 ST R0,Z+
AC CFFB RJMP 0x00A8
AD 8300 STD Z+0,R16
AE EEE9 LDI R30,0xE9
AF E0F0 LDI R31,0
B0 E0A0 LDI R26,0
B1 E0B2 LDI R27,2
B2 E011 LDI R17,1
B3 E000 LDI R16,0
B4 BF0B OUT 0x3B,R16
B5 33E7 CPI R30,0x37
B6 07F1 CPC R31,R17
B7 F021 BEQ 0x00BC
B8 95C8 LPM
B9 9631 ADIW R30,1
BA 920D ST R0,X+
BB CFF9 RJMP 0x00B5
BC 940E 00DD CALL _main
_exit:
BE CFFF RJMP _exit
FILE: C:\+samples-16small\LED-16sm\LED-16sm.c
(0001) /*
(0002) Title: LED-16sm.c
(0003) Connection:
(0004) Factory fixed setting:
(0005) PORTA:
(0006) PA0-PA2 LCD control
(0007) PA3-PA7 4x7-segment display control
(0008) Drive LED group2 (the right group of LED)
(0009) PORTB:
(0010) Shared by LCD and 4x7-segment displays
(0011) output 8-bit data to LCD or 8-bit data to 4x7-segment displays
(0012) PORTC:
(0013) shared by 8-bit dipswitch and 4 x touch switches + 4 buttons
(0014) receive inputs from dipswitch, touch switches and buttons
(0015) PORTD:
(0016) Drive LED group1 (the left group of LED)
(0017) Attention:
(0018) 1. J12 should be capped (connectted)
(0019) 2. J5 is the Jump for LCD back light power
(0020)
(0021) Operation:
(0022) 1. LED group1 does pattern show
(0023) 2. There are four patterns, which pattern in operation is controlled by SW4 and SW5
(0024) 3. The left three LEDs of LED group2 blinks and the others light consistently
(0025) 4. Segment plus dot of 4x7-segment displays lights in sequence
(0026) */
(0027)
(0028)
(0029) #include <iom16v.h>
(0030) #include <macros.h>
(0031)
(0032) unsigned char pattern1[]= {0x01, 0x03, 0x07, 0x0F, 0x1f, 0x3f, 0x7f, 0xff, 0x7f,
(0033) 0x3f, 0x1f, 0x0f, 0x07, 0x03, 0x01};
(0034) unsigned char pattern2[]= {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x40,
(0035) 0x20, 0x10, 0x08, 0x04, 0x02, 0x01};
(0036) unsigned char pattern3[]= {0x01, 0x80, 0x02, 0x40, 0x04, 0x20, 0x08, 0x10, 0x10,
(0037) 0x08, 0x20, 0x04, 0x40, 0x02, 0x80};
(0038) unsigned char pattern4[]= {0x11, 0x22, 0x44, 0x88, 0x44, 0x22, 0x11, 0x22, 0x44,
(0039) 0x88, 0x44, 0x22, 0x11, 0x00, 0x00};
(0040) unsigned char pattern5[]= {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f};
(0041) const char dig0 = 0x40, dig1 = 0x80, dig2=0x10, dig3=0x08, dot=0x20;
(0042) char segconv[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
(0043) unsigned char BCD0, BCD1, BCD2, BCD3;
(0044) int count;
(0045)
(0046) void port_init(void)
(0047) {
(0048) DDRA = 0xFF; //set PortA output
_port_init:
BF EF8F LDI R24,0xFF
C0 BB8A OUT 0x1A,R24
(0049) DDRB = 0xff; //set PORTB output
C1 BB87 OUT 0x17,R24
(0050) DDRC = 0x00; //set PORTC output
C2 2422 CLR R2
C3 BA24 OUT 0x14,R2
(0051) PORTC = 0xff;
C4 BB85 OUT 0x15,R24
(0052) DDRD = 0xFF; //set PORTD output
C5 BB81 OUT 0x11,R24
C6 9508 RET
_delay:
i --> R20
j --> R22
count --> R16
C7 940E 0168 CALL push_xgsetF000
(0053) }
(0054)
(0055) void delay(int count)
(0056) {
(0057) int i, j;
(0058) for(i=count; i>0; i--)
C9 01A8 MOVW R20,R16
CA C00B RJMP 0x00D6
(0059) for(j=10; j>0; j--)
CB E06A LDI R22,0xA
CC E070 LDI R23,0
CD 5061 SUBI R22,1
CE 4070 SBCI R23,0
CF 2422 CLR R2
D0 2433 CLR R3
D1 1626 CP R2,R22
D2 0637 CPC R3,R23
D3 F3CC BLT 0x00CD
D4 5041 SUBI R20,1
D5 4050 SBCI R21,0
D6 2422 CLR R2
D7 2433 CLR R3
D8 1624 CP R2,R20
D9 0635 CPC R3,R21
DA F384 BLT 0x00CB
DB 940C 016D JMP pop_xgsetF000
(0060) ;
(0061) }
(0062)
(0063) //*****************************************************************
(0064)
(0065) void main(void)
(0066) {
(0067) unsigned char outa=0x00, outb=0x00, outc=0x00, outd=0x00;
_main:
outd --> R10
outc --> R10
outb --> R10
outa --> R10
j --> R22
count --> R10
swin2 --> R12
led_index --> R20
swin --> R14
DD 24AA CLR R10
(0068) int swin, swin2, led_index=0;
DE 2744 CLR R20
DF 2755 CLR R21
(0069) int j, count=0;
E0 24BB CLR R11
(0070)
(0071) port_init();
E1 DFDD RCALL _port_init
(0072) PORTA=0xff;
E2 EF8F LDI R24,0xFF
E3 BB8B OUT 0x1B,R24
E4 C071 RJMP 0x0156
(0073) while(1)
(0074) {
(0075) WDR(); //Watchdog reset
E5 95A8 WDR
(0076) if(++count>30)
E6 01C5 MOVW R24,R10
E7 9601 ADIW R24,1
E8 015C MOVW R10,R24
E9 E18E LDI R24,0x1E
EA E090 LDI R25,0
EB 158A CP R24,R10
EC 059B CPC R25,R11
ED F4B4 BGE 0x0104
(0077) {
(0078) count=0;
EE 24AA CLR R10
EF 24BB CLR R11
(0079) PORTA^=0x07;
F0 E087 LDI R24,7
F1 B22B IN R2,0x1B
F2 2628 EOR R2,R24
F3 BA2B OUT 0x1B,R2
(0080) PORTB=pattern5[j++];
F4 011B MOVW R2,R22
F5 5F6F SUBI R22,0xFF
F6 4F7F SBCI R23,0xFF
F7 E38C LDI R24,0x3C
F8 E092 LDI R25,2
F9 01F1 MOVW R30,R2
FA 0FE8 ADD R30,R24
FB 1FF9 ADC R31,R25
FC 8020 LDD R2,Z+0
FD BA28 OUT 0x18,R2
(0081) if(j>=8)
FE 3068 CPI R22,0x8
FF E0E0 LDI R30,0
100 077E CPC R23,R30
101 F014 BLT 0x0104
(0082) j=0;
102 2766 CLR R22
103 2777 CLR R23
(0083) }
(0084)
(0085) //PORTA=swin;
(0086) swin=PINC&0x30;
104 B383 IN R24,0x13
105 2799 CLR R25
106 7380 ANDI R24,0x30
107 7090 ANDI R25,0
108 017C MOVW R14,R24
(0087) swin=swin>>4;
109 94F5 ASR R15
10A 94E7 ROR R14
10B 94F5 ASR R15
10C 94E7 ROR R14
10D 94F5 ASR R15
10E 94E7 ROR R14
10F 94F5 ASR R15
110 94E7 ROR R14
(0088) swin2=~PINC&0x0f;
111 B383 IN R24,0x13
112 2799 CLR R25
113 9580 COM R24
114 9590 COM R25
115 708F ANDI R24,0xF
116 7090 ANDI R25,0
117 016C MOVW R12,R24
(0089)
(0090) if(swin==0)
118 20EE TST R14
119 F451 BNE 0x0124
11A 20FF TST R15
11B F441 BNE 0x0124
(0091) {
(0092) PORTD=pattern1[led_index];
11C E080 LDI R24,0
11D E092 LDI R25,2
11E 01FA MOVW R30,R20
11F 0FE8 ADD R30,R24
120 1FF9 ADC R31,R25
121 8020 LDD R2,Z+0
122 BA22 OUT 0x12,R2
(0093) }
123 C021 RJMP 0x0145
(0094) else if(swin==0x01)
124 01C7 MOVW R24,R14
125 3081 CPI R24,1
126 E0E0 LDI R30,0
127 079E CPC R25,R30
128 F441 BNE 0x0131
(0095) {
(0096) PORTD=pattern2[led_index];
129 E08F LDI R24,0xF
12A E092 LDI R25,2
12B 01FA MOVW R30,R20
12C 0FE8 ADD R30,R24
12D 1FF9 ADC R31,R25
12E 8020 LDD R2,Z+0
12F BA22 OUT 0x12,R2
(0097) }
130 C014 RJMP 0x0145
(0098) else if(swin==0x02)
131 01C7 MOVW R24,R14
132 3082 CPI R24,2
133 E0E0 LDI R30,0
134 079E CPC R25,R30
135 F441 BNE 0x013E
(0099) {
(0100) PORTD=pattern3[led_index];
136 E18E LDI R24,0x1E
137 E092 LDI R25,2
138 01FA MOVW R30,R20
139 0FE8 ADD R30,R24
13A 1FF9 ADC R31,R25
13B 8020 LDD R2,Z+0
13C BA22 OUT 0x12,R2
(0101) }
13D C007 RJMP 0x0145
(0102) else
(0103) {
(0104) PORTD=pattern4[led_index];
13E E28D LDI R24,0x2D
13F E092 LDI R25,2
140 01FA MOVW R30,R20
141 0FE8 ADD R30,R24
142 1FF9 ADC R31,R25
143 8020 LDD R2,Z+0
144 BA22 OUT 0x12,R2
(0105) }
(0106)
(0107) led_index++;
145 5F4F SUBI R20,0xFF
146 4F5F SBCI R21,0xFF
(0108) if(led_index>14)
147 E08E LDI R24,0xE
148 E090 LDI R25,0
149 1784 CP R24,R20
14A 0795 CPC R25,R21
14B F414 BGE 0x014E
(0109) led_index=0;
14C 2744 CLR R20
14D 2755 CLR R21
(0110)
(0111) delay(2000+800*swin2);
FILE: <library>
14E E200 LDI R16,0x20
14F E013 LDI R17,3
150 0196 MOVW R18,R12
151 940E 0158 CALL empy16s
153 5300 SUBI R16,0x30
154 4F18 SBCI R17,0xF8
155 DF71 RCALL _delay
156 CF8E RJMP 0x00E5
157 9508 RET
empy16s:
158 920A ST R0,-Y
159 921A ST R1,-Y
15A 938A ST R24,-Y
15B 939A ST R25,-Y
15C 9F02 MUL R16,R18
15D 01C0 MOVW R24,R0
15E 9F12 MUL R17,R18
15F 0D90 ADD R25,R0
160 9F03 MUL R16,R19
161 0D90 ADD R25,R0
162 018C MOVW R16,R24
163 9199 LD R25,Y+
164 9189 LD R24,Y+
165 9019 LD R1,Y+
166 9009 LD R0,Y+
167 9508 RET
push_xgsetF000:
168 937A ST R23,-Y
169 936A ST R22,-Y
16A 935A ST R21,-Y
16B 934A ST R20,-Y
16C 9508 RET
pop_xgsetF000:
16D 9149 LD R20,Y+
16E 9159 LD R21,Y+
16F 9169 LD R22,Y+
170 9179 LD R23,Y+
171 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -