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

📄 lcd.lst

📁 keilC51编写的
💻 LST
📖 第 1 页 / 共 2 页
字号:
 239          };
 240          /********************************************************************************************
 241          //软件延时 Delay()
C51 COMPILER V7.50   LCD                                                                   08/25/2007 20:35:38 PAGE 5   

 242          //
 243          *********************************************************************************************/
 244          void Delay(unsigned int count){
 245   1      unsigned char i;
 246   1      while(--count != 0){
 247   2      for(i = 0; i < 125; i++); // ";" 表示空语句,CPU空转。
 248   2      } // i 从0加到125,在12M晶体下CPU大概耗时1毫秒
 249   1      }
 250          /*********************************************************************************************
 251          //LCM12864测忙函数 LCM12864_TestBusy()
 252          //
 253          **********************************************************************************************/
 254          void LCM12864_TestBusy(void){
 255   1      LCM12864_RW = 1;
 256   1      LCM12864_RS = 0;
 257   1      LCM12864_E = 0;
 258   1      LCM12864_E = 1;
 259   1      while(LCM12864_DB7_DB0 & LCM12864_STATUS_BUSY);
 260   1      }
 261          /*********************************************************************************************
 262          //写指令到LCM12864 LCM12864_WriteCMD()
 263          //
 264          **********************************************************************************************/
 265          void LCM12864_WriteCMD(unsigned char LCM12864_command){ //LCM12864_command 欲写入指令
 266   1      LCM12864_TestBusy();
 267   1      LCM12864_RW = 0; LCM12864_RS = 0;
 268   1      LCM12864_DB7_DB0 = LCM12864_command;
 269   1      LCM12864_E = 0;
 270   1      LCM12864_E = 1;
 271   1      LCM12864_TestBusy();
 272   1      }
 273          /*********************************************************************************************
 274          //写数据到LCM12864 LCM12864_WriteData()
 275          //
 276          **********************************************************************************************/
 277          void LCM12864_WriteData(unsigned char LCM12864_data){ //LCM12864_command 欲写入数据
 278   1      LCM12864_RW = 0; LCM12864_RS = 1;
 279   1      LCM12864_DB7_DB0 = LCM12864_data;
 280   1      LCM12864_E = 0;
 281   1      LCM12864_E = 1;
 282   1      LCM12864_TestBusy(); //读LCM忙
 283   1      }
 284          /********************************************************************************************
 285          //从LCM12864读数据 LCM12864_ReadData()
 286          //
 287          *********************************************************************************************/
 288          unsigned char LCM12864_ReadData(void){
 289   1      unsigned char LCM12864_data;
 290   1      LCM12864_E = 0;
 291   1      LCM12864_RW = 1; LCM12864_RS = 1;
 292   1      LCM12864_E = 1;
 293   1      LCM12864_data = LCM12864_DB7_DB0; //送入8位数据
 294   1      LCM12864_TestBusy(); //读LCM忙
 295   1      return LCM12864_data;
 296   1      }
 297          /********************************************************************************************
 298          //向LCM12864指定点写一字节数据 LCM12864_Write1Byte_X_Y()
 299          //
 300          /********************************************************************************************/
 301          void LCM12864_Write1Byte_X_Y( unsigned char x, //x坐标值(0-127)
 302          unsigned char y, //y坐标值(0-63)
 303          unsigned char LCM12864_data){ //LCM12864_data 所要写的数据
C51 COMPILER V7.50   LCD                                                                   08/25/2007 20:35:38 PAGE 6   

 304   1      x = x&0x7f; y = y&0x3f; //参数过滤
 305   1      LCM12864_CS1 = 1; LCM12864_CS2 = 1; //不选中左半屏及右半屏
 306   1      if(x<64){ // 判断选择左、右半屏
 307   2      LCM12864_CS1 = 0; // 选中左半屏
 308   2      }
 309   1      else{
 310   2      LCM12864_CS2 = 0; // 选中右半屏
 311   2      x = x-64;
 312   2      }
 313   1      LCM12864_WriteCMD(LCM12864_COL_START_ADDR+x); // 设置当前列地址,即x坐标
 314   1      LCM12864_WriteCMD(LCM12864_PAGE_START_ADDR+y); // 设置当前页地址,即y坐标
 315   1      LCM12864_WriteData(LCM12864_data); // 向LCM12864写数据
 316   1      }
 317          /********************************************************************************************
 318          //从LCM12864指定点读取一字数据 LCM12864_Read1Byte_X_Y()
 319          //
 320          /********************************************************************************************/
 321          unsigned char LCM12864_Read1Byte_X_Y( unsigned char x, //x坐标值(0-127)
 322          unsigned char y){ //y坐标值(0-63)
 323   1      unsigned char LCM12864_data;
 324   1      x = x&0x7f; y = y&0x3f; //参数过滤
 325   1      LCM12864_CS1 = 1; LCM12864_CS2 = 1; //不选中左半屏及右半屏
 326   1      if(x<64){ // 判断选择左、右半屏
 327   2      LCM12864_CS1 = 0; // 选中左半屏
 328   2      }
 329   1      else{
 330   2      LCM12864_CS2 = 0; // 选中右半屏
 331   2      x = x-64;
 332   2      }
 333   1      LCM12864_WriteCMD(LCM12864_COL_START_ADDR+x); // 设置当前列地址,即x坐标
 334   1      LCM12864_WriteCMD(LCM12864_PAGE_START_ADDR+y); // 设置当前页地址,即y坐标
 335   1      LCM12864_data = LCM12864_ReadData(); // 向LCM12864写数据
 336   1      return LCM12864_data;
 337   1      }
 338          /********************************************************************************************
 339          //向LCM12864填充数据 LCM12864_Fill_Screen()
 340          //
 341          *********************************************************************************************/
 342          void LCM12864_Fill_Screen( unsigned char t, //设置涮屏速度(为1不涮屏,默认为60)
 343          unsigned char LCM12864_FillData){ //欲写入的数据
 344   1      unsigned char x,y;
 345   1      LCM12864_CS1 = 0;LCM12864_CS2 = 0; // 选中左半屏及右半屏
 346   1      LCM12864_WriteCMD(LCM12864_START_ROW+0); // 设置显示起始行为0
 347   1      for(x=0;x<8;x++){
 348   2      Delay(t); // 涮屏速度延时
 349   2      LCM12864_WriteCMD(LCM12864_PAGE_START_ADDR+x); // 设置页地址
 350   2      // // 设置列地址
 351   2      for(y=0;y<64;y++){
 352   3      LCM12864_WriteCMD(LCM12864_COL_START_ADDR+y); 
 353   3      LCM12864_WriteData(LCM12864_FillData);
 354   3      }
 355   2      }
 356   1      LCM12864_CS1 = 1; // 不选中右半屏
 357   1      LCM12864_CS2 = 1; // 不选中右半屏
 358   1      }
 359          /********************************************************************************************
 360          //LCM12864清屏 LCM12864_Clear_Screen()
 361          //
 362          *********************************************************************************************/
 363          void LCM12864_Clear_Screen(void){
 364   1      LCM12864_Fill_Screen(60,0x00); //写入0到每个显示区
 365   1      }
C51 COMPILER V7.50   LCD                                                                   08/25/2007 20:35:38 PAGE 7   

 366          /********************************************************************************************
 367          //LCM12864黑屏 LCM12864_Clear_black()
 368          //
 369          *********************************************************************************************/
 370          void LCM12864_Clear_black(void){
 371   1      LCM12864_Fill_Screen(0xff); //可写入其它数值以填满LCD屏
*** WARNING C209 IN LINE 371 OF LCD.C: '_LCM12864_Fill_Screen': too few actual parameters
 372   1      }
 373          /********************************************************************************************
 374          17/20
 375          PG12864LRS-JNN-H 技术手册(完整版)
 376          DoYoung.net 原创技术资料
 377          www.doyoung.net
 378          //显示128*64图片 LCM12864_Disp_Bitmap_12864()
 379          //
 380          *********************************************************************************************/
 381          void LCM12864_Disp_Bitmap_12864( unsigned char t, //设置涮屏速度(为1不涮屏,默认为60)
 382          unsigned char code *bitmap_12864){ //128*64点阵图像所在数组表
 383   1      unsigned char j,k;
 384   1      for(k=0;k<8;k++){ //设置8页的显示
 385   2      Delay(t);
 386   2      LCM12864_CS1 = 0;LCM12864_CS2 = 1; //半屏选中
 387   2      LCM12864_WriteCMD(LCM12864_PAGE_START_ADDR+k); //选中页
 388   2      //选中列
 389   2      for(j=0;j<64;j++){
 390   3      LCM12864_WriteCMD(LCM12864_COL_START_ADDR+j);
 391   3      LCM12864_WriteData(bitmap_12864[k*128+j]); //开始写入数据
 392   3      }
 393   2      LCM12864_CS1 = 1;LCM12864_CS2 = 0;
 394   2      LCM12864_WriteCMD(LCM12864_PAGE_START_ADDR+k);
 395   2      for(j=64;j<128;j++){
 396   3      LCM12864_WriteCMD(LCM12864_COL_START_ADDR+j);
 397   3      LCM12864_WriteData(bitmap_12864[k*128+j]);
 398   3      }
 399   2      }
 400   1      }
 401          /********************************************************************************************
 402          //在LCM12864的指定点显示16*16点阵汉字 LCM12864_Disp_Chinese_16_16()
 403          //
 404          *********************************************************************************************/
 405          void LCM12864_Disp_Char_x_16( unsigned char t, //设置书写速度(为1直接显示,默认为12)
 406          unsigned char b, //输入8:8*16字符,16:16*16字符
 407          unsigned char LCM12864_page, //LCM12864的页地址(0~7)
 408          unsigned char LCM12864_col, //LCM12864的列地址(0~128)注意:右半屏起始是64
 409          unsigned char code *Char_x_16){ //16*16点阵汉字字模(纵向取模,字节倒序)
 410   1      unsigned char j=0,i=0;
 411   1      if(LCM12864_col < 64 ){
 412   2      LCM12864_CS1 = 0; LCM12864_CS2 = 1; //判断屏幕使能
 413   2      }
 414   1      else{
 415   2      LCM12864_CS1 = 1; LCM12864_CS2 = 0;
 416   2      LCM12864_col = LCM12864_col - 64;
 417   2      }
 418   1      for(j=0;j<2;j++){
 419   2      LCM12864_WriteCMD(LCM12864_PAGE_START_ADDR+LCM12864_page+j);
 420   2      for(i=0;i<b;i++){
 421   3      LCM12864_WriteCMD(LCM12864_COL_START_ADDR+LCM12864_col+i);
 422   3      LCM12864_WriteData(Char_x_16[b*j+i]);
 423   3      Delay(t);
 424   3      }
 425   2      }
 426   1      }
C51 COMPILER V7.50   LCD                                                                   08/25/2007 20:35:38 PAGE 8   

 427          /********************************************************************************************
 428          //LCM12864初始化 LCM12864_Init()
 429          //
 430          *********************************************************************************************/
 431          void LCM12864_Init(void){
 432   1      LCM12864_RESET = 0; //复位
 433   1      Delay(300);
 434   1      LCM12864_RESET = 1;
 435   1      Delay(300);
 436   1      LCM12864_Clear_Screen(); //清除屏幕
 437   1      LCM12864_CS1 = 0; LCM12864_CS2 = 0; //选中双屏
 438   1      LCM12864_WriteCMD(LCM12864_DISP_OFF); //关显示
 439   1      LCM12864_WriteCMD(LCM12864_PAGE_START_ADDR+0); //第0页位置
 440   1      LCM12864_WriteCMD(LCM12864_START_ROW+0); //第0行
 441   1      LCM12864_WriteCMD(LCM12864_COL_START_ADDR+0); //第0列
 442   1      LCM12864_WriteCMD(LCM12864_DISP_ON); //开显示
 443   1      }
 444          /*********************************************************************************************/
 445          // 以上是 LCM12864液晶模块驱动程序
 446          /*********************************************************************************************/
 447          /********************************************************************************************
 448          //LCM12864液晶模块驱动演示 main()
 449          //
 450          *********************************************************************************************/
 451          void main (void){
 452   1      unsigned char lx = 32,i;
 453   1      LCM12864_Init(); // LCM12864初始化
 454   1      while(1){
 455   2      LCM12864_Disp_Bitmap_12864(60,doyleee); //显示LOGO图像
 456   2      Delay(1000); //延时1秒
 457   2      LCM12864_Clear_Screen(); //清除屏幕
 458   2      LCM12864_Disp_Char_x_16(12,16,1,46,feng); //显示“欢”,在第4页第46列
 459   2      Delay(1000);
 460   2      LCM12864_Disp_Char_x_16(12,16,1,66,yun); //显示“迎”,在第4页第66列
 461   2      Delay(1000);
 462   2      for(i=0;i<4;i++){ //显示字符串“Dy12864”
 463   3      LCM12864_Disp_Char_x_16(8,16,4,lx+16*i,nAsciiDot+32*i); //显示“Dy12864”,从第1页第32列
 464   3      Delay(1000);
 465   3      }
 466   2      }
 467   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    581    ----
   CONSTANT SIZE    =   1216    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       9
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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