📄 main.lst
字号:
1 .file "main.c"
2 .arch atmega16
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
11 .text
12 .Ltext0:
93 .global delay
95 delay:
97 .Ltext1:
1:./LCD1602.c **** #define uchar unsigned char
2:./LCD1602.c **** #define uint unsigned int
3:./LCD1602.c **** #define ulong unsigned long
4:./LCD1602.c **** #define dat 1
5:./LCD1602.c **** #define com 0
6:./LCD1602.c **** #include <avr/io.h>
7:./LCD1602.c **** #define DP PORTB //模拟数居据总线
8:./LCD1602.c **** #define DR DDRB
9:./LCD1602.c **** #define PP PINB
10:./LCD1602.c **** #define e_s PORTA|=0x20
11:./LCD1602.c **** #define e_c PORTA&=~0x20
12:./LCD1602.c **** #define rw_s PORTA|=0x40
13:./LCD1602.c **** #define rw_c PORTA&=~0x40
14:./LCD1602.c **** #define rs_s PORTA|=0x80
15:./LCD1602.c **** #define rs_c PORTA&=~0x80
16:./LCD1602.c ****
17:./LCD1602.c **** void delay(uint t) //1mS延时7.3728M
18:./LCD1602.c **** {ulong i;
99 .LM1:
100 /* prologue: frame size=0 */
101 /* prologue end (size=0) */
102 .L113:
19:./LCD1602.c **** while(t--)
20:./LCD1602.c **** {for(i=0;i<50000;i++)
104 .LM2:
105 0000 0197 sbiw r24,1
106 0002 2FEF ldi r18,hi8(-1)
107 0004 8F3F cpi r24,lo8(-1)
108 0006 9207 cpc r25,r18
109 0008 59F0 breq .L10
110 000a 2FE4 ldi r18,lo8(49999)
111 000c 33EC ldi r19,hi8(49999)
112 000e 40E0 ldi r20,hlo8(49999)
113 0010 50E0 ldi r21,hhi8(49999)
114 .L7:
116 .LM3:
117 0012 2253 subi r18,lo8(-(-50))
118 0014 3040 sbci r19,hi8(-(-50))
119 0016 4040 sbci r20,hlo8(-(-50))
120 0018 5040 sbci r21,hhi8(-(-50))
121 001a 57FF sbrs r21,7
122 001c FACF rjmp .L7
123 001e F0CF rjmp .L113
124 .L10:
125 0020 0895 ret
126 /* epilogue: frame size=0 */
127 /* epilogue: noreturn */
128 /* epilogue end (size=0) */
129 /* function delay size 17 (17) */
134 .Lscope0:
136 .global busy
138 busy:
21:./LCD1602.c **** ;}
22:./LCD1602.c **** }
23:./LCD1602.c ****
24:./LCD1602.c **** void busy(void) //检查BF信号
25:./LCD1602.c **** {DR=0x00; //设置为输入
140 .LM4:
141 /* prologue: frame size=0 */
142 /* prologue end (size=0) */
143 0022 17BA out 55-0x20,__zero_reg__
144 .L115:
26:./LCD1602.c **** do
27:./LCD1602.c **** {rs_c;rw_s;e_s;}
146 .LM5:
147 0024 DF98 cbi 59-0x20,7
148 0026 DE9A sbi 59-0x20,6
149 0028 DD9A sbi 59-0x20,5
150 002a B799 sbic 54-0x20,7
151 002c FBCF rjmp .L115
28:./LCD1602.c **** while((PP&0x80)!=0); //BUSY
29:./LCD1602.c **** e_c;
153 .LM6:
154 002e DD98 cbi 59-0x20,5
30:./LCD1602.c **** delay(3);
156 .LM7:
157 0030 83E0 ldi r24,lo8(3)
158 0032 90E0 ldi r25,hi8(3)
159 0034 0E94 0000 call delay
31:./LCD1602.c **** DR=0xff;
161 .LM8:
162 0038 8FEF ldi r24,lo8(-1)
163 003a 87BB out 55-0x20,r24
164 /* epilogue: frame size=0 */
165 003c 0895 ret
166 /* epilogue end (size=1) */
167 /* function busy size 14 (13) */
169 .Lscope1:
173 .global w_lcd
175 w_lcd:
32:./LCD1602.c **** }
33:./LCD1602.c ****
34:./LCD1602.c **** void w_lcd(uchar a,uchar dat_com) //向LCD写命令或数据,由dat_com决定
35:./LCD1602.c **** {busy();
177 .LM9:
178 /* prologue: frame size=0 */
179 003e 1F93 push r17
180 0040 CF93 push r28
181 /* prologue end (size=2) */
182 0042 C82F mov r28,r24
183 0044 162F mov r17,r22
184 0046 0E94 0000 call busy
36:./LCD1602.c **** if(dat_com==0)
186 .LM10:
187 004a 1123 tst r17
188 004c 11F4 brne .L119
37:./LCD1602.c **** rs_c;
190 .LM11:
191 004e DF98 cbi 59-0x20,7
192 0050 01C0 rjmp .L120
193 .L119:
38:./LCD1602.c **** else rs_s;
195 .LM12:
196 0052 DF9A sbi 59-0x20,7
197 .L120:
39:./LCD1602.c **** rw_c;
199 .LM13:
200 0054 DE98 cbi 59-0x20,6
40:./LCD1602.c **** DP=a;
202 .LM14:
203 0056 C8BB out 56-0x20,r28
41:./LCD1602.c **** e_s;
205 .LM15:
206 0058 DD9A sbi 59-0x20,5
42:./LCD1602.c **** e_c;
208 .LM16:
209 005a DD98 cbi 59-0x20,5
210 /* epilogue: frame size=0 */
211 005c CF91 pop r28
212 005e 1F91 pop r17
213 0060 0895 ret
214 /* epilogue end (size=3) */
215 /* function w_lcd size 18 (13) */
217 .Lscope2:
220 .global ww
222 ww:
43:./LCD1602.c **** }
44:./LCD1602.c ****
45:./LCD1602.c **** void ww(uchar word[16]) //写n个字符
46:./LCD1602.c **** {uchar i;
224 .LM17:
225 /* prologue: frame size=0 */
226 0062 1F93 push r17
227 0064 CF93 push r28
228 0066 DF93 push r29
229 /* prologue end (size=3) */
230 0068 EC01 movw r28,r24
47:./LCD1602.c **** for(i=0;word[i]!='\0';i++)
232 .LM18:
233 006a 10E0 ldi r17,lo8(0)
234 006c 8881 ld r24,Y
235 006e 8823 tst r24
236 0070 71F0 breq .L127
237 .L125:
48:./LCD1602.c **** w_lcd(word[i],dat);
239 .LM19:
240 0072 FE01 movw r30,r28
241 0074 E10F add r30,r17
242 0076 F11D adc r31,__zero_reg__
243 0078 61E0 ldi r22,lo8(1)
244 007a 8081 ld r24,Z
245 007c 0E94 0000 call w_lcd
247 .LM20:
248 0080 1F5F subi r17,lo8(-(1))
249 0082 FE01 movw r30,r28
250 0084 E10F add r30,r17
251 0086 F11D adc r31,__zero_reg__
252 0088 8081 ld r24,Z
253 008a 8823 tst r24
254 008c 91F7 brne .L125
255 .L127:
256 /* epilogue: frame size=0 */
257 008e DF91 pop r29
258 0090 CF91 pop r28
259 0092 1F91 pop r17
260 0094 0895 ret
261 /* epilogue end (size=4) */
262 /* function ww size 26 (19) */
267 .Lscope3:
270 .global wn
272 wn:
49:./LCD1602.c **** }
50:./LCD1602.c ****
51:./LCD1602.c **** void wn(uchar num) //写数字
52:./LCD1602.c **** {w_lcd(num+0x30,dat);
274 .LM21:
275 /* prologue: frame size=0 */
276 /* prologue end (size=0) */
277 0096 61E0 ldi r22,lo8(1)
278 0098 805D subi r24,lo8(-(48))
279 009a 0E94 0000 call w_lcd
280 /* epilogue: frame size=0 */
281 009e 0895 ret
282 /* epilogue end (size=1) */
283 /* function wn size 5 (4) */
285 .Lscope4:
289 .global go
291 go:
53:./LCD1602.c **** }
54:./LCD1602.c ****
55:./LCD1602.c **** void go(uchar xxx,uchar yyy) //光标移到(xxxx,yyy)
56:./LCD1602.c **** { uchar tmp;
293 .LM22:
294 /* prologue: frame size=0 */
295 /* prologue end (size=0) */
296 00a0 982F mov r25,r24
57:./LCD1602.c **** if(yyy==0)
298 .LM23:
299 00a2 6623 tst r22
300 00a4 19F4 brne .L130
58:./LCD1602.c **** tmp=0x80+xxx;
302 .LM24:
303 00a6 892F mov r24,r25
304 00a8 8058 subi r24,lo8(-(-128))
305 00aa 02C0 rjmp .L131
306 .L130:
59:./LCD1602.c **** else
60:./LCD1602.c **** tmp=0xc0+xxx;
308 .LM25:
309 00ac 892F mov r24,r25
310 00ae 8054 subi r24,lo8(-(-64))
311 .L131:
61:./LCD1602.c **** w_lcd(tmp,com);
313 .LM26:
314 00b0 60E0 ldi r22,lo8(0)
315 00b2 0E94 0000 call w_lcd
316 /* epilogue: frame size=0 */
317 00b6 0895 ret
318 /* epilogue end (size=1) */
319 /* function go size 12 (11) */
324 .Lscope5:
326 .global ini
328 ini:
62:./LCD1602.c **** }
63:./LCD1602.c ****
64:./LCD1602.c **** void ini(void) //初始化
65:./LCD1602.c **** { delay(15);
330 .LM27:
331 /* prologue: frame size=0 */
332 /* prologue end (size=0) */
333 00b8 8FE0 ldi r24,lo8(15)
334 00ba 90E0 ldi r25,hi8(15)
335 00bc 0E94 0000 call delay
66:./LCD1602.c **** w_lcd(0x38,com);
337 .LM28:
338 00c0 60E0 ldi r22,lo8(0)
339 00c2 88E3 ldi r24,lo8(56)
340 00c4 0E94 0000 call w_lcd
67:./LCD1602.c **** delay(5);
342 .LM29:
343 00c8 85E0 ldi r24,lo8(5)
344 00ca 90E0 ldi r25,hi8(5)
345 00cc 0E94 0000 call delay
68:./LCD1602.c **** w_lcd(0x38,com);
347 .LM30:
348 00d0 60E0 ldi r22,lo8(0)
349 00d2 88E3 ldi r24,lo8(56)
350 00d4 0E94 0000 call w_lcd
69:./LCD1602.c **** delay(5);
352 .LM31:
353 00d8 85E0 ldi r24,lo8(5)
354 00da 90E0 ldi r25,hi8(5)
355 00dc 0E94 0000 call delay
70:./LCD1602.c **** w_lcd(0x38,com);
357 .LM32:
358 00e0 60E0 ldi r22,lo8(0)
359 00e2 88E3 ldi r24,lo8(56)
360 00e4 0E94 0000 call w_lcd
71:./LCD1602.c **** delay(10);
362 .LM33:
363 00e8 8AE0 ldi r24,lo8(10)
364 00ea 90E0 ldi r25,hi8(10)
365 00ec 0E94 0000 call delay
72:./LCD1602.c **** w_lcd(0x01,com); //显示清0
367 .LM34:
368 00f0 60E0 ldi r22,lo8(0)
369 00f2 81E0 ldi r24,lo8(1)
370 00f4 0E94 0000 call w_lcd
371 /* epilogue: frame size=0 */
372 00f8 0895 ret
373 /* epilogue end (size=1) */
374 /* function ini size 33 (32) */
376 .Lscope6:
379 .global set
381 set:
73:./LCD1602.c ****
74:./LCD1602.c **** }
75:./LCD1602.c **** /*显视方式参数说明:
76:./LCD1602.c **** 0:关显视
77:./LCD1602.c **** 1:不显示光标,写一个字符光标加1,指针加1
78:./LCD1602.c **** 2:显示光标,写一个字符光标加1,指针加1
79:./LCD1602.c **** 3:不显示光标,写一个字符光标不变,指针加1,整屏显视左移
80:./LCD1602.c **** 4:显示光标,写一个字符光标不变,指针加1,整屏显视左移
81:./LCD1602.c **** */
82:./LCD1602.c **** void set(uchar way) //显视方式设置,其中way是方式参数
83:./LCD1602.c **** {if(way==0) //关显视
383 .LM35:
384 /* prologue: frame size=0 */
385 /* prologue end (size=0) */
386 00fa 682F mov r22,r24
387 00fc 8823 tst r24
388 00fe 11F4 brne .L134
84:./LCD1602.c **** w_lcd(0x08,com);
390 .LM36:
391 0100 88E0 ldi r24,lo8(8)
392 0102 08C0 rjmp .L143
393 .L134:
85:./LCD1602.c **** else if(way==1) //不显视光标,光标、数据指针加1
395 .LM37:
396 0104 8130 cpi r24,lo8(1)
397 0106 49F4 brne .L136
86:./LCD1602.c **** w_lcd(0x0c,com),
399 .LM38:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -