?? lcd12864.lst
字號:
228 1 }
229
230
231
232 SendCommandToLCD(unsigned char command) //寫命令到LCD中
233 {
234 1 CheckState();
235 1 RS=0; //向LCD發送命令
236 1 RW=0;
237 1 Dataport=command; //command :命令
238 1 EN=1;
239 1 EN=0;
240 1 }
241
C51 COMPILER V8.02 LCD12864 01/26/2007 11:51:04 PAGE 5
242
243 void SetLine(unsigned char page) //設置頁 0xb8是頁的首地址
244 {
245 1 page=0xb8|page; //1011 1xxx 0<=page<=7 設定頁地址--X 0-7,8行為一頁64/8=8,共8頁
246 1 SendCommandToLCD(page);
247 1 }
248
249
250 void SetStartLine(unsigned char startline) //設定顯示開始行,0xc0是行的首地址
251 {
252 1 startline=0xc0|startline; //1100 0000
253 1 SendCommandToLCD(startline); //設置從哪行開始:0--63,一般從0 行開始顯示
254 1 }
255
256
257 void SetColumn(unsigned char column) //設定列地址--Y 0-63 ,0x40是列的首地址
258 {
259 1 column=column &0x3f; //column最大值為64,越出 0=<column<=63
260 1 column= 0x40|column; //01xx xxxx
261 1 SendCommandToLCD(column);
262 1 }
263
264
265 void SetOnOff(unsigned char onoff) //開關顯示,0x3f是開顯示,0x3e是關顯示
266 {
267 1 onoff=0x3e|onoff; //0011 111x,onoff只能為0或者1
268 1 SendCommandToLCD(onoff);
269 1 }
270
271
272 void WriteByte(unsigned char dat) //寫顯示數據
273 {
274 1 CheckState();
275 1 RS=1;
276 1 RW=0;
277 1 Dataport=dat;//dat:顯示數據
278 1 EN=1;
279 1 EN=0;
280 1 }
281
282
283
284
285 void SelectScreen(unsigned char screen) //選擇屏幕screen: 0-全屏,1-左屏,2-右屏
286 {
287 1 switch(screen)
288 1 { case 0: cs1=0;//全屏
289 2 _nop_(); _nop_(); _nop_();
290 2 cs2=0;
291 2 _nop_(); _nop_(); _nop_();
292 2 break;
293 2 case 1: cs1=0;//左屏
294 2 _nop_(); _nop_(); _nop_();
295 2 cs2=1;
296 2 _nop_(); _nop_(); _nop_();
297 2 break;
298 2 case 2: cs1=1;//右屏
299 2 _nop_(); _nop_(); _nop_();
300 2 cs2=0;
301 2 _nop_(); _nop_(); _nop_();
302 2 break;
303 2 }
C51 COMPILER V8.02 LCD12864 01/26/2007 11:51:04 PAGE 6
304 1 }
305
306
307 void ClearScreen(unsigned char screen) //清屏screen: 0-全屏,1-左屏,2-右
308 {
309 1 unsigned char i,j;
310 1 SelectScreen(screen);
311 1
312 1 for(i=0;i<8;i++) //控制頁數0-7,共8頁
313 1 {
314 2 SetLine(i);
315 2 SetColumn(0);
316 2 for(j=0;j<64;j++) //控制列數0-63,共64列
317 2 {
318 3 WriteByte(0x00); //寫點內容,列地址自動加1
319 3 }
320 2 }
321 1
322 1 }
323
324 void delay(uint nms) //延時程序
325 {
326 1 uint i;
327 1 for(; nms > 0; nms--)
328 1 for(i = 0; i < 500; i++);
329 1 }
330
331 void lcd_rol() //向上滾屏
332 {
333 1 uint i;
334 1 for(i = 0; i < 64; i++)
335 1 {
336 2 cs1=0; // 片選1
337 2 SendCommandToLCD(0xc0+i);
338 2 cs1=1;
339 2
340 2 cs2=0;// 片選2
341 2 SendCommandToLCD(0xc0+62-i);
342 2 cs2=0; // 片選2
343 2
344 2 delay(6);
345 2 }
346 1 }
347 void InitLCD() //初始化LCD
348 {
349 1
350 1 CheckState();
351 1
352 1 SelectScreen(0);
353 1 SetOnOff(0); //關顯示
354 1
355 1 SelectScreen(0);
356 1 SetOnOff(1); //開顯示
357 1
358 1 SelectScreen(0);
359 1 ClearScreen(0);//清屏
360 1
361 1 SetStartLine(0); //開始行:0
362 1
363 1 }
364
365
C51 COMPILER V8.02 LCD12864 01/26/2007 11:51:04 PAGE 7
366 //顯示全角漢字
367 void Display(unsigned char ss,unsigned char page,unsigned char column,unsigned char number)
368 {
369 1 int i; //選屏參數,pagr選頁參數,column選列參數,number選第幾漢字輸出
370 1
371 1 SelectScreen(ss);
372 1 column=column&0x3f;
373 1
374 1 SetLine(page); //寫上半頁
375 1 SetColumn(column); //控制列
376 1 for(i=0;i<16;i++) //控制16列的數據輸出
377 1 {
378 2 WriteByte(Hzk[i+32*number]); //i+32*number漢字的前16個數據輸出
379 2
380 2 }
381 1
382 1 SetLine(page+1); //寫下半頁
383 1 SetColumn(column); //控制列
384 1 for(i=0;i<16;i++) //控制16列的數據輸出
385 1 {
386 2 WriteByte(Hzk[i+32*number+16]); //i+32*number+16漢字的后16個數據輸出
387 2 }
388 1
389 1 }
390
391
392 //顯示半角漢字和數字和字母
393 void Displayen(unsigned char ss,unsigned char page,unsigned char column,unsigned char number)
394 {
395 1 int i; //選屏參數,pagr選頁參數,column選列參數,number選第幾漢字輸出
396 1
397 1 SelectScreen(ss);
398 1 column=column&0x3f;
399 1
400 1 SetLine(page); //寫上半頁
401 1 SetColumn(column);
402 1 for(i=0;i<8;i++)
403 1 {
404 2 WriteByte(Ezk[i+16*number]);
405 2 }
406 1
407 1 SetLine(page+1); //寫下半頁
408 1 SetColumn(column);
409 1 for(i=0;i<8;i++)
410 1 {
411 2 WriteByte(Ezk[i+16*number+8]);
412 2 }
413 1 }
414
415 void main()
416 { int i;
417 1 InitLCD();
418 1
419 1 ClearScreen(0);//清屏
420 1
421 1 SetStartLine(0);
422 1
423 1 for(i=0;i<4;i++)
424 1 {
425 2 Display(2,0,i*16,i);
426 2 Display(1,0,i*16,i+4);
427 2
C51 COMPILER V8.02 LCD12864 01/26/2007 11:51:04 PAGE 8
428 2 Display(2,0+2,i*16,i+8);
429 2 Display(1,0+2,i*16,i+12);
430 2
431 2 Display(2,0+2+2,i*16,i+16);
432 2 Display(1,0+2+2,i*16,i+20);
433 2 }
434 1
435 1 for(i=0;i<8;i++)
436 1 {
437 2 Displayen(2,0+2+2+2,i*8,i);
438 2 Displayen(1,0+2+2+2,i*8,i+8);
439 2 }
440 1
441 1 while(1)
442 1 {
443 2 lcd_rol();
444 2 delay(1000);
445 2 }
446 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 669 ----
CONSTANT SIZE = 1024 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 10
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 + -