📄 12864.lst
字号:
281 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
282 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
283 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
284 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
285 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
286 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
287 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
288 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
289 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
290 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
291 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
292 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
293 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
294 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
295 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
296 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
297 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
298 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
299 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
300 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
301 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
302 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
303 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
C51 COMPILER V8.02 12864 11/18/2008 19:24:31 PAGE 6
304 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
305 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
306 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
307 };
308
309 /*软件延时 Delay()*/
310 void Delay(unsigned int count)
311 {
312 1 unsigned char i;
313 1 while(--count != 0)
314 1 {
315 2 for(i = 0; i < 125; i++); // ";" 表示空语句,CPU空转。
316 2 } // i 从0加到125,在12M晶体下CPU大概耗时1毫秒
317 1 }
318
319 /*LCM12864测忙函数 LCM12864_TestBusy()*/
320 void LCM12864_TestBusy(void)
321 {
322 1 LCM12864_RW = 1;
323 1 LCM12864_RS = 0;
324 1 LCM12864_E = 0;
325 1 LCM12864_E = 1;
326 1 while(LCM12864_DB7_DB0 & LCM12864_STATUS_BUSY);
327 1 }
328
329 /*写指令到LCM12864 LCM12864_WriteCMD()*/
330 void LCM12864_WriteCMD(unsigned char LCM12864_command)
331 { //LCM12864_command 欲写入指令
332 1 LCM12864_TestBusy();
333 1 LCM12864_RW = 0; LCM12864_RS = 0;
334 1 LCM12864_DB7_DB0 = LCM12864_command;
335 1 LCM12864_E = 0;
336 1 LCM12864_E = 1;
337 1 LCM12864_TestBusy();
338 1 }
339
340 /*写数据到LCM12864 LCM12864_WriteData()*/
341 void LCM12864_WriteData(unsigned char LCM12864_data)
342 { //LCM12864_command 欲写入数据
343 1 LCM12864_RW = 0; LCM12864_RS = 1;
344 1 LCM12864_DB7_DB0 = LCM12864_data;
345 1 LCM12864_E = 0;
346 1 LCM12864_E = 1;
347 1 LCM12864_TestBusy(); //读LCM忙
348 1 }
349
350 /*向LCM12864填充数据 LCM12864_Fill_Screen()*/
351 void LCM12864_Fill_Screen( unsigned char t, //设置涮屏速度(为1不涮屏,默认为60)
352 unsigned char LCM12864_FillData)//欲写入的数据
353 {
354 1 unsigned char x,y;
355 1 LCM12864_CS1 = 0;LCM12864_CS2 = 0; // 选中左半屏及右半屏
356 1 LCM12864_WriteCMD(LCM12864_START_ROW+0); // 设置显示起始行为0
357 1 for(x=0;x<8;x++)
358 1 {
359 2 Delay(t); // 涮屏速度延时
360 2 LCM12864_WriteCMD(LCM12864_PAGE_START_ADDR+x); // 设置页地址
361 2 // // 设置列地址
362 2 for(y=0;y<64;y++)
363 2 {
364 3 LCM12864_WriteCMD(LCM12864_COL_START_ADDR+y);
365 3 LCM12864_WriteData(LCM12864_FillData);
C51 COMPILER V8.02 12864 11/18/2008 19:24:31 PAGE 7
366 3 }
367 2 }
368 1 LCM12864_CS1 = 1; // 不选中右半屏
369 1 LCM12864_CS2 = 1; // 不选中右半屏
370 1 }
371
372 /*LCM12864清屏 LCM12864_Clear_Screen()*/
373 void LCM12864_Clear_Screen(void)
374 {
375 1 LCM12864_Fill_Screen(60,0x00); //写入0到每个显示区
376 1 }
377
378 /*显示128*64图片 LCM12864_Disp_Bitmap_12864()*/
379 void LCM12864_Disp_Bitmap_12864( unsigned char t, //设置涮屏速度(为1不涮屏,默认为60)
380 unsigned char code *bitmap_12864)//128*64点阵图像所在数组表
381 {
382 1 unsigned char j,k;
383 1 for(k=0;k<8;k++)
384 1 { //设置8页的显示
385 2 Delay(t);
386 2 LCM12864_CS1 = 0;LCM12864_CS2 = 1; //半屏选中
387 2 LCM12864_WriteCMD(LCM12864_PAGE_START_ADDR+k); //选中页
388 2 //选中列
389 2 for(j=0;j<64;j++)
390 2 {
391 3 LCM12864_WriteCMD(LCM12864_COL_START_ADDR+j);
392 3 LCM12864_WriteData(bitmap_12864[k*128+j]); //开始写入数据
393 3 }
394 2 LCM12864_CS1 = 1;LCM12864_CS2 = 0;
395 2 LCM12864_WriteCMD(LCM12864_PAGE_START_ADDR+k);
396 2 for(j=64;j<128;j++)
397 2 {
398 3 LCM12864_WriteCMD(LCM12864_COL_START_ADDR+j-64);
399 3 LCM12864_WriteData(bitmap_12864[k*128+j]);
400 3 }
401 2 }
402 1 }
403
404 /*在LCM12864的指定点显示16*16点阵汉字 LCM12864_Disp_Chinese_16_16()*/
405 void LCM12864_Disp_Char_x_16(
406 unsigned char t, //设置书写速度(为1直接显示,默认为12)
407 unsigned char b, //输入8:8*16字符,16:16*16字符
408 unsigned char LCM12864_page, //LCM12864的页地址(0~7)
409 unsigned char LCM12864_col, //LCM12864的列地址(0~128)注意:右半屏起始是64
410 unsigned char *Char_x_16) //16*16点阵汉字字模(纵向取模,字节倒序)
411 {
412 1 unsigned char j=0,i=0;
413 1 if(LCM12864_col < 64 )
414 1 {
415 2 LCM12864_CS1 = 0; LCM12864_CS2 = 1; //判断屏幕使能
416 2 }
417 1 else
418 1 {
419 2 LCM12864_CS1 = 1; LCM12864_CS2 = 0;
420 2 LCM12864_col = LCM12864_col - 64;
421 2 }
422 1 for(j=0;j<2;j++)
423 1 {
424 2 LCM12864_WriteCMD(LCM12864_PAGE_START_ADDR+LCM12864_page+j);
425 2 for(i=0;i<b;i++)
426 2 {
427 3 LCM12864_WriteCMD(LCM12864_COL_START_ADDR+LCM12864_col+i);
C51 COMPILER V8.02 12864 11/18/2008 19:24:31 PAGE 8
428 3 LCM12864_WriteData(Char_x_16[b*j+i]);
429 3 Delay(t);
430 3 }
431 2 }
432 1 }
433
434 /*用一个一维数组time[]来存储时间,时间格式00:00:00*/
435 /*void disbuftime(void)
436 {
437 time[7]=second%10;
438 time[6]=second/10;
439 time[5]=10;
440 time[4]=minute%10;
441 time[3]=minute/10;
442 time[2]=10;
443 time[1]=hour%10;
444 time[0]=hour/10;
445 }*/
446
447 /*写时间*/
448 /*void distime(unsigned char timecode)
449 {
450 unsigned char j=0,i=0;
451 LCM12864_CS1 = 0; LCM12864_CS2 = 1; //左屏
452 disbuftime();
453 for(j=6;j<8;j++)//页
454 {
455 LCM12864_WriteCMD(LCM12864_PAGE_START_ADDR+j);
456 for(i=0;i<8;i++)
457 {
458 LCM12864_WriteCMD(LCM12864_COL_START_ADDR+i);
459 LCM12864_WriteData(timecode[time[i]][16]);
460 }
461 }
462 } */
463
464 /*LCM12864初始化 LCM12864_Init()*/
465 void LCM12864_Init(void)
466 {
467 1 LCM12864_RESET = 0; //复位
468 1 Delay(300);
469 1 LCM12864_RESET = 1;
470 1 Delay(300);
471 1 LCM12864_Clear_Screen(); //清除屏幕
472 1 LCM12864_CS1 = 0; LCM12864_CS2 = 0; //选中双屏
473 1 LCM12864_WriteCMD(LCM12864_DISP_OFF); //关显示
474 1 LCM12864_WriteCMD(LCM12864_PAGE_START_ADDR+0); //第0页位置
475 1 LCM12864_WriteCMD(LCM12864_START_ROW+0); //第0行
476 1 LCM12864_WriteCMD(LCM12864_COL_START_ADDR+0); //第0列
477 1 LCM12864_WriteCMD(LCM12864_DISP_ON); //开显示
478 1 /* TMOD = 0x01; // 定时器0,, 16位定时方式
479 1 TH0=(65536-50000)/256;
480 1 TL0=(65536-50000)%256;
481 1 hour=00;
482 1 minute=00;
483 1 second=00;
484 1 EA=1;
485 1 ET0=1;
486 1 TR0=1; */
487 1 }
488 /* 以上是 LCM12864液晶模块驱动程序*/
489
C51 COMPILER V8.02 12864 11/18/2008 19:24:31 PAGE 9
490 /*LCM12864液晶模块驱动演示 main()*/
491 void main (void)
492 {
493 1 unsigned char /*lx = 32,*/i;
494 1 LCM12864_Init(); // LCM12864初始化
495 1 while(1)
496 1 {
497 2
498 2 LCM12864_Disp_Bitmap_12864(60,tuxin); //显示图像
499 2 Delay(3000); //延时3秒
500 2 LCM12864_Clear_Screen(); //清除屏幕
501 2 LCM12864_Disp_Char_x_16(12,16,0,5,chuang);
502 2 Delay(500);
503 2 LCM12864_Disp_Char_x_16(12,16,0,25,xin);
504 2 Delay(500);
505 2 LCM12864_Disp_Char_x_16(12,16,0,45,shi);
506 2 Delay(500);
507 2 LCM12864_Disp_Char_x_16(12,16,0,65,ya);
508 2 Delay(500);
509 2 LCM12864_Disp_Char_x_16(12,16,0,85,si);
510 2 Delay(500);
511 2 for(i=0;i<3;i++)
512 2 { //显示字符串“Dy1286
513 3 LCM12864_Disp_Char_x_16(1,16,2,32+16*i,nAsciiDot+32*i); //显示"12864",从第二行32列开始
514 3 // Delay(1000);
515 3 }
516 2 for(i=0;i<15;i++)
517 2 {
518 3 LCM12864_Disp_Char_x_16(12,8,4,8*i,Tel+16*i);
519 3 Delay(100);
520 3 }
521 2 // LCM12864_Disp_Char_x_8(6,0,timecode[time[i]][16]);
522 2 //Delay(1000);
523 2 }
524 1 }
525 /*定时器中断0的方式1来处理时钟显示*/
526 /*void timer0() interrupt 1
527 {
528 TH0=(65536-50000)/256;
529 TL0=(65536-50000)%256;
530 count++;
531 if(count==18)//每进入一次为1秒
532 {
533 count=0;
534 second++;
535 if(second==60)
536 {
537 second=0;
538 minute++;
539 if(minute==60)
540 {
541 minute=0;
542 hour++;
543 if(hour==24)
544 {
545 hour=0;
546 }
547 }
548 }
549 }
550 } */
551
C51 COMPILER V8.02 12864 11/18/2008 19:24:31 PAGE 10
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 620 ----
CONSTANT SIZE = 1696 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 12 12
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 + -