📄 lcd12864应用.lst
字号:
164 1 unsigned char j,k;
165 1 Mcs=0;Scs=0;delay(10); //屏幕分成左右两部分,分别由Mcs和Scs控制,列值都是从0-63
166 1 write_com(Page_Add+0);//有疑问 ???解答:因为Protues仿真模型的CS1和CS2都是低电平有效
167 1 write_com(Col_Add+0);
168 1 for(k=0;k<8;k++)
169 1 {
170 2 write_com(Page_Add+k);
171 2 for(j=0;j<64;j++)
172 2 {
173 3 write_com(Col_Add+j);
174 3 write_data(0x00);
175 3 }
176 2 }
177 1 }
178
179 void Disp_Img(unsigned char code *img) //显示图片
C51 COMPILER V8.05a LCD12864应用 07/02/2009 21:25:19 PAGE 4
180 {
181 1 unsigned char j,k;
182 1 for(k=0;k<8;k++) //分成8页进行显示,每页有8行
183 1 {
184 2 Mcs=1;Scs=0;delay(10); //先进行左半屏显示
185 2 write_com(Page_Add+k);
186 2 write_com(Col_Add+0);
187 2 for(j=0;j<64;j++)
188 2 write_data(img[k*128+j]);//按列扫描显示,一个字节就是一列,因为每页有8行
189 2 Mcs=0;Scs=1; delay(10); //再进行右半屏显示
190 2 write_com(Page_Add+k);
191 2 write_com(Col_Add+0);
192 2 for(j=64;j<128;j++)
193 2 write_data(img[k*128+j]);//按列扫描显示,一个字节就是一列,因为每页有8行
194 2 }
195 1 }
196
197 void Disp_H_Line() //显示水平线
198 {
199 1 unsigned char i,j;
200 1 Mcs=0;Scs=0;delay(10); //有疑问 ???解答:因为Protues仿真模型的CS1和CS2都是低电平有效
201 1 write_com(Disp_On);
202 1 write_com(Page_Add);
203 1 write_com(Start_Line);
204 1 write_com(Col_Add);
205 1 for(j=0;j<8;j++)
206 1 {
207 2 write_com(Page_Add+j);
208 2 write_com(Col_Add+0);
209 2 // write_com(Start_Line+0);
210 2 for(i=0;i<64;i++)
211 2 write_data(0x55);
212 2 }
213 1 }
214
215 void Disp_V_Line() //显示垂直线
216 {
217 1 unsigned char i,j;
218 1 Mcs=0;Scs=0;delay(10);//有疑问 ???解答:因为Protues仿真模型的CS1和CS2都是低电平有效
219 1 write_com(Disp_On);
220 1 write_com(Page_Add);
221 1 write_com(Start_Line);
222 1 write_com(Col_Add);
223 1 for(j=0;j<8;j++)
224 1 {
225 2 write_com(Page_Add+j);
226 2 write_com(Col_Add+0);
227 2 write_com(Start_Line+0);
228 2 for(i=0;i<32;i++)
229 2 {
230 3 write_data(0x00);
231 3 write_data(0xff);
232 3 }
233 2 }
234 1 }
235
236 /*写16*16中文字符,分两行显示,先扫描16列,再扫描行*/
237 void hz_disp16(unsigned char pag,unsigned char col, unsigned char code *hzk)
238 {
239 1 unsigned char j=0,i=0;
240 1 //Mcs=1;Scs=1;delay(10);
241 1 for(j=0;j<2;j++)
C51 COMPILER V8.05a LCD12864应用 07/02/2009 21:25:19 PAGE 5
242 1 {
243 2 write_com(Page_Add+pag+j);
244 2 write_com(Col_Add+col);
245 2 for(i=0;i<16;i++)
246 2 write_data(hzk[16*j+i]);
247 2 }
248 1 }
249
250 void init_lcd() //初始化LCD12864
251 {
252 1 Lcd_Rst=0;
253 1 delay(100);
254 1 Lcd_Rst=1;
255 1 delay(100);
256 1 Mcs=1;
257 1 Scs=1;
258 1 delay(100);
259 1 write_com(Disp_Off);
260 1 write_com(Page_Add+0);
261 1 write_com(Start_Line+0);
262 1 write_com(Col_Add+0);
263 1 write_com(Disp_On);
264 1 }
265
266 void Msg(int flg) //显示相应的信息
267 {
268 1 Clr_Scr();
269 1 frame();
270 1 if(flg==0) //显示"测试开始"
271 1 {
272 2 Mcs=1;Scs=0;
273 2 hz_disp16(3,32,ce);
274 2 delay(2000);
275 2 hz_disp16(3,48,shi);
276 2 delay(2000);
277 2 Mcs=0;Scs=1;
278 2 hz_disp16(3,0,kai);
279 2 delay(2000);
280 2 hz_disp16(3,16,shi3);
281 2 delay(2000);
282 2 }
283 1 else if(flg==1) //显示"测试完毕"
284 1 {
285 2 Mcs=1;Scs=0;
286 2 hz_disp16(3,32,ce);
287 2 hz_disp16(3,48,shi);
288 2 Mcs=0;Scs=1;
289 2 hz_disp16(3,0,wan);
290 2 hz_disp16(3,16,bi);
291 2 }
292 1 }
293
294 main()
295 {
296 1 unsigned char i=0;
297 1 while(1)
298 1 {
299 2 init_lcd();
300 2 //Clr_Scr();
301 2 Disp_Img(FirstPage);
302 2 delay(30000);
303 2 Clr_Scr();
C51 COMPILER V8.05a LCD12864应用 07/02/2009 21:25:19 PAGE 6
304 2 //delay(30000);
305 2 Msg(0);
306 2 delay(10000);
307 2 Clr_Scr();
308 2 Disp_H_Line();
309 2 delay(10000);
310 2 Clr_Scr();
311 2 Disp_V_Line();
312 2 delay(10000);
313 2 Clr_Scr();
314 2 Msg(1);
315 2 delay(10000);
316 2 Clr_Scr();
317 2 }
318 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 717 ----
CONSTANT SIZE = 1216 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 14
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -