📄 8.3.lst
字号:
302 2 x++;
303 2 col++;
C51 COMPILER V7.09 8_3 08/23/2005 22:56:19 PAGE 6
304 2 if (col==LCMLIMIT){ col=0;row++;row++;} /*下一列,如果列越界换行*/
305 2 if (row>6) row=0; /*如果行越界,返回首行 */
306 2 } /*上半个字符输出结束 */
307 1
308 1 /*下半个字符输出,16列 */
309 1 col = bakerx;
310 1 row = bakery+1;
311 1 for(i=0;i<16;i++) /*下半部分*/
312 1 {
313 2 Wrdata(Hzk[x]);
314 2 x++;
315 2 col++;
316 2 if (col==LCMLIMIT){col=0;row++;row++;} /*下一列,如果列越界换行*/
317 2 if (row>7) row=1; /*如果行越界,返回首行 */
318 2 } /*下半个字符输出结束 */
319 1 row = bakery;
320 1 } /*整个字符输出结束 */
321
322 /****************************************/
323 /* 清屏,全屏幕清零 */
324 /****************************************/
325 void Lcmcls( void )
326 {
327 1 for(row=0;row<8;row++)
328 1 for(col=0;col<LCMLIMIT;col++) Wrdata(0);
329 1 }
330
331 /****************************************/
332 /* 从液晶片上读数据,保留在全局变量中 */
333 /****************************************/
334
335 void Rddata(void)
336 {
337 1 Locatexy(); /*坐标定位,返回时保留分区状态不变 */
338 1 Datalcm=0xFF;
339 1 Dilcm = 1; /*数据*/
340 1 Rwlcm = 1; /*读数据*/
341 1 Elcm = 1; /*读入到LCM*/
342 1 _nop_();
343 1 cbyte = Datalcm; /*虚读一次 */
344 1 Elcm = 0;
345 1 Locatexy(); /*坐标定位,返回时保留分区状态不变 */
346 1 Datalcm=0xFF;
347 1 _nop_();
348 1 Dilcm = 1; /*数据*/
349 1 Rwlcm = 1; /*读数据*/
350 1 Elcm = 1; /*读入到LCM*/
351 1 _nop_();
352 1 cbyte = Datalcm; /*从数据口读数据,真读 */
353 1 Elcm = 0;
354 1 }
355
356 /****************************************/
357 /* 数据写输出 */
358 /****************************************/
359
360 void Wrdata(Uchar X)
361 {
362 1 Locatexy(); /*坐标定位,返回时保留分区状态不变 */
363 1 // wtcom();
364 1 Dilcm = 1; /*数据输出*/
365 1 Rwlcm = 0; /*写输出 */
C51 COMPILER V7.09 8_3 08/23/2005 22:56:19 PAGE 7
366 1 Datalcm = X; /*数据输出到数据口 */
367 1 Elcm = 1; /*读入到LCM*/
368 1 _nop_();
369 1 Elcm = 0;
370 1 }
371
372 /****************************************/
373 /* 命令输出,每次输出一个分区控制口 */
374 /****************************************/
375
376 /*void Wrcmd(Uchar X)
377 // {
378 // Locatexy(); /*确定分区,返回时保留分区状态不变 */
379 // wtcom(); /*等待LCM操作允许 */
380 // Dilcm = 0; /*数据操作 */
381 // Rwlcm = 0; /*写输出 */
382 // Datalcm = X; /*数据输出到数据口 */
383 // Elcm = 1;_nop_();Elcm = 0; /*读入到LCM*/
384 // }
385
386 /********************************/
387 /* 命令输出到左区控制口 */
388 /********************************/
389
390 void WrcmdL(Uchar X)
391 {
392 1 lcdbusyL(); /*确定分区,返回时保留分区状态不变*/
393 1 Dilcm = 0; /*命令操作 */
394 1 Rwlcm = 0; /*写输出 */
395 1 Datalcm = X; /*数据输出到数据口 */
396 1 Elcm = 1;_nop_();Elcm = 0; /*读入到LCM*/
397 1 }
398
399 /********************************/
400 /* 命令输出到中区控制口 */
401 /********************************/
402
403 void WrcmdM(Uchar X)
404 {
405 1 lcdbusyM(); /*确定分区,返回时保留分区状态不变*/
406 1 Dilcm = 0; /*命令操作 */
407 1 Rwlcm = 0; /*写输出 */
408 1 Datalcm = X; /*命令输出到数据口 */
409 1 Elcm = 1;_nop_();Elcm = 0; /*读入到LCM*/
410 1 }
411
412 /********************************/
413 /* 命令输出到右区控制口 */
414 /********************************/
415
416 void WrcmdR(Uchar X)
417 {
418 1 lcdbusyR(); /*确定分区,返回时保留分区状态不变 */
419 1 Dilcm = 0; /*命令操作 */
420 1 Rwlcm = 0; /*写输出 */
421 1 Datalcm = X; /*命令输出到数据口 */
422 1 Elcm = 1;_nop_();Elcm = 0; /*读入到LCM*/
423 1 }
424
425 /********************************************************/
426 /* 分区操作允许等待,返回时保留分区选择状态 */
427 /********************************************************/
C51 COMPILER V7.09 8_3 08/23/2005 22:56:19 PAGE 8
428 void lcdbusyL(void)
429 {
430 1 CS1LCM = 0; /*CLR CS1 */
431 1 CS2LCM = 1; /*SETB CS2 */
432 1 CS3LCM = 1; /*SETB CS3 */
433 1 wtcom(); /* waitting for enable */
434 1 }
435
436 void lcdbusyM(void)
437 {
438 1 CS1LCM = 1; /*SETB CS1 */
439 1 CS2LCM = 0; /*CLR CS2 */
440 1 CS3LCM = 1; /*SETB CS3 */
441 1 wtcom(); /* waitting for enable */
442 1 }
443
444 void lcdbusyR(void)
445 {
446 1 CS1LCM = 1; /*SETB CS1 */
447 1 CS2LCM = 1; /*SETB CS2 */
448 1 CS3LCM = 0; /*CLR CS3 */
449 1 wtcom(); /* waitting for enable */
450 1 }
451
452 void wtcom(void)
453 {
454 1 Dilcm = 0; /*CLR DI */
455 1 Rwlcm = 1; /*SETB RW */
456 1 Datalcm = 0xFF; /*MOV DATA_LCM,#0FFH */
457 1 Elcm = 1;_nop_();
458 1 while(Datalcm & Lcdbusy);
459 1 Elcm = 0;
460 1 }
461
462 /********************************************************/
463 /*根据设定的坐标数据,定位LCM上的下一个操作单元位置 */
464 /********************************************************/
465 void Locatexy(void)
466 {
467 1 unsigned char x,y;
468 1 switch (col&0xc0) /* col.and.0xC0 */
469 1 { /*条件分支执行 */
470 2 case 0: {lcdbusyL();break;} /*左区 */
471 2 case 0x40: {lcdbusyM();break;} /*中区 */
472 2 case 0x80: {lcdbusyR();break;} /*右区 */
473 2 }
474 1 x = col&0x3F|SETX; /* col.and.0x3f.or.setx */
475 1 y = row&0x07|SETY; /* row.and.0x07.or.sety */
476 1 wtcom(); /* waitting for enable */
477 1 Dilcm = 0; /*CLR DI */
478 1 Rwlcm = 0; /*CLR RW */
479 1 Datalcm = y; /*MOV P0,Y */
480 1 Elcm = 1;_nop_();Elcm = 0;
481 1 wtcom(); /* waitting for enable */
482 1 Dilcm = 0; /*CLR DI */
483 1 Rwlcm = 0; /*CLR RW */
484 1 Datalcm = x; /*MOV P0,X */
485 1 Elcm = 1;_nop_();Elcm = 0;
486 1 }
487
488 /********************************/
489 /*液晶屏初始化 */
C51 COMPILER V7.09 8_3 08/23/2005 22:56:19 PAGE 9
490 /********************************/
491
492 void Lcminit(void)
493 {
494 1 cbyte = DISPOFF; /*关闭显示屏 */
495 1 WrcmdL(cbyte);
496 1 WrcmdM(cbyte);
497 1 WrcmdR(cbyte);
498 1 cbyte = DISPON; /*打开显示屏 */
499 1 WrcmdL(cbyte);
500 1 WrcmdM(cbyte);
501 1 WrcmdR(cbyte);
502 1 cbyte = DISPFIRST; /*定义显示起始行为零 */
503 1 WrcmdL(cbyte);
504 1 WrcmdM(cbyte);
505 1 WrcmdR(cbyte);
506 1 Lcmcls();
507 1 col=0; /*清屏 */
508 1 row=0;
509 1 Locatexy();
510 1 }
511 /********************************/
512 /* 延时 */
513 /********************************/
514 void Delay(Uchar MS)
515 {
516 1 Uchar us,usn;
517 1 while(MS!=0)
518 1 { usn = 4;
519 2 while(usn!=0)
520 2 {
521 3 us=0xf0;
522 3 while (us!=0){us--;};
523 3 usn--;
524 3 }
525 2 MS--;
526 2 }
527 1 }
528
529 /********************************/
530 //定义字符串数组 */
531 /********************************/
532
533 Uchar code STR1[]=
534 {
535 0x80,0x81,0x82,0x83,0x84,0x85,
536 0x86,0x87,0x88,0x89,0x8a,0x8B
537 };
538
539 Uchar code STR2[]="Our friend over the wold";
540 Uchar code STR3[]="Program by Keil C51 6.12";
541 Uchar code STR4[]="Thank you ~v~ 1234567890";
542
543 /********************************/
544 /* 定义中文字库 */
545 /********************************/
546
547 Uchar code Hzk[]={
548 /*茂 C3515 0 */
549 0x04,0x04,0xC4,0x44,0x5F,0x44,0x44,0xF4,
550 0x44,0x4F,0x54,0x64,0x44,0x46,0x04,0x00,
551 0x80,0x40,0x3F,0x00,0x40,0x40,0x20,0x20,
C51 COMPILER V7.09 8_3 08/23/2005 22:56:19 PAGE 10
552 0x13,0x0C,0x18,0x24,0x43,0x80,0xE0,0x00,
553 /*兴 C4843 1 */
554 0x00,0xFE,0x4A,0x4A,0x00,0xFE,0xEA,0xAA,
555 0xAA,0xFE,0x00,0x4A,0x4A,0xFE,0x00,0x00,
556 0x02,0x83,0x42,0x22,0x12,0x1B,0x02,0x02,
557 0x02,0x0B,0x12,0x22,0x62,0xC3,0x02,0x00,
558 /*国 C2590 2 */
559 0x00,0xFE,0x02,0xD2,0x52,0x52,0xD2,0x3E,
560 0xD2,0x16,0x1A,0x12,0xFF,0x02,0x00,0x00,
561 0x00,0xFF,0x50,0x53,0x52,0x4A,0x6B,0x50,
562 0x4F,0x54,0x7B,0x40,0xFF,0x00,0x00,0x00,
563 /*际 C2842 3 */
564 0x00,0xFE,0x22,0xD2,0x0E,0x20,0xB8,0x4F,
565 0xB2,0x9E,0x80,0x9F,0x72,0x8A,0x06,0x00,
566 0x00,0xFF,0x04,0x08,0x07,0x21,0x12,0x0A,
567 0x46,0x82,0x7E,0x06,0x0A,0x12,0x31,0x00,
568 /*( C0308 4 */
569 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
570 0x00,0xC0,0x30,0x08,0x04,0x02,0x00,0x00,
571 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
572 0x00,0x03,0x0C,0x10,0x20,0x40,0x00,0x00,
573 /*广 C2567 5 */
574 0x00,0x00,0xFC,0x44,0x54,0x54,0x7C,0x55,
575 0xD6,0x54,0x7C,0x54,0x54,0x44,0x44,0x00,
576 0x80,0x60,0x1F,0x80,0x9F,0x55,0x35,0x15,
577 0x1F,0x15,0x15,0x35,0x5F,0x80,0x00,0x00,
578 /*东 C2211 6 */
579 0x00,0x08,0xE8,0xA8,0xA8,0xA8,0xA8,0xFF,
580 0xA8,0xA8,0xA8,0xA8,0xE8,0x0C,0x08,0x00,
581 0x00,0x40,0x23,0x12,0x0A,0x06,0x02,0xFF,
582 0x02,0x06,0x0A,0x12,0x23,0x60,0x20,0x00,
583 /*) C0309 7 */
584 0x00,0x00,0x02,0x04,0x08,0x30,0xC0,0x00,
585 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
586 0x00,0x00,0x40,0x20,0x10,0x0C,0x03,0x00,
587 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
588 /*有 C5148 8 */
589 0x04,0x04,0x04,0x84,0xE4,0x3C,0x27,0x24,
590 0x24,0x24,0x24,0xF4,0x24,0x06,0x04,0x00,
591 0x04,0x02,0x01,0x00,0xFF,0x09,0x09,0x09,
592 0x09,0x49,0x89,0x7F,0x00,0x00,0x00,0x00,
593 /*限 C4762 9 */
594 0x00,0xFE,0x02,0x22,0xDA,0x06,0x00,0xFE,
595 0x92,0x92,0x92,0x92,0xFF,0x02,0x00,0x00,
596 0x00,0xFF,0x08,0x10,0x08,0x07,0x00,0xFF,
597 0x42,0x24,0x08,0x14,0x22,0x61,0x20,0x00,
598 /*公 C2511 10 */
599 0x00,0x00,0x80,0x40,0x30,0x0C,0x00,0xC0,
600 0x07,0x1A,0x20,0x40,0x80,0x80,0x80,0x00,
601 0x01,0x01,0x20,0x70,0x28,0x24,0x23,0x20,
602 0x20,0x28,0x30,0x60,0x00,0x01,0x00,0x00,
603 /*司 C4330 11 */
604 0x10,0x10,0x92,0x92,0x92,0x92,0x92,0x92,
605 0xD2,0x9A,0x12,0x02,0xFF,0x02,0x00,0x00,
606 0x00,0x00,0x3F,0x10,0x10,0x10,0x10,0x10,
607 0x3F,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,
608 };
609 /****************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -