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

📄 lcd16b20.lst

📁 12887+1602drive goode luck!!
💻 LST
📖 第 1 页 / 共 2 页
字号:
               d=DATA & 0xf;
               d=d<<4;
               d=d & 0xf0;
               LCD_Data_Port=LCD_Data_Port | d;
               NOP();
               LCD_EN=1;
               NOP();
               LCD_EN=0;
              #endif
 298   1      }
 299          #endif
 300          
 301          
 302          /*************************************************
 303          *  函数说明:MCU向LCD16B20读取数据               *
C51 COMPILER V6.23a  LCD16B20                                                              10/16/2008 12:20:45 PAGE 6   

 304          *  输出参数: unsigned char DATA                  *
 305          **************************************************/
 306          #if LCD_EN_readData
              unsigned char LCDreadData(void)
              {
               unsigned char redata;
              #if LCD_DL<8
               unsigned char temp;
              #endif
              
               LCDwaitForReady();
               LCD_RS=1;//选择数据寄存器
               NOP();
               LCD_RW=1;//读取数据寄存器
               NOP();
              #if LCD_DL>4
               LCD_Data_Port=0xff;
               LCD_EN=1;
               NOP();
               redata=LCD_Data_Port;
               LCD_EN=0;
              #elif
               LCD_Data_Port=LCD_Data_Port | 0xf0;
               LCD_EN=1;
               NOP();
               redata=LCD_Data_Port;
               LCD_EN=0;
               redata=redata & 0xf0;
               NOP();
              
               LCD_EN=1;
               NOP();
               temp=LCD_Data_Port;
               LCD_EN=0;
               temp=temp >>4;
               temp=temp & 0xf;
               redata=redata | temp;
              #endif
               return (redata);
              }
              #endif
 345          
 346          
 347          /**************************************
 348          *  函数说明:背光灯控制               *
 349          *  输入参数: bit onoff                *
 350          ***************************************/
 351          #if LCD_EN_light
 352          void LCDlight(bit onoff)
 353          {
 354   1       LCD_LED=onoff;
 355   1      }
 356          #endif
 357          
 358          
 359          /***********************************************
 360          *  函数说明:设置显示坐标函数                  *
 361          ************************************************/
 362          //控制器内部带有80个*8位RAM(即80字节RAM),对于关系:
 363          //第一行:00,01,02,03,04,05,06,07,08,09,0A,0B,0C,0D,0E,0F,10......27(40个)
 364          //第二行:40,41,42,43,44,45,46,47,48,49,4A,4B,4C,4D,4E,4F,50......67(40个)
 365          //第一行首个地址为:0x80+00;
C51 COMPILER V6.23a  LCD16B20                                                              10/16/2008 12:20:45 PAGE 7   

 366          //第二行首个地址为:0x80+0x0x40+00,即:0xc0+00
 367          #if LCD_EN_setXY
 368          void LCDsetXY(unsigned char X,unsigned char Y)
 369          {
 370   1          unsigned char Address;
 371   1          if(X>39)
 372   1            X=39;
 373   1          if (Y == 0)
 374   1              {
 375   2                  Address = 0x80 + X;
 376   2              }
 377   1          else
 378   1              { 
 379   2              Address = 0xc0 + X;
 380   2              }       
 381   1          LCDSendCommand(Address);
 382   1      }
 383          #endif
 384          
 385          
 386          /********************************************************
 387          *  函数说明:LCD字符串显示函数                          *
 388          ********************************************************/
 389          #if LCD_EN_displayStr
              void LCDdisplayStr(char *String)
              {
               while(*String)
               {
                LCDwriteData(*String);
                String++;
               }
              }
              #endif
 399          
 400          
 401          /********************************************************
 402          *  函数说明:指定XY坐标显示一个字符                     *
 403          *  输入参数:unsigned char X:   X坐标                                   *
 404          *            unsigned cahr Y:   Y坐标                                   *
 405          *            char          ch:  被显示的字符                    *
 406          ********************************************************/
 407          #if LCD_EN_putChar
 408          void LCDputChar(unsigned char X,unsigned char Y,char ch)
 409          {
 410   1       LCDsetXY(X,Y);
 411   1       LCDwriteData((unsigned char)ch);
 412   1      }
 413          #endif
 414          
 415          
 416          
 417          /************************************************************
 418          * 从指定位置开始显示字符串,如果是从第一行开始显示的,但是
 419          * 无法显示完,自动从第二行开始显示,如果还没有显示完,就将余下的
 420          *抛弃;如果是从第二行开始显示的,但是无法显示完,
 421          *就抛弃没有显示的内容.
 422          **************************************************************/
 423          #if LCD_EN_printf
 424          void LCDprintf(unsigned char X,unsigned char Y,char *String)
 425          {
 426   1       if(Y==0)
 427   1        {
C51 COMPILER V6.23a  LCD16B20                                                              10/16/2008 12:20:45 PAGE 8   

 428   2          if(X<16)
 429   2           {
 430   3             LCDsetXY(X,Y);
 431   3             for(;X<16 && *String!='\0';X++)
 432   3              {
 433   4                LCDwriteData((unsigned char)*String);
 434   4                String++;
 435   4              }
 436   3             if(*String!='\0')
 437   3              {
 438   4                X=0;
 439   4                Y=1;
 440   4              }
 441   3           }
 442   2        }
 443   1       if(Y==1)
 444   1        {
 445   2         LCDsetXY(X,Y);
 446   2         for(;X<16 && *String!='\0';X++)
 447   2          {
 448   3           LCDwriteData((unsigned char)*String);
 449   3           String++;
 450   3          }    
 451   2        } 
 452   1      }
 453          #endif
 454          
 455          
 456          /*************************************************
 457          *  函数说明:清除指定的一行显示,然后光标回到行首 *
 458          *  输入参数:bit line: 如果line=0,表示是第一行   *
 459          *                      如果line=1,表示是第二行   *
 460          **************************************************/
 461          #if LCD_EN_clearLine
              void LCDclearLine(bit line)
              {
               unsigned char i;
               if(line) //第二行
                LCDsetXY(0,1);
               else     //第一行
                LCDsetXY(0,0);  
               for(i=0;i<16;i++)
                LCDwriteData(' '); //向LCD写入16个空格
               if(line) //回到第二行的第一个位置
                LCDsetXY(0,1);
               else     //回到第一行的第一个位置
                LCDsetXY(0,0);  
              }
              #endif
 477          //--------------------------------------------------
 478          //延时nms函数
 479          #if LCD_EN_delaynms
 480          void delaynms(unsigned char n)
 481          {
 482   1        unsigned char i,j,k;
 483   1        i=1;
 484   1      #if Fosc>6
 485   1        i=2;
 486   1      #endif
 487   1      
 488   1        for(;i>0;i--)
 489   1         {
C51 COMPILER V6.23a  LCD16B20                                                              10/16/2008 12:20:45 PAGE 9   

 490   2           for(j=0;j<n;j++)
 491   2            {
 492   3              for(k=0;k<166;k++);
 493   3              for(k=0;k<166;k++);
 494   3            }
 495   2         }
 496   1      }
 497          #endif
 498          
 499          
 500          /********************************************
 501          *  函数说明:LCD复位                        *
 502          *********************************************/
 503          /*
 504          1.延时15ms
 505          2.写入指令:0x38(不检测忙信号)
 506          3.延时5ms
 507          4.写入指令:0x38(不检测忙信号)
 508          5.延时5ms
 509          6.写入指令:0x38(不检测忙信号)
 510          以后读写都要检测忙信号
 511          7.如果定义8位数据接口设置8位数据线,两行显示,字体格式:5*8
 512          (7).如果定义是4为数据接口设置8位数据线,两行显示,字体格式:5*8
 513          8.设置显示画面、光标、光标是否闪烁开关
 514          9.设置输入模式,默认增量方式,画面不动,光标移动
 515          10.清屏
 516          */
 517          #if LCD_EN_reset
 518          void LCDreset(void)
 519          {
 520   1       delaynms(15); //延时15ms
 521   1       LCD_RS=0;//选择指令寄存器
 522   1       NOP();
 523   1       LCD_RW=0;//MCU向LCD写入命令数据
 524   1       NOP();
 525   1      #if LCD_DL>4
 526   1       LCD_Data_Port=0x38;
 527   1       NOP();
 528   1       LCD_EN=1; 
 529   1       NOP();
 530   1       LCD_EN=0;
 531   1       delaynms(5);
 532   1      
 533   1       LCD_EN=1; 
 534   1       NOP();
 535   1       LCD_EN=0;
 536   1       delaynms(5);
 537   1      
 538   1       LCD_EN=1; 
 539   1       NOP();
 540   1       LCD_EN=0;
 541   1       delaynms(5);
 542   1       LCDsetFunction(1,1,1); //设置8位数据线,两行显示,字体格式:5*8
 543   1      #elif
               LCD_Data_Port=LCD_Data_Port & 0x3f;
               LCD_Data_Port=LCD_Data_Port | 0x30;
               NOP();
               LCD_EN=1; 
               NOP();
               LCD_EN=0;
               delaynms(5);
              
C51 COMPILER V6.23a  LCD16B20                                                              10/16/2008 12:20:45 PAGE 10  

               LCD_EN=1; 
               NOP();
               LCD_EN=0;
               delaynms(5);
              
               LCD_EN=1; 
               NOP();
               LCD_EN=0;
               delaynms(5);
               LCDsetFunction(0,1,1); //设置4位数据线,两行显示,字体格式:5*7
              #endif
 563   1              
 564   1       LCDsetDisplayModel(1,1,1);//设置显示画面、光标、光标是否闪烁开
 565   1       LCDsetInputModel(1,0);//设置输入模式,默认增量方式,画面不动,光标向右边移动
 566   1       LCDclear();
 567   1      }
 568          #endif


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


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

⌨️ 快捷键说明

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