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

📄 lcd12864.lst

📁 display chinese words in 12864 LCD
💻 LST
📖 第 1 页 / 共 2 页
字号:
 228   1      }
 229          
 230          
 231          
 232          SendCommandToLCD(unsigned char command)    //写命令到LCD中
 233          {
 234   1         CheckState();
 235   1         RS=0;         //向LCD发送命令
 236   1         RW=0;
 237   1         Dataport=command;     //command :命令
 238   1         EN=1;
 239   1         EN=0;
 240   1      }
 241          
C51 COMPILER V8.02   LCD12864                                                              01/26/2007 11:51:04 PAGE 5   

 242          
 243          void SetLine(unsigned char page)        //设置页 0xb8是页的首地址
 244          {
 245   1        page=0xb8|page; //1011 1xxx            0<=page<=7 设定页地址--X 0-7,8行为一页64/8=8,共8页
 246   1        SendCommandToLCD(page);
 247   1      }
 248          
 249          
 250          void SetStartLine(unsigned char startline)         //设定显示开始行,0xc0是行的首地址
 251          {
 252   1        startline=0xc0|startline; //1100 0000
 253   1        SendCommandToLCD(startline); //设置从哪行开始:0--63,一般从0 行开始显示
 254   1       }
 255          
 256          
 257          void SetColumn(unsigned char column)    //设定列地址--Y 0-63 ,0x40是列的首地址
 258          {
 259   1        column=column &0x3f; //column最大值为64,越出 0=<column<=63
 260   1        column= 0x40|column; //01xx xxxx
 261   1        SendCommandToLCD(column);
 262   1      }
 263          
 264           
 265          void SetOnOff(unsigned char onoff)         //开关显示,0x3f是开显示,0x3e是关显示
 266          {
 267   1              onoff=0x3e|onoff; //0011 111x,onoff只能为0或者1
 268   1              SendCommandToLCD(onoff);
 269   1      }
 270          
 271          
 272          void WriteByte(unsigned char dat)       //写显示数据
 273          {
 274   1         CheckState();
 275   1         RS=1; 
 276   1         RW=0;
 277   1         Dataport=dat;//dat:显示数据
 278   1         EN=1;
 279   1         EN=0;
 280   1        }
 281          
 282          
 283          
 284          
 285          void SelectScreen(unsigned char screen)   //选择屏幕screen: 0-全屏,1-左屏,2-右屏
 286          {                                                
 287   1         switch(screen)
 288   1         { case 0: cs1=0;//全屏
 289   2                   _nop_(); _nop_(); _nop_(); 
 290   2                   cs2=0; 
 291   2                   _nop_(); _nop_(); _nop_(); 
 292   2                   break; 
 293   2           case 1: cs1=0;//左屏
 294   2                   _nop_(); _nop_(); _nop_(); 
 295   2                   cs2=1;
 296   2                   _nop_(); _nop_(); _nop_(); 
 297   2                   break;
 298   2           case 2: cs1=1;//右屏
 299   2                   _nop_(); _nop_(); _nop_(); 
 300   2                   cs2=0;
 301   2                   _nop_(); _nop_(); _nop_(); 
 302   2                   break;
 303   2         }
C51 COMPILER V8.02   LCD12864                                                              01/26/2007 11:51:04 PAGE 6   

 304   1      }
 305          
 306          
 307          void ClearScreen(unsigned char screen)    //清屏screen: 0-全屏,1-左屏,2-右
 308          {       
 309   1           unsigned char i,j;
 310   1           SelectScreen(screen);
 311   1           
 312   1               for(i=0;i<8;i++)        //控制页数0-7,共8页
 313   1               {
 314   2                      SetLine(i);
 315   2                              SetColumn(0);
 316   2                    for(j=0;j<64;j++)    //控制列数0-63,共64列
 317   2                                      {
 318   3                        WriteByte(0x00); //写点内容,列地址自动加1
 319   3                      }
 320   2           }
 321   1                                               
 322   1      }
 323          
 324          void    delay(uint nms)         //延时程序
 325          {
 326   1              uint i;
 327   1              for(; nms > 0; nms--)
 328   1                      for(i = 0; i < 500; i++);
 329   1      }
 330          
 331          void    lcd_rol()                                       //向上滚屏
 332          {
 333   1              uint i;
 334   1              for(i = 0; i < 64; i++)
 335   1              {
 336   2                      cs1=0; // 片选1
 337   2                      SendCommandToLCD(0xc0+i);
 338   2                      cs1=1; 
 339   2                      
 340   2                      cs2=0;// 片选2
 341   2                      SendCommandToLCD(0xc0+62-i);
 342   2                      cs2=0; // 片选2
 343   2                      
 344   2                      delay(6);
 345   2              }
 346   1      }
 347          void InitLCD()    //初始化LCD
 348          { 
 349   1      
 350   1              CheckState();
 351   1      
 352   1              SelectScreen(0);
 353   1              SetOnOff(0); //关显示
 354   1      
 355   1              SelectScreen(0);
 356   1              SetOnOff(1); //开显示
 357   1      
 358   1              SelectScreen(0);
 359   1              ClearScreen(0);//清屏
 360   1      
 361   1              SetStartLine(0); //开始行:0
 362   1      
 363   1      }
 364          
 365          
C51 COMPILER V8.02   LCD12864                                                              01/26/2007 11:51:04 PAGE 7   

 366          //显示全角汉字
 367          void Display(unsigned char ss,unsigned char page,unsigned char column,unsigned char number)
 368          {
 369   1              int i;                    //选屏参数,pagr选页参数,column选列参数,number选第几汉字输出
 370   1                      
 371   1              SelectScreen(ss);
 372   1              column=column&0x3f;
 373   1      
 374   1              SetLine(page);  //写上半页
 375   1              SetColumn(column); //控制列
 376   1              for(i=0;i<16;i++)  //控制16列的数据输出
 377   1              {
 378   2              WriteByte(Hzk[i+32*number]); //i+32*number汉字的前16个数据输出
 379   2              
 380   2              }
 381   1      
 382   1              SetLine(page+1);                 //写下半页
 383   1              SetColumn(column);         //控制列
 384   1          for(i=0;i<16;i++)     //控制16列的数据输出
 385   1              {
 386   2              WriteByte(Hzk[i+32*number+16]); //i+32*number+16汉字的后16个数据输出
 387   2              }
 388   1      
 389   1      } 
 390          
 391          
 392          //显示半角汉字和数字和字母
 393          void Displayen(unsigned char ss,unsigned char page,unsigned char column,unsigned char number)
 394          {
 395   1              int i;     //选屏参数,pagr选页参数,column选列参数,number选第几汉字输出
 396   1                      
 397   1              SelectScreen(ss);
 398   1              column=column&0x3f;
 399   1      
 400   1              SetLine(page);  //写上半页
 401   1              SetColumn(column);
 402   1              for(i=0;i<8;i++)
 403   1              {
 404   2              WriteByte(Ezk[i+16*number]);
 405   2              }
 406   1              
 407   1              SetLine(page+1);        //写下半页
 408   1              SetColumn(column);
 409   1              for(i=0;i<8;i++)
 410   1              {
 411   2              WriteByte(Ezk[i+16*number+8]);
 412   2              }
 413   1      } 
 414           
 415           void main()
 416          {  int i;
 417   1         InitLCD();
 418   1           
 419   1         ClearScreen(0);//清屏
 420   1          
 421   1         SetStartLine(0);
 422   1            
 423   1         for(i=0;i<4;i++)
 424   1         {
 425   2              Display(2,0,i*16,i);
 426   2              Display(1,0,i*16,i+4);
 427   2              
C51 COMPILER V8.02   LCD12864                                                              01/26/2007 11:51:04 PAGE 8   

 428   2              Display(2,0+2,i*16,i+8);
 429   2              Display(1,0+2,i*16,i+12);
 430   2      
 431   2              Display(2,0+2+2,i*16,i+16);
 432   2              Display(1,0+2+2,i*16,i+20);
 433   2          } 
 434   1      
 435   1              for(i=0;i<8;i++)
 436   1         {
 437   2              Displayen(2,0+2+2+2,i*8,i);
 438   2              Displayen(1,0+2+2+2,i*8,i+8);
 439   2          }
 440   1              
 441   1              while(1)
 442   1              {
 443   2                      lcd_rol();
 444   2                      delay(1000);
 445   2              }
 446   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    669    ----
   CONSTANT SIZE    =   1024    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      10
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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