📄 main.lst
字号:
217 push r28
218 push r29
219 /* prologue end (size=4) */
220 movw r16,r24
221 ldi r28,lo8(0)
55:mydelay.h **** unsigned int i=0;
56:mydelay.h **** for (i=0;i<n;i++)
57:mydelay.h **** delay_1ms();
58:mydelay.h **** }
59:mydelay.h **** void delay_s(unsigned int n)
60:mydelay.h **** {
222
223 rjmp .L18
224 .L19:
226 003c 1F93 .LM11:
227 003e CF93 ldi r24,lo8(1000)
228 0040 DF93 ldi r25,hi8(1000)
229 call delay_nms
231 0044 C0E0 .LM12:
232 0046 D0E0 adiw r28,1
233 0048 00C0 .L18:
234 cp r28,r16
61:mydelay.h **** unsigned int i=0;
62:mydelay.h **** for(i=0;i<n;i++)
63:mydelay.h **** delay_nms(1000);
235
236 brne .L19
237 004a 88EE /* epilogue: frame size=0 */
238 004c 93E0 pop r29
239 004e 0E94 0000 pop r28
240 pop r17
241 pop r16
242 0052 2196 ret
243 /* epilogue end (size=5) */
244 0054 C017 /* function delay_s size 21 (12) */
249 005c CF91 .Lscope5:
252 0062 0895 .global delay
254 delay:
256 .LM13:
257 /* prologue: frame size=0 */
258 /* prologue end (size=0) */
260 .LM14:
261 call delay_nms
262 /* epilogue: frame size=0 */
263 ret
264 /* epilogue end (size=1) */
64:mydelay.h **** }
65:mydelay.h **** void delay(unsigned int n) //N ms延时函数
66:mydelay.h **** {
265 */
267 .Lscope6:
67:mydelay.h **** delay_nms(n);
269 abs "data:P(0,11)",64,0,0,24
271 0064 0E94 0000 .global LCD_write_byte
273 0068 0895 LCD_write_byte:
275 .Ltext4:
277 .LM15:
278 /* prologue: frame size=0 */
279 /* prologue end (size=0) */
281 .LM16:
282 cbi 56-0x20,4
284 .LM17:
285 tst r22
1:3310LCD.h **** #include <avr/io.h>
2:3310LCD.h **** #include "mydelay.h"
3:3310LCD.h **** #include "english_6x8_pixel.h"
4:3310LCD.h **** #include "write_chinese_string_pixel.h"
5:3310LCD.h **** #include "move_chinese_string_pixel.h"
6:3310LCD.h ****
7:3310LCD.h **** /*-----------------------------------------------------------------------
8:3310LCD.h **** LCD_init : 3310LCD初始化
9:3310LCD.h ****
10:3310LCD.h **** 编写日期 :2004-8-10
11:3310LCD.h **** 最后修改日期 :2004-8-10
12:3310LCD.h **** -----------------------------------------------------------------------*/
13:3310LCD.h **** #define LCD_DC 0x40 // LCD第4脚, Mega16:PB3 第4脚
14:3310LCD.h **** #define LCD_CE 0x10 // LCD第5脚, Mega16:PB2 第3脚
15:3310LCD.h **** #define SPI_MOSI 0x20 // LCD第3脚, Mega16:PB5(MOSI) 第6脚
16:3310LCD.h **** #define LCD_RST 0x02 // LCD第8脚, Mega16:PB1() 第2脚
17:3310LCD.h **** #define SPI_CLK 0x80 // LCD第2脚, Mega16:PB7(SCK) 第8脚
18:3310LCD.h ****
19:3310LCD.h **** //----------------------------------------------------------
20:3310LCD.h **** void LCD_init(void);
21:3310LCD.h ****
22:3310LCD.h **** void LCD_clear(void);
23:3310LCD.h ****
24:3310LCD.h **** void LCD_write_english_string(unsigned char X,unsigned char Y,char *s);
25:3310LCD.h ****
26:3310LCD.h **** void LCD_write_chinese_string(unsigned char X, unsigned char Y,
27:3310LCD.h **** unsigned char ch_with,unsigned char num,
28:3310LCD.h **** unsigned char line,unsigned char row);
29:3310LCD.h ****
30:3310LCD.h **** void LCD_move_chinese_string(unsigned char X, unsigned char Y, unsigned int T);
31:3310LCD.h ****
32:3310LCD.h **** void LCD_write_char(unsigned char c);
33:3310LCD.h ****
34:3310LCD.h **** void LCD_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned char *map,
35:3310LCD.h **** unsigned char Pix_x,unsigned char Pix_y);
36:3310LCD.h ****
37:3310LCD.h **** void LCD_write_byte(unsigned char data, unsigned char dc);
38:3310LCD.h **** //----------------------------------------------------------
39:3310LCD.h ****
40:3310LCD.h **** void LCD_init(void)
41:3310LCD.h **** {
42:3310LCD.h **** PORTB &= ~LCD_RST; // 产生一个让LCD复位的低电平脉冲
43:3310LCD.h **** delay_nus(10);
44:3310LCD.h **** PORTB |= LCD_RST;
45:3310LCD.h ****
46:3310LCD.h **** PORTB &= ~LCD_CE ; // 关闭LCD
47:3310LCD.h **** delay_nus(10);
48:3310LCD.h **** PORTB |= LCD_CE; // 使能LCD
49:3310LCD.h **** delay_nus(10);
50:3310LCD.h ****
51:3310LCD.h **** LCD_write_byte(0x21, 0); // 使用扩展命令设置LCD模式
52:3310LCD.h **** LCD_write_byte(0xc8, 0); // 设置偏置电压
53:3310LCD.h **** LCD_write_byte(0x06, 0); // 温度校正
54:3310LCD.h **** LCD_write_byte(0x13, 0); // 1:48
55:3310LCD.h **** LCD_write_byte(0x20, 0); // 使用基本命令
56:3310LCD.h **** LCD_clear(); // 清屏
57:3310LCD.h **** LCD_write_byte(0x0c, 0); // 设定显示模式,正常显示
58:3310LCD.h ****
59:3310LCD.h **** PORTB &= ~LCD_CE ; // 关闭LCD
60:3310LCD.h **** }
61:3310LCD.h ****
62:3310LCD.h **** /*-----------------------------------------------------------------------
63:3310LCD.h **** LCD_clear : LCD清屏函数
64:3310LCD.h ****
65:3310LCD.h **** 编写日期 :2004-8-10
66:3310LCD.h **** 最后修改日期 :2004-8-10
67:3310LCD.h **** -----------------------------------------------------------------------*/
68:3310LCD.h **** void LCD_clear(void)
69:3310LCD.h **** {
70:3310LCD.h **** unsigned int i;
71:3310LCD.h ****
72:3310LCD.h **** LCD_write_byte(0x0c, 0);
73:3310LCD.h **** LCD_write_byte(0x80, 0);
74:3310LCD.h ****
75:3310LCD.h **** for (i=0; i<504; i++)
76:3310LCD.h **** LCD_write_byte(0, 1);
77:3310LCD.h **** }
78:3310LCD.h ****
79:3310LCD.h **** /*-----------------------------------------------------------------------
80:3310LCD.h **** LCD_set_XY : 设置LCD坐标函数
81:3310LCD.h ****
82:3310LCD.h **** 输入参数:X :0-83
83:3310LCD.h **** Y :0-5
84:3310LCD.h ****
85:3310LCD.h **** 编写日期 :2004-8-10
86:3310LCD.h **** 最后修改日期 :2004-8-10
87:3310LCD.h **** -----------------------------------------------------------------------*/
88:3310LCD.h **** void LCD_set_XY(unsigned char X, unsigned char Y)
89:3310LCD.h **** {
90:3310LCD.h **** LCD_write_byte(0x40 | Y, 0); // column
91:3310LCD.h **** LCD_write_byte(0x80 | X, 0); // row
92:3310LCD.h **** }
93:3310LCD.h ****
94:3310LCD.h **** /*-----------------------------------------------------------------------
95:3310LCD.h **** LCD_write_char : 显示英文字符
96:3310LCD.h ****
97:3310LCD.h **** 输入参数:c :显示的字符;
98:3310LCD.h ****
99:3310LCD.h **** 编写日期 :2004-8-10
100:3310LCD.h **** 最后修改日期 :2004-8-10
101:3310LCD.h **** -----------------------------------------------------------------------*/
102:3310LCD.h **** void LCD_write_char(unsigned char c)
103:3310LCD.h **** {
104:3310LCD.h **** unsigned char line;
105:3310LCD.h ****
106:3310LCD.h **** c -= 32;
107:3310LCD.h ****
108:3310LCD.h **** for (line=0; line<6; line++)
109:3310LCD.h **** LCD_write_byte(font6x8[c][line], 1);
110:3310LCD.h **** }
111:3310LCD.h ****
112:3310LCD.h **** /*-----------------------------------------------------------------------
113:3310LCD.h **** LCD_write_english_String : 英文字符串显示函数
114:3310LCD.h ****
115:3310LCD.h **** 输入参数:*s :英文字符串指针;
116:3310LCD.h **** X、Y : 显示字符串的位置,x 0-83 ,y 0-5
117:3310LCD.h ****
118:3310LCD.h **** 编写日期 :2004-8-10
119:3310LCD.h **** 最后修改日期 :2004-8-10
120:3310LCD.h **** -----------------------------------------------------------------------*/
121:3310LCD.h **** void LCD_write_english_string(unsigned char X,unsigned char Y,char *s)
122:3310LCD.h **** {
123:3310LCD.h **** LCD_set_XY(X,Y);
124:3310LCD.h **** while (*s)
125:3310LCD.h **** {
126:3310LCD.h **** LCD_write_char(*s);
127:3310LCD.h **** s++;
128:3310LCD.h **** }
129:3310LCD.h **** }
130:3310LCD.h **** /*-----------------------------------------------------------------------
131:3310LCD.h **** LCD_write_chinese_string: 在LCD上显示汉字
132:3310LCD.h ****
133:3310LCD.h **** 输入参数:X、Y :显示汉字的起始X、Y坐标;
134:3310LCD.h **** ch_with :汉字点阵的宽度
135:3310LCD.h **** num :显示汉字的个数;
136:3310LCD.h **** line :汉字点阵数组中的起始行数
137:3310LCD.h **** row :汉字显示的行间距
138:3310LCD.h **** 编写日期 :2004-8-11
139:3310LCD.h **** 最后修改日期 :2004-8-12
140:3310LCD.h **** 测试:
141:3310LCD.h **** LCD_write_chi(0,0,12,7,0,0);
142:3310LCD.h **** LCD_write_chi(0,2,12,7,0,0);
143:3310LCD.h **** LCD_write_chi(0,4,12,7,0,0);
144:3310LCD.h **** -----------------------------------------------------------------------*/
145:3310LCD.h **** void LCD_write_chinese_string(unsigned char X, unsigned char Y,
146:3310LCD.h **** unsigned char ch_with,unsigned char num,
147:3310LCD.h **** unsigned char line,unsigned char row)
148:3310LCD.h **** {
149:3310LCD.h **** unsigned char i,n;
150:3310LCD.h ****
151:3310LCD.h **** LCD_set_XY(X,Y); //设置初始位置
152:3310LCD.h ****
153:3310LCD.h **** for (i=0;i<num;)
154:3310LCD.h **** {
155:3310LCD.h **** for (n=0; n<ch_with*2; n++) //写一个汉字
156:3310LCD.h **** {
157:3310LCD.h **** if (n==ch_with) //写汉字的下半部分
158:3310LCD.h **** {
159:3310LCD.h **** if (i==0) LCD_set_XY(X,Y+1);
160:3310LCD.h **** else
161:3310LCD.h **** LCD_set_XY((X+(ch_with+row)*i),Y+1);
162:3310LCD.h **** }
163:3310LCD.h **** LCD_write_byte(write_chinese_string[line+i][n],1);
164:3310LCD.h **** }
165:3310LCD.h **** i++;
166:3310LCD.h **** LCD_set_XY((X+(ch_with+row)*i),Y);
167:3310LCD.h **** }
168:3310LCD.h **** }
169:3310LCD.h ****
170:3310LCD.h ****
171:3310LCD.h **** /*-----------------------------------------------------------------------
172:3310LCD.h **** LCD_move_chinese_string: 汉字移动
173:3310LCD.h ****
174:3310LCD.h **** 输入参数:X、Y :显示汉字的起始X、Y坐标;
175:3310LCD.h **** T :移动速度;
176:3310LCD.h ****
177:3310LCD.h **** 编写日期 :2004-8-13
178:3310LCD.h **** 最后修改日期 :2004-8-13
179:3310LCD.h **** -----------------------------------------------------------------------*/
180:3310LCD.h **** void LCD_move_chinese_string (unsigned char X, unsigned char Y, unsigned int T)
181:3310LCD.h **** {
182:3310LCD.h **** unsigned char i,n,j=0;
183:3310LCD.h **** unsigned char buffer_h[84]={0};
184:3310LCD.h **** unsigned char buffer_l[84]={0};
185:3310LCD.h ****
186:3310LCD.h **** //for (i=0; i<156; i++)
187:3310LCD.h **** for (i=0; i<84; i++)
188:3310LCD.h **** {
189:3310LCD.h **** /*--------- 按行扫描------*/
190:3310LCD.h **** buffer_h[83] = move_chinese_string[i/12][j];
191:3310LCD.h **** buffer_l[83] = move_chinese_string[i/12][j+12];
192:3310LCD.h **** j++;
193:3310LCD.h **** if (j==12) j=0;
194:3310LCD.h ****
195:3310LCD.h **** for (n=0; n<83; n++)
196:3310LCD.h **** {
197:3310LCD.h **** buffer_h[n]=buffer_h[n+1];
198:3310LCD.h **** buffer_l[n]=buffer_l[n+1];
199:3310LCD.h **** }
200:3310LCD.h ****
201:3310LCD.h **** LCD_set_XY(X,Y);
202:3310LCD.h **** for (n=0; n<83; n++)
203:3310LCD.h **** {
204:3310LCD.h **** LCD_write_byte(buffer_h[n],1);
205:3310LCD.h **** }
206:3310LCD.h ****
207:3310LCD.h **** LCD_set_XY(X,Y+1);
208:3310LCD.h **** for (n=0; n<83; n++)
209:3310LCD.h **** {
210:3310LCD.h **** LCD_write_byte(buffer_l[n],1);
211:3310LCD.h **** }
212:3310LCD.h ****
213:3310LCD.h **** //delay_nms(T);
214:3310LCD.h **** //delay_nms(T);
215:3310LCD.h **** delay_s(T);
216:3310LCD.h **** }
217:3310LCD.h **** }
218:3310LCD.h ****
219:3310LCD.h **** /*-----------------------------------------------------------------------
220:3310LCD.h **** LCD_draw_map : 位图绘制函数
221:3310LCD.h ****
222:3310LCD.h **** 输入参数:X、Y :位图绘制的起始X、Y坐标;
223:3310LCD.h **** *map :位图点阵数据;
224:3310LCD.h **** Pix_x :位图像素(长)
225:3310LCD.h **** Pix_y :位图像素(宽)
226:3310LCD.h ****
227:3310LCD.h **** 编写日期 :2004-8-13
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -