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

📄 lcd-12864display.lst

📁 采用ks0108或者兼容芯片的128*64点阵液晶屏驱动程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 249   2      _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
 250   2      break; 
 251   2      case 1: cs1=0;//左屏
 252   2      _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); 
 253   2      cs2=1;
 254   2      _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
 255   2      break;
 256   2      case 2: cs1=1;//右屏
 257   2      _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); 
 258   2      cs2=0;
 259   2      _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); 
 260   2      break;
 261   2      }
 262   1      }
 263          /*---------------------------------------------------------------------------------------------------*/
 264          //清屏
 265          //screen: 0-全屏,1-左屏,2-右
 266          void ClearScreen(unsigned char screen)
 267          { unsigned char i,j;
 268   1      SelectScreen(screen);
 269   1      for(i=0;i<8;i++)
 270   1      { SetLine(i);
 271   2      for(j=0;j<64;j++)
 272   2      {
 273   3      WriteByte(0x00);
 274   3      }
 275   2      }
 276   1      }
 277          /*--------------------------------------------------------------------------------------------------*/
 278          //显示8*8点阵
 279          //旋转90度:字模被竖着切分
 280          //lin:行(0-7), column: 列(0-15)
 281          //address : 字模区首地址
 282          void Show88(unsigned char lin,unsigned char column,unsigned int address)
 283          { unsigned char i;
 284   1      if(column>16) {return;}
 285   1      if(column<8) SelectScreen(1); //如果列数<8(0,1,2,3,4,5,6,7)则写在第一屏上
 286   1      else {
 287   2      SelectScreen(2); //否则 (8,9,10,11,12,13,14,15)写在第二屏上
 288   2      column=column & 0x07; //防止越界
 289   2      }
 290   1      SetLine(lin);
 291   1      SetColumn(column<<3);
 292   1      for(i=0;i<8;i++) 
 293   1              WriteByte( CBYTE[address+i] );
 294   1      }
 295          /*------------------------------------------------------------------------------------------------*/
 296          //显示8*16字符
 297          //旋转90度:字模被竖着切分
C51 COMPILER V8.02   LCD_12864DISPLAY                                                      08/18/2007 09:39:18 PAGE 6   

 298          //lin:行(0-3), column: 列(0-15)
 299          //character:字符代码(标准ASCII码)
 300          void ShowChar(unsigned char lin,unsigned char column,unsigned char character)
 301          { lin=lin<<1;
 302   1      Show88(lin ,column,ASCII816[character-0x20] );
*** WARNING C214 IN LINE 302 OF LCD-12864DISPLAY.C: 'Argument': conversion: pointer to non-pointer
 303   1      Show88(lin+1,column,ASCII816[character-0x20]+8 );
*** WARNING C214 IN LINE 303 OF LCD-12864DISPLAY.C: 'Argument': conversion: pointer to non-pointer
 304   1      }
 305          /*-----------------------------------------------------------------------------------------------*/
 306          /*
 307          //显示8*16字符串
 308          //!!!只能显示在一行上即: 串长+column <=15
 309          //旋转90度:字模被竖着切分
 310          //lin:行(0-3), column: 列(0-15)
 311          //address : 字模区首地址
 312          void ShowString(unsigned char lin,unsigned char column, unsigned char *string)
 313          { unsigned char ch;
 314          unsigned char i=0;
 315          
 316          while(*string!='\0')
 317          {
 318          ch=*string;
 319          if(i+column >15) break; //(只能显示在一行上即: 串长+column <=15)
 320          ShowChar(lin,i+column,ch);
 321          string++; i++;
 322          }
 323          }
 324          */
 325          /*----------------------------------------------------------------------------------------------*/
 326          //显示一个汉字
 327          //旋转90度:字模被竖着切分
 328          //lin:行(0-3), column: 列(0-7)
 329          //hzcode: 汉字代码(自定义的)
 330          //uchar code HZtable
 331          void ShowHZ(unsigned char lin,unsigned char column,unsigned int hzcode)
 332          {
 333   1      lin=lin<<1; //lin*2
 334   1      
 335   1      Show88(lin,column,HZTable[hzcode]);
*** WARNING C214 IN LINE 335 OF LCD-12864DISPLAY.C: 'Argument': conversion: pointer to non-pointer
 336   1      Show88(lin,column+1,HZTable[hzcode]+8);
*** WARNING C214 IN LINE 336 OF LCD-12864DISPLAY.C: 'Argument': conversion: pointer to non-pointer
 337   1      Show88(lin+1,column,HZTable[hzcode]+16);
*** WARNING C214 IN LINE 337 OF LCD-12864DISPLAY.C: 'Argument': conversion: pointer to non-pointer
 338   1      Show88(lin+1,column+1,HZTable[hzcode]+24);
*** WARNING C214 IN LINE 338 OF LCD-12864DISPLAY.C: 'Argument': conversion: pointer to non-pointer
 339   1      }
 340          /*----------------------------------------------------------------------------------------------*/
 341          //显示图片
 342          //旋转90度 :字模被竖着切分
 343          //startline :开始行
 344          //startcolumn:开始列
 345          //linechar :图片行点除8(图片以8*8点阵为单位)
 346          //columnchar :图片列点除8(图片以8*8点阵为单位)
 347          //address : 字模区首地址
 348          void ShowPicture(unsigned char startline,unsigned char startcolumn,unsigned char linechar,unsigned char co
             -lumnchar,unsigned int address)
 349          { unsigned char i,j;
 350   1      for(i=0;i<columnchar;i++)
 351   1      for(j=0;j<linechar;j++)
 352   1      Show88(startline+i , startcolumn+j , address+(i*linechar+j)*8 );
C51 COMPILER V8.02   LCD_12864DISPLAY                                                      08/18/2007 09:39:18 PAGE 7   

 353   1      }
 354          /*----------------------------------------------------------------------------------------------*/
 355          //显示一行字符串(汉字,字母混排,一行16字节)
 356          //lin:行
 357          //lineheadaddr: 此行汉字代码区首地址
 358          void ShowLine(unsigned char lin,unsigned char linehead[])
 359          { unsigned char i;
*** WARNING C235 IN LINE 359 OF LCD-12864DISPLAY.C: parameter 2: different types
 360   1      unsigned char byte;
 361   1      unsigned int hzcode;
 362   1      for( i=0; i<16; )
 363   1      { byte=linehead[i];
 364   2      if(byte < 0x80) //字母
 365   2      {
 366   3      if(i>15) return; //!!编译器有问题,须强制退出
 367   3      
 368   3      ShowChar(lin, i , byte);
 369   3      i=i+1;
 370   3      
 371   3      }
 372   2      else // byte >= 0x80(汉字)
 373   2      {
 374   3      if(i>15) return; //!!编译器有问题,须强制退出
 375   3      
 376   3      byte=byte & 0x7f; //最高位置0,即:减去0x8000
 377   3      hzcode=(unsigned int)byte<<8; //?? //高8位
 378   3      hzcode=hzcode+linehead[i+1]; //加低8位,组合成整型数地址
 379   3      ShowHZ( lin,i,hzcode);
 380   3      i=i+2;
 381   3      }
 382   2      }
 383   1      }
 384          /*----------------------------------------------------------------------------------------------------*/
 385          //显示一屏汉字
 386          //pageheadaddr:此屏汉字代码地址区首地址
 387          void ShowPage(unsigned char pagehead[][16])
 388          { unsigned char i;
*** WARNING C235 IN LINE 388 OF LCD-12864DISPLAY.C: parameter 1: different types
 389   1      for(i=0;i<4;i++) ShowLine(i,pagehead[i]); //1行8个汉字,16字节
 390   1      }
 391          /*----------------------------------------------------------------------------------------------------*/
 392          //读显示数据
 393          unsigned char ReadByte()
 394          {
 395   1      unsigned char dat;
 396   1      //CheckState();
 397   1      di=1; rw=1;
 398   1      LCD12864DataPort=0xff;
 399   1      en=1; dat=LCD12864DataPort; en=0;
 400   1      return(dat);
 401   1      }
 402          
 403          /*----------------------------------------------------------------------------------------------------*/
 404          //反显一个8*8字块
 405          //lin:行(0-3), column: 列(0-7)
 406          void ReverseShow88(unsigned char lin,unsigned char column)
 407          { unsigned char i;
 408   1      unsigned char tab[8];
 409   1      
 410   1      if(column<8) SelectScreen(1); //如果列数<4(0,1,2,3),则写在第一屏上
 411   1      else SelectScreen(2); //否则 (4,5,6,7), 写在第二屏上
 412   1      //读上部8列
C51 COMPILER V8.02   LCD_12864DISPLAY                                                      08/18/2007 09:39:18 PAGE 8   

 413   1      column=column<<3; //每个方块8*8大小
 414   1      SetLine(lin);
 415   1      SetColumn(column);
 416   1      tab[0]=ReadByte(); //空读!!!!! //?
 417   1      for(i=0;i<8;i++) tab[i]=~ReadByte();
 418   1      //写回
 419   1      SetLine(lin);
 420   1      SetColumn(column);
 421   1      for(i=0;i<8;i++) WriteByte(tab[i]);
 422   1      }
 423          /*----------------------------------------------------------------------------------------------------*/
 424          /*----------------------------------------------------------------------------------------------------*/
 425          //反显一个字符
 426          //lin:行(0-4), column: 列(0-15)
 427          void ReverseShowChar(unsigned char lin,unsigned char column)
 428          { lin=lin<<1;
 429   1      ReverseShow88(lin ,column);
 430   1      ReverseShow88(lin+1,column);
 431   1      }
 432          /*----------------------------------------------------------------------------------------------------*/
 433          //反显一个汉字
 434          //lin:行(0-3), column: 列(0-7)
 435          ReverseShowHZ(unsigned char lin,unsigned char column)
 436          {
 437   1      lin=lin<<1;
 438   1      column=column<<1;
 439   1      ReverseShow88(lin ,column );
 440   1      ReverseShow88(lin ,column+1);
 441   1      ReverseShow88(lin+1,column );
 442   1      ReverseShow88(lin+1,column+1);
 443   1      }
 444          /*----------------------------------------------------------------------------------------------------*/
 445          //反显一行汉字
 446          //lin:行
 447          ReverseShow(unsigned char lin)
 448          { unsigned char i;
 449   1      for(i=0;i<8;i++) ReverseShowHZ(lin,i);
 450   1      }
 451          /*----------------------------------------------------------------------------------------------------*/
 452          void InitLCD() //初始化LCD
 453          { 
 454   1      unsigned char i=250; //延时
 455   1      while(i--);
 456   1      //reset=0;//复位
 457   1      //reset=1;
 458   1      Reset();
 459   1      Lcd12864delay();
 460   1      SelectScreen(0);
 461   1      SetOnOff(0); //关显示
 462   1      ClearScreen(1);//清屏
 463   1      ClearScreen(2);
 464   1      SelectScreen(0);
 465   1      SetOnOff(1); //开显示
 466   1      SelectScreen(0);
 467   1      SetStartLine(0); //开始行:0
 468   1      }
 469          /*----------------------------------------------------------------------------------------------------*/
 470          
 471          void Reset() //液晶复位
 472          {
 473   1      //reset 低复位 _|-低电平复位
 474   1      reset=0;
C51 COMPILER V8.02   LCD_12864DISPLAY                                                      08/18/2007 09:39:18 PAGE 9   

 475   1      _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
 476   1      reset=1;
 477   1      
 478   1      //全屏
 479   1      cs1=1;
 480   1      _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
 481   1      cs2=1; 
 482   1      _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
 483   1      SendCommandToLCD(0x3F);
 484   1      }
 485          
 486          /*----------------------------------------------------------------------------------------------------*/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1081    ----
   CONSTANT SIZE    =   3792    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      38
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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