📄 lcm6963 2.lst
字号:
607 {
608 1 unsigned char dat;
609 1 cd=1;rd=1;wr=1;
610 1 P0=0xff;
611 1 rd=0;
612 1 dat=P0;
613 1 rd=1;
C51 COMPILER V6.12 LCM6963_2 09/19/2005 11:41:23 PAGE 11
614 1 return(dat);
615 1 }
616 /* 数据,指令读写判别 */
617 //
618 void p1()
619 {
620 1 while ((busy()&3)!=3) {}
621 1 }
622 /* 数据自动读判别 */
623 //
624 /*void p2()
625 {
626 while ((busy()&4)!=4) {}
627 }
628 /* 数据自动写判别 */
629 //
630 void p3()
631 {
632 1 while ((busy()&8)!=8) {}
633 1 }
634 /*------------------初始化-----------------*/
635 void init_lcd (void)
636 {
637 1 reset=0;
638 1 reset=1;
639 1 cs=0;
640 1 rd=1;
641 1 wr=1;
642 1 wr_xd(addr_w,0x40); //文本显示区首地址
643 1 wr_xd(addr_t,0x42); //图形显示区首地址
644 1 wr_td(width,0x00,0x41); //文本显示区宽度
645 1 wr_td(width,0x00,0x43); //图形显示区宽度
646 1 wr_comm(0x81); //逻辑"异或"
647 1 wr_td(0x02,0x00,0x22); //CGRAM偏置地址设置
648 1 wr_comm(0x9c); //启用文本显示,启用图形显示
649 1 }
650 /*--------------清RAM------------------*/
651 void clrram (void)
652 {
653 1 uchar i,j;
654 1 wr_xd(addr_w,0x24);
655 1 wr_comm(0xb0);
656 1 for(j=0;j<144;j++)
657 1 {
658 2 for(i=0;i<width;i++)
659 2 wr_auto(0x00);
660 2 }
661 1 wr_comm(0xb2);
662 1 }
663 /*--------------显示点阵------------------*/
664 Pixel(unsigned char PointX,unsigned char PointY, bit Mode)
665 {
666 1 unsigned int StartAddr=addr_t;
667 1 unsigned char dat;
668 1 StartAddr+=PointY*width + PointX/8;
669 1 // StartAddr=PointY*240 + PointX;
670 1 dat=0xf0+7-PointX%8;
671 1 // dat=0xf0;
672 1 if(Mode) dat=dat|0x08;
673 1
674 1 wr_td( (unsigned char)(StartAddr),(unsigned char)(StartAddr>>8),0x24 );
675 1 //设置该点所在单元地址
C51 COMPILER V6.12 LCM6963_2 09/19/2005 11:41:23 PAGE 12
676 1 wr_comm(dat);
677 1 }
678 void Lcd_Line( unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2,bit Mode)
679 {
680 1 unsigned char x,y;
681 1 float k,b;
682 1 y1=64-y1;
683 1 y2=64-y2;
684 1 if( abs(y1-y2) <= abs(x1-x2) ) // |k|<=1
685 1 {
686 2 k=(y2*1.0-y1*1.0) / (x2*1.0-x1*1.0) ;
687 2 b=y1-k*x1;
688 2
689 2 if( x1 <= x2 )
690 2 {
691 3 for(x=x1;x<=x2;x++)
692 3 {
693 4 y=k*x+b;
694 4 Pixel(x, y,Mode);
695 4 }
696 3 }
697 2 else
698 2 {
699 3 for(x=x2;x<=x1;x++)
700 3 {
701 4 y=k*x+b;
702 4 Pixel(x, y,Mode);
703 4 }
704 3 }
705 2 }
706 1 else // abs(y1-y2) > abs(x1-x2) |K|>1
707 1 {
708 2 k=(float)(x2-x1) / (float)(y2-y1) ;
709 2 b=x1-k*y1;
710 2
711 2 if( y1 <= y2 )
712 2 {
713 3 for(y=y1;y<=y2;y++)
714 3 { x=k*y+b;
715 4 Pixel( x , y,Mode);
716 4 }
717 3 }
718 2 else
719 2 {
720 3 for(y=y2;y<=y1;y++)
721 3 { x=k*y+b;
722 4 Pixel( x , y,Mode);
723 4 }
724 3 }
725 2 }
726 1 }
727
728 /*--------------在addr处显示8xl*yl的图形--------------*/
729 void disp_img(unsigned int addr,unsigned int xl,unsigned int yl,const unsigned char *img)
730 {
731 1 uint i,j;
732 1 for(j=0;j<yl;j++)
733 1 {
734 2 for(i=0;i<xl;i++)
735 2 {
736 3 wr_xd(addr+j*width+i,0x24);
737 3 wr_od(img[j*xl+i],0xc0);
C51 COMPILER V6.12 LCM6963_2 09/19/2005 11:41:23 PAGE 13
738 3 }
739 2 }
740 1 }
741 /*----------在addr处显示row_yl行(每行row_xl个)8xl*yl的文字----------*/
742 void disp_hanzi(uint addr,uchar xl,uchar yl,uchar row_xl,uchar row_yl,const unsigned char *chn)
743 {
744 1 uint i,j,k,m;
745 1 for(m=0;m<row_yl;m++)
746 1 {
747 2 for(k=0;k<row_xl;k++)
748 2 {
749 3 for(j=0;j<yl;j++)
750 3 {
751 4 for(i=0;i<xl;i++)
752 4 {
753 5 wr_xd(addr+m*yl*width+k*xl+j*width+i,0x24);
754 5 wr_od(chn[(m*row_xl*xl*yl)+(k*xl*yl)+(j*xl)+i],0xc0);
755 5 }
756 4 }
757 3 }
758 2 }
759 1 }
760 /*--------------显示字符------------------*/
761 /*void disp_eng(unsigned char *eng)
762 {
763 uint i,j;
764 wr_xd(addr_w,0x24);
765 wr_comm(0xb0);
766 for(j=0;j<9;j++)
767 {
768 for(i=0;i<width;i++)
769 wr_auto(eng[j*width+i]);
770 }
771 wr_comm(0xb2);
772 }
773
774 /*------------------演示程序--------------------*/
775 void main ()
776 {
777 1 uint i,j;
778 1 init_lcd();
779 1 while (1)
780 1 {
781 2 clrram();
782 2 // uint i,j;
783 2 j=0;
784 2 for(j=0;j<32;j++)
785 2 {
786 3 clrram();
787 3 i=0x01f0+j;
788 3 disp_hanzi(i,4,32,4,1,tabAVR1); //显示汉字"欢迎光临"
789 3 delay1(1);
790 3 }
791 2 clrram();
792 2 for(i=0;i<128;i++)
793 2 {
794 3 Lcd_Line(10,20,i,20,1);
795 3 Lcd_Line(10,40,i,40,1);
796 3 Lcd_Line(10,20,10,40,1);
797 3 Lcd_Line(i,20,i,40,1);
798 3 delay1(10);
799 3 clrram();
C51 COMPILER V6.12 LCM6963_2 09/19/2005 11:41:23 PAGE 14
800 3 }
801 2 delay1(1000);
802 2 clrram();
803 2 disp_hanzi(0x01f0,4,32,4,1,tabAVR1); //
804 2 delay1(500);
805 2 clrram();
806 2 disp_img(0x01f2,12,64,mm1); //
807 2 delay1(500);
808 2 clrram();
809 2 disp_img(0x01f1,13,64,car); //
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -