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

📄 12864lcd.lst

📁 本程序是12864LCD驱动程序,采用I2C的通信方式
💻 LST
📖 第 1 页 / 共 2 页
字号:
 157          void Lcd_init(void) //初始化LCD 
 158          {
 159   1              Delaynms(10);            //启动等待,等LCM讲入工作状态
 160   1              CS=1;
 161   1              Write_char(0,0x30);  //基本指令集  //功能设定
 162   1              Write_char(0,0x0c);  //显示打开,
 163   1              Write_char(0,0x01);  //清屏,将DDRAM的地址计数器归零  
 164   1      }
 165          
 166          /******************************************************************************/
 167          void Write_char(bit start, unsigned char ddata) //写指令或数据
 168          {
 169   1              unsigned char start_data,Hdata,Ldata;
 170   1              if(start==0) 
 171   1                      start_data=0xf8;        //写指令
 172   1              else    
 173   1                      start_data=0xfa;        //写数据 
 174   1              Hdata=ddata&0xf0;       //取高四位
 175   1              Ldata=(ddata<<4)&0xf0;  //取低四位
 176   1              Send_byte(start_data);  //发送起始信号
 177   1              Delayms(1); ; 
 178   1              Send_byte(Hdata);       //发送高四位
 179   1              Delayms(1); ; 
C51 COMPILER V7.20   12864LCD                                                              11/11/2007 20:05:47 PAGE 4   

 180   1              Send_byte(Ldata);       //发送低四位
 181   1              Delayms(1); 
 182   1      }
 183          
 184          /******************************************************************************/
 185          void Send_byte(unsigned char bbyte) //发送一个字节
 186          {
 187   1              unsigned char i;
 188   1              for(i=0;i<8;i++)
 189   1              {
 190   2                      SID=bbyte&0x80; //取出最高位
 191   2                      SCLK=1;
 192   2                      SCLK=0;
 193   2                      bbyte<<=1; 
 194   2              }  
 195   1      }
 196          void Delaynms(unsigned int di) //延时
 197          {
 198   1              unsigned int da,db;
 199   1              for(da=0;da<di;da++)
 200   1                      for(db=0;db<10;db++);
 201   1      }
 202          void Delayms(unsigned int time)                 //延时函数
 203          {
 204   1              unsigned int data j;
 205   1              unsigned int data i;
 206   1              for(i=0;i<time;i++)
 207   1                      for(j=0;j<121;j++)
 208   1                              _nop_();
 209   1      }
 210          void Disp_img(unsigned char  *img) //图形显示     字模221 横向取膜
 211          { 
 212   1              unsigned char i,j;
 213   1              unsigned int k =0 ;
 214   1              for(i=0;i<32;i++)
 215   1              { 
 216   2                      Write_char(0,0x80+i);
 217   2                      Write_char(0,0x80);
 218   2                      for(j=0;j<16;j++) 
 219   2                              Write_char(1,img[k++]);
 220   2              }
 221   1              for(i=0;i<32;i++)
 222   1              { 
 223   2                      Write_char(0,0x80+i);
 224   2                      Write_char(0,0x88);
 225   2                      for(j=0;j<16;j++) 
 226   2                              Write_char(1,img[k++]);
 227   2              }
 228   1      }
 229          
 230          /*****************************************************************************/
 231          void Lcd_img_Cls(void)  //图形方式下清屏
 232          { 
 233   1              unsigned char i,j;
 234   1              for(i=0;i<32;i++)
 235   1              { 
 236   2                      Write_char(0,0x80+i);
 237   2                      Write_char(0,0x80);
 238   2                      for(j=0;j<16;j++) 
 239   2                              Write_char(1,0x00);///for test
 240   2              }
 241   1              for(i=0;i<32;i++)
C51 COMPILER V7.20   12864LCD                                                              11/11/2007 20:05:47 PAGE 5   

 242   1              {
 243   2                      Write_char(0,0x80+i);
 244   2                      Write_char(0,0x88);
 245   2                      for(j=0;j<16;j++) 
 246   2                      Write_char(1,0x00);
 247   2              }
 248   1      }
 249          
 250          
 251          void LCD_set_xy( unsigned char x, unsigned char y )     //设置LCD显示的起始位置,X为行,Y为列
 252          {
 253   1          unsigned char address;
 254   1              switch(x)
 255   1              {
 256   2                      case 1: address = 0x80 + y; break; 
 257   2                      case 2: address = 0x90 + y; break; 
 258   2                      case 3: address = 0x88 + y; break;
 259   2                      case 4: address = 0x98 + y; break; 
 260   2                      default:address = 0x80 + y; break;
 261   2              }
 262   1          Write_char(0, address);
 263   1      }
 264          
 265          void LCD_Write_char_string(unsigned char X,unsigned char Y, unsigned char *s)
 266          {
 267   1              LCD_set_xy( X, Y );    
 268   1          while (*s) 
 269   1              {
 270   2                      Write_char( 1, *s );
 271   2                      s ++;
 272   2                      Delaynms(1);
 273   2              }
 274   1      }
 275            
 276          /******************************************************************************/
 277          void main(void)
 278          {
 279   1              unsigned char i;
 280   1      //      LCD_Write_char_string(1,0,(unsigned char * )&a );//在第2行第0列开始显示
 281   1      //      Write_char(0,0x08);//SLEEP
 282   1      
 283   1      //      Write_char(0,0x0C);//WAKE;
 284   1              Lcd_init();//初始化LCD,从图形显示状态下返回
 285   1              while(1)
 286   1              {
 287   2                      Lcd_init();//初始化LCD,从图形显示状态下返回
 288   2                      Write_char(0,0x80);     //设置起始地址
 289   2                      for(i=0;i<28;i++) 
 290   2                  {
 291   3                              Write_char(1,ma[i]);//16 = 8个汉字
 292   3                              if((i>19) || (i< 16))
 293   3                                      Delayms(1000);  
 294   3                      }
 295   2                      Write_char(0,0x01);//清屏
 296   2                      Delayms(1000);
 297   2                      Write_char(0,0x36); //图形方式
 298   2                      Disp_img(xiongmao);//显示12864图片
 299   2                      Delayms(4000);
 300   2                      Lcd_img_Cls();  
 301   2              }
 302   1      
 303   1      }
C51 COMPILER V7.20   12864LCD                                                              11/11/2007 20:05:47 PAGE 6   



MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    627    ----
   CONSTANT SIZE    =   2088    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      18
   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 + -