📄 12864lcd.lst
字号:
574 1 uchar code *asc_ptr;
575 1
576 1 uint i,j,w,k;
577 1 bit flag;
578 1 EA = 0;
579 1 i=0;
580 1 w = lcd_x;
581 1 Mcs=1;
582 1 Scs=0;
583 1 if(lcd_x>=8)
584 1 {
585 2 lcd_x = lcd_x - 8;
586 2 Mcs = 0;
587 2 Scs = 1;
588 2 }
589 1 lcd_y = lcd_y*2;
590 1 while(ptr[i] != 0)
591 1 {
592 2 if(w==8)
593 2 {
594 3 lcd_x = 0;
595 3 Mcs=0;
596 3 Scs=1;
597 3 }
598 2 if(w>15)
599 2 break;
600 2 c1 = ptr[i];
601 2 c2 = ptr[i+1];
602 2 SetPos(lcd_x,lcd_y);
603 2 if(c1=='\n')
604 2 {
605 3 lcd_y++;
606 3 lcd_y++;
607 3 lcd_x = 0;
608 3 w = 0;
609 3 Mcs=1;
610 3 Scs=0;
611 3 i++;
612 3 c1 = ptr[i];
613 3 c2 = ptr[i+1];
C51 COMPILER V7.06 12864LCD 12/18/2007 11:18:07 PAGE 11
614 3 SetPos(lcd_x,lcd_y);
615 3 }
616 2 if(c1 >= 0x20) //// ASCII
617 2 {
618 3 asc_ptr = ASC_MSK + (c1-0x20)*ASC_CHR_HEIGHT-(16-ASC_CHR_HEIGHT);
619 3 for(j=0;j<16;j++) //写16行
620 3 {
621 4 if(j==8)
622 4 {
623 5 lcd_y++;
624 5 SetPos(lcd_x,lcd_y);
625 5 }
626 4 write_data(*asc_ptr++);
627 4 }
628 3 lcd_y--;
629 3 }
630 2 else // 中文
631 2 {
632 3 if(w>14)
633 3 break;
634 3 flag = 0;
635 3 for(j=0;j<sizeof(GB_16)/sizeof(GB_16[0]);j++)
636 3 if(c1 == GB_16[j].Index[0] && c2 == GB_16[j].Index[1])
637 3 break;
638 3 for(k=0;k<sizeof(GB_16[0].Msk)/2;k++)
639 3 {
640 4 if(k==8 && flag)
641 4 {
642 5 flag = 0;
643 5 Mcs=1;
644 5 Scs=0;
645 5 lcd_y++;
646 5 lcd_x = 7;
647 5 SetPos(lcd_x,lcd_y);
648 5 }
649 4 else if(k == 8)
650 4 {
651 5 lcd_y++;
652 5 SetPos(lcd_x,lcd_y);
653 5 }
654 4 if(k==4 && lcd_x==7 && !flag)
655 4 {
656 5 flag = 1;
657 5 lcd_x = 0;
658 5 Mcs=0;
659 5 Scs=1;
660 5 SetPos(lcd_x,lcd_y);
661 5 }
662 4 if(k==12 && lcd_x==7 && !flag)
663 4 {
664 5 flag = 1;
665 5 lcd_x = 0;
666 5 Mcs=0;
667 5 Scs=1;
668 5 SetPos(lcd_x,lcd_y);
669 5 }
670 4 if(j < sizeof(GB_16)/sizeof(GB_16[0]))
671 4 {
672 5 write_data(GB_16[j].Msk[k*2]);
673 5 write_data(GB_16[j].Msk[k*2+1]);
674 5 }
675 4 else // 未找到该字
C51 COMPILER V7.06 12864LCD 12/18/2007 11:18:07 PAGE 12
676 4 {
677 5 write_data(0);
678 5 write_data(0);
679 5 }
680 4 }
681 3 lcd_y--;
682 3 if(!flag)
683 3 lcd_x++;
684 3 w++;
685 3 i++;
686 3 }
687 2 lcd_x++;
688 2 w++;
689 2 i++;
690 2 }
691 1 EA = 1;
692 1 }
693
694
695 /*-----------------在制定位置显示字符--------------------------*/
696
697 void DisplayType(uchar lcdx,uchar lcdy,uchar value)
698 {
699 1 uchar i;
700 1 uchar code *asc_ptr;
701 1 EA = 0;
702 1 if(lcdx>=8)
703 1 {
704 2 lcdx = lcdx-8;
705 2 Mcs=0;
706 2 Scs=1;
707 2 }else
708 1 {
709 2 Mcs=1;
710 2 Scs=0;
711 2 }
712 1 lcdy = lcdy*2;
713 1 SetPos(lcdx,lcdy);
714 1 asc_ptr = ASC_MSK + (value-0x20)*ASC_CHR_HEIGHT-(16-ASC_CHR_HEIGHT);
715 1 for(i=0;i<16;i++) //写16行
716 1 {
717 2 if(i==8)
718 2 {
719 3 lcdy++;
720 3 SetPos(lcdx,lcdy);
721 3 }
722 2 write_data(*asc_ptr++);
723 2 }
724 1 EA = 1;
725 1 }
726
727 /*------------------在制定位置显示'|'-----------------------------*/
728 void DispRow(uchar lcd_x,uchar lcd_y)
729 {
730 1 EA = 0;
731 1 if(lcd_x>=64)
732 1 {
733 2 lcd_x = lcd_x-64;
734 2 Mcs=0;
735 2 Scs=1;
736 2 }else
737 1 {
C51 COMPILER V7.06 12864LCD 12/18/2007 11:18:07 PAGE 13
738 2 Mcs=1;
739 2 Scs=0;
740 2 }
741 1 write_com(Col_Add+lcd_x);
742 1 write_com(Page_Add+lcd_y);
743 1 write_data(0xfe);
744 1 write_com(Col_Add+lcd_x);
745 1 write_com(Page_Add+lcd_y+1);
746 1 write_data(0x7f);
747 1 EA = 1;
748 1 }
749
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1092 ----
CONSTANT SIZE = 5314 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 28
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -