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

📄 lcm12864.lst

📁 12864液晶显示不同的复杂图形
💻 LST
📖 第 1 页 / 共 3 页
字号:
 163            }; 
 164          
 165          /*------------------检查忙位-----------------------------*/ 
 166          void chk_busy() 
 167          { 
 168   1               RS=0; //RS=0,instruction;RS=1,data
 169   1               RW=1;  //read busy flag and address counter;H read;L write
 170   1               E=1; //high impulse 
 171   1           Lcd_Bus=0xff;//write instruction to set BF=1 
 172   1           while((Lcd_Bus&0x80)==0x80); //read busy flag BF=0 receive new instruction
 173   1           E=0; 
 174   1      } 
 175          /*------------------延时子程序-----------------------------*/ 
 176          void delay(unsigned int t) 
 177          {  
 178   1              unsigned int i,j;                   
 179   1              for(i=0;i<t;i++) 
C51 COMPILER V8.16   LCM12864                                                              03/12/2009 04:10:13 PAGE 4   

 180   1            for(j=0;j<10;j++); 
 181   1      } 
 182          /*------------------写命令到LCD------------------------------*/ 
 183          void write_com(unsigned char cmdcode) 
 184          { 
 185   1              chk_busy(); 
 186   1              RS=0;//RS=0,instruction;RS=1,data
 187   1              RW=0;//write
 188   1              E=1; 
 189   1              Lcd_Bus=cmdcode; 
 190   1              delay(5);////////////////////在数据写入的时候加入适当的延时 
 191   1              E=0; 
 192   1              delay(5); 
 193   1      } 
 194          /*-------------------写数据到LCD----------------------------*/ 
 195          void write_data(unsigned char Dispdata) 
 196          { 
 197   1              chk_busy(); 
 198   1              RS=1;//RS=1,write data 
 199   1              RW=0; 
 200   1              E=1; 
 201   1              Lcd_Bus=Dispdata; 
 202   1              delay(5);///////////////////在数据写入的时候加入适当的延时 
 203   1              E=0; 
 204   1              delay(5); 
 205   1      } 
 206          /*------------------初始化LCD屏--------------------------*/ 
 207          void lcdreset() 
 208          {  
 209   1         delay(2000); 
 210   1         write_com(0x30); 
 211   1         delay(10);             //选择基本指令集 
 212   1         write_com(0x30);       //选择8bit数据流,此时DB4=DL,DL=1为8位数据流 
 213   1         delay(5); 
 214   1         write_com(0x0c);       //开显示(无游标、不反白) 
 215   1         delay(10); 
 216   1         write_com(0x01);       //清除显示,并且设定地址指针为00H 
 217   1         delay(500); 
 218   1         write_com(0x1c);       //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位 
 219   1         delay(0); 
 220   1      } 
 221          /*------------------自定义一个字符代码(一个星星和月亮)--------------------------*/ 
 222          void CGRAM() 
 223          { 
 224   1               int i; 
 225   1           write_com(0x30);//基本指令集   
 226   1           write_com(0x40);//设定CGRAM地址到地址计数器AC 
 227   1           for(i=0;i<16;i++) 
 228   1           {
 229   2                      write_data(zk[i*2]); 
 230   2              write_data(zk[i*2+1]); 
 231   2            } 
 232   1      }       
 233          /*------------------显示字符串--------------------------*/ 
 234          void hzkdis(unsigned char code *s) 
 235          {  
 236   1              while(*s>0) 
 237   1              {  
 238   2                      write_data(*s); 
 239   2              s++; 
 240   2              delay(50); 
 241   2              } 
C51 COMPILER V8.16   LCM12864                                                              03/12/2009 04:10:13 PAGE 5   

 242   1      } 
 243          /*------------------首屏显示--------------------------*/ 
 244          void ceshi() 
 245          {
 246   1              write_com(0x01);//清除显示,并且设定地址指针为00H 
 247   1              delay(5); 
 248   1              
 249   1              write_com(0x80);//第一行(如果是地址是:80H,即LCD的第一行的第一个位置显示) 
 250   1              hzkdis("吾将上下而求索!"); 
 251   1              
 252   1              write_com(0x90);//第二行(如果是地址是:90H,即LCD的第二行的第一个位置显示) 
 253   1              hzkdis("初级单片机开发"); 
 254   1              
 255   1              write_com(0x88);//第三行(如果是地址是:88H,即LCD的第二行的第一个位置显示) 
 256   1              hzkdis("TEL:13928574872"); 
 257   1              
 258   1              write_com(0x98);//第四行(如果是地址是:98H,即LCD的第二行的第一个位置显示) 
 259   1              hzkdis("测试程序: 李燕绪"); 
 260   1      
 261   1      
 262   1      } 
 263          /*------------------显示图片------------------------*/ 
 264          void Disp_Img(unsigned char code *img) 
 265          {  unsigned int j=0; 
 266   1         unsigned char x,y,i; 
 267   1             for(i=0;i<9;i+=8) 
 268   1                      for(y=0;y<32;y++)/*原来 为 y<26 ,上下两个半屏不能正常对接显示,导致显示的图片中间有空隙*/ 
 269   1                              for(x=0;x<8;x++) 
 270   1                                       {  write_com(0x36);//功能设置---8BIT控制界面,扩充指令集绘图显示开
 271   2                                          write_com(y+0x80);        //行地址 
 272   2                                          write_com(x+0x80+i);     //列地址 
 273   2                                          write_com(0x30); 
 274   2                                          write_data(img[j++]); 
 275   2                                          write_data(img[j++]); 
 276   2                                       }   
 277   1                 
 278   1      } 
 279          /*------------------清整个GDRAM空间----------------------------*/ 
 280          void clrgdram() 
 281          { 
 282   1                      unsigned char x,y; 
 283   1              for(y=0;y<64;y++) 
 284   1                      for(x=0;x<16;x++) 
 285   1                      {  
 286   2                                      write_com(0x34);//功能设置---8BIT控制界面,扩充指令集绘图显示关 
 287   2                          write_com(y+0x80);        //行地址 
 288   2                          write_com(x+0x80);     //列地址 
 289   2                          write_com(0x30); 
 290   2                          write_data(0x00); 
 291   2                          write_data(0x00); 
 292   2                  } 
 293   1         } 
 294          /*------------------整屏写入数据:全亮,或者竖条-----------------------------*/ 
 295          void lcdfill(unsigned char disdata) 
 296          { 
 297   1              unsigned char x,y; 
 298   1              for(y=0;y<32;y++) 
 299   1                      for(x=0;x<16;x++) 
 300   1                       {  
 301   2                                      write_com(0x36); 
 302   2                          write_com(y+0x80);        //行地址 
 303   2                          write_com(x+0x80);     //列地址 
C51 COMPILER V8.16   LCM12864                                                              03/12/2009 04:10:13 PAGE 6   

 304   2                          write_com(0x30); 
 305   2                          write_data(disdata); 
 306   2                          write_data(disdata); 
 307   2                       } 
 308   1         write_com(0x34);                             
 309   1         write_com(0x36); 
 310   1         } 
 311          /*------------------显示横-----------------------------*/ 
 312          void Disp_H_Line() 
 313          {  
 314   1              unsigned char x,y; 
 315   1          unsigned char k=0x00;   
 316   1             for(y=0;y<32;y++) 
 317   1               { 
 318   2                               k=~k; 
 319   2                       for(x=0;x<16;x++) 
 320   2                               {  
 321   3                                                      write_com(0x36); 
 322   3                                          write_com(y+0x80);      //行地址 
 323   3                                          write_com(x+0x80);     //列地址 
 324   3                                          write_com(0x30); 
 325   3                                          write_data(k); 
 326   3                                          write_data(k); 
 327   3                                }; 
 328   2               } 
 329   1           write_com(0x34);                           
 330   1               write_com(0x36); 
 331   1      } 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -