⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcm6963 2.lst

📁 lcm6963液晶显示程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
 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 + -