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

📄 main_lcd.lst

📁 KEIL C51程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 170   2         break;
 171   2      
 172   2       case 1:               //写右指令
 173   2           CheckState();
 174   2           add_iw_r=command;
 175   2         break;
 176   2       
 177   2       case 2:               //写左右指令
 178   2           CheckState();
 179   2           add_iw_lr=command;
C51 COMPILER V8.02   MAIN_LCD                                                              03/25/2006 14:31:32 PAGE 4   

 180   2         break;
 181   2      }
 182   1      }
 183          /*----------------------------------------------------------------------------------------------------*/
 184          //设定行地址(页)--X 0-7
 185          void SetLine(uchar line)
 186          {
 187   1      line=line & 0x07; // 0<=line<=7                 //防止越界
 188   1      line=line|0xb8; //1011 1xxx                     //通过和b8h或得到指令包含页地址的指令码
 189   1      SendCommandToLCD(line,s_c);                 //??需要设置屏幕位置(左右?)
 190   1      }
 191          /*----------------------------------------------------------------------------------------------------*/
 192          //设定列地址--Y 0-63
 193          void SetColumn(uchar column)
 194          {
 195   1      column=column &0x3f; // 0=<column<=63        //防止越界
 196   1      column=column | 0x40; //01xx xxxx            //通过和40h或得到指令包含列地址的指令码
 197   1      SendCommandToLCD(column,s_c);                //??需要设置屏幕位置(左右?)
 198   1      }
 199          /*----------------------------------------------------------------------------------------------------*/
 200          //设定显示开始行--XX
 201          void SetStartLine(uchar startline)  //0--63
 202          {
 203   1      startline=startline & 0x3f;  //防止越界,  原来的--startline=startline & 0x07,只能达到7行,有误
 204   1      startline=startline|0xc0; //1100 0000         //通过和c0h或得到指令包含开始行地址的指令码
 205   1      SendCommandToLCD(startline,s_c);              //??需要设置屏幕位置(左右?)
 206   1      }
 207          /*----------------------------------------------------------------------------------------------------*/
 208          //开关显示
 209          void SetOnOff(uchar onoff)
 210          {
 211   1      onoff=0x3e | onoff; //0011 111x
 212   1      SendCommandToLCD(onoff,s_c);                  //??需要设置屏幕位置(左右?) 
 213   1      }
 214          /*---------------------------------------------------------------------------------------------------*/
 215          //选择屏幕
 216          //screen: 0-左,1-右,2-全屏
 217          void SelectScreen(uchar screen)
 218          { //深圳RT12864:正有效 cs0: 1--左; cs1: 1--右;case2:1--全屏
 219   1      switch(screen)
 220   1      { 
 221   2      case 0:        //左屏
 222   2        s_c=0;
 223   2        break;    
 224   2      case 1:        //右屏      
 225   2        s_c=1;
 226   2        break;
 227   2      case 2:        //全屏
 228   2        s_c=2;
 229   2        break;
 230   2      }
 231   1      }
 232          /*---------------------------------------------------------------------------------------------------*/
 233          //清屏
 234          //screen: 0-左,1-右,2-全屏
 235          void ClearScreen(uchar screen)
 236          { unsigned char i,j;
 237   1      SelectScreen(screen);
 238   1      
 239   1      for(i=0;i<8;i++)
 240   1      { SetLine(i);
 241   2      for(j=0;j<64;j++)
C51 COMPILER V8.02   MAIN_LCD                                                              03/25/2006 14:31:32 PAGE 5   

 242   2      {
 243   3      WriteByte(0x00,s_c);
 244   3      }
 245   2      }
 246   1      }
 247          /*-------------------------------------------------------------------------------------------------*/
 248          void Reset() //液晶复位
 249          {
 250   1      //reset 低复位
 251   1      lcdreset=0;
 252   1      /*_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();*/
 253   1      Lcd12864delay(1000);
 254   1      lcdreset=1;
 255   1      
 256   1      SelectScreen(2);      //选择全屏,关显示
 257   1      SendCommandToLCD(0x3e,s_c);     
 258   1      
 259   1      }
 260          
 261          
 262          /*--------------------------------------------------------------------------------------------------*/
 263          //显示8*6点阵
 264          //旋转90度:字模被竖着切分
 265          //lin:行(0-7), column: 列(0-20)
 266          //address : 字模区首地址
 267          void Show86(uchar lin,uchar column,uint address)
 268          {
 269   1               unsigned char i;
 270   1              if(column>20) {return;}
 271   1                if(column<10){ SelectScreen(1);}       //如果列数<8(0,1,2,3,4,5,6,7,8,9)则写在第一屏上
 272   1                else  {SelectScreen(2);}               //否则 (10,11,12,13,14,15,16,17,18,19)写在第二屏上
 273   1              column=column & 0x0f;                    //防止越界
 274   1              SetLine(lin);
 275   1              SetColumn(column=column*6+4);            //相当于×6+4,得到真实的列地址,即前后4列空
 276   1              for(i=0;i<6;i++)                         //显示8列,即一个8×8点阵 
 277   1              WriteByte( CBYTE[address+i],s_c );       //需要建立CBYTR表格????????
 278   1      }
 279          
 280          /*--------------------------------------------------------------------------------------------------*/
 281          //显示8*8点阵
 282          //旋转90度:字模被竖着切分
 283          //lin:行(0-7), column: 列(0-15)
 284          //address : 字模区首地址
 285          void Show88(uchar lin,uchar column,uint address)
 286          {
 287   1              unsigned char i;
 288   1              if(column>16) {return;}
 289   1              if(column<8)
 290   1                   { 
 291   2                              SelectScreen(1);          //如果列数<8(0,1,2,3,4,5,6,7)则写在第一屏上
 292   2                      column=column & 0x07;      //防止越界 
 293   2                       }       
 294   1               else {
 295   2                      SelectScreen(2);          //否则 (8,9,10,11,12,13,14,15)写在第二屏上
 296   2                      column=column & 0x0f;    //防止越界
 297   2                      }
 298   1              SetLine(lin);
 299   1              SetColumn(column<<3);                    //左移3位,相当于×8,得到真实的列地址
 300   1              for(i=0;i<8;i++)                         //显示8列,即一个8×8点阵 
 301   1              WriteByte( CBYTE[address+i],s_c );       //需要建立CBYTR表格????????
 302   1      }
 303          
C51 COMPILER V8.02   MAIN_LCD                                                              03/25/2006 14:31:32 PAGE 6   

 304          /*----------------------------------------------------------------------------------------------*/
 305          void InitLCD() //初始化LCD
 306          { 
 307   1              Reset();       //复位,关显示
 308   1              
 309   1              ClearScreen(2);  //清全屏
 310   1              
 311   1              SelectScreen(2);
 312   1              SetOnOff(1);     //开显示
 313   1              SelectScreen(2); //选择全屏
 314   1              SetStartLine(0); //开始行:0
 315   1      }
 316          /*----------------------------------------------------------------------------------------------------*/
 317          void main(void)
 318          {
 319   1              InitLCD();    //初始化LCD
 320   1              while(1)
 321   1              {
 322   2                      SelectScreen(2); //选择全屏
 323   2                      SetStartLine(5); //开始行:0
 324   2                      Show88(1,2,ascii+22);
*** WARNING C214 IN LINE 324 OF MAIN_LCD.C: 'Argument': conversion: pointer to non-pointer
 325   2                      Show88(1,3,ascii+30);
*** WARNING C214 IN LINE 325 OF MAIN_LCD.C: 'Argument': conversion: pointer to non-pointer
 326   2              }
 327   1      }
 328          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    464    ----
   CONSTANT SIZE    =    724    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1       4
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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