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

📄 lcd1602.lst

📁 成功的将UCOS操作系统
💻 LST
字号:
C51 COMPILER V8.02   LCD1602                                                               08/05/2007 21:31:20 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE LCD1602
OBJECT MODULE PLACED IN .\Out File\Lcd1602.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Lcd1602.c LARGE BROWSE ORDER NOAREGS DEBUG OBJECTEXTEND PRINT(.\Out File\Lc
                    -d1602.lst) TABS(6) OBJECT(.\Out File\Lcd1602.obj)

line level    source

   1          #define  Lcd1602
   2          #include <Lcd1602.h>
   3          
   4          void Lcd1602_Ini(void)
   5          { 
   6   1         
   7   1         Lcd1602_Write_Command(0x38);
   8   1         Lcd1602_Write_Command(0x0f);//开显示,不显示光标
   9   1         Lcd1602_Write_Command(0x01);//显示清屏。
  10   1         Lcd1602_Write_Command(0x06);//显示光标自动右移,整屏不移动。
  11   1         Lcd1602_Write_Command(0x80);//将数据指针设置到第一行的第一个字符。
  12   1         Lcd1602_Write_Command(0x02);
  13   1         Lcd1602_Write_Command(0x0f);//开显示,不显示光标
  14   1         Lcd1602_Write_Command(0x80);
  15   1      }    
  16          
  17          //===========================
  18          //LCD状态检测                  该函数有改动?????
  19          //===========================
  20          void Lcd1602_Check_Busy(void)
  21          {
  22   1          unsigned char bf,temp;
  23   1      
  24   1          Contro_Port=0x02;                       //RS=0,RW=1
  25   1          delay(1,10);
  26   1      
  27   1          temp=Data_Port;                       // 是否要打开LCD使能信号E????
  28   1          bf = temp&0x80 ;               //筛选最高位的标志位
  29   1      
  30   1          while(bf==1);
  31   1      }
  32          
  33          
  34          //*********************************************
  35          //以下几个函数为支持LCD数据传送和控制的底层函数
  36          //*********************************************
  37          
  38          //===========================
  39          //写一个命令字节
  40          //===========================
  41          void Lcd1602_Write_Command(unsigned char Command_Code) reentrant  //  为了解决可重入函数,需加上reentrant
  42          {
  43   1      
  44   1          Lcd1602_Check_Busy();
  45   1      
  46   1          Contro_Port=0x00;                       //RS=0,RW=0
  47   1          Data_Port=Command_Code;
  48   1      
  49   1          delay(10,10);
  50   1          Contro_Port |=0x04;                    //EN=1   把Contro_Port.2 置1
  51   1          delay(10,10);                 // 延时产生一个脉冲
  52   1          Contro_Port &=~0x04;                  //EN=0    把Contro_Port.2 置0
  53   1          Contro_Port =0xef;
  54   1      }
C51 COMPILER V8.02   LCD1602                                                               08/05/2007 21:31:20 PAGE 2   

  55          
  56          
  57          //===========================
  58          //写一个字节数据                  该函数中 Contro_Port |=0x04; 有改动?????
  59          //===========================
  60          void Lcd1602_Write_Data(unsigned char Data) 
  61          {
  62   1      
  63   1          Lcd1602_Check_Busy();
  64   1      
  65   1          Contro_Port=0x01;                     //RS=1,RW=0
  66   1          Data_Port=Data;
  67   1              
  68   1          delay(10,10);
  69   1          Contro_Port |=0x04;                    //EN=1   把Contro_Port.2 置1
  70   1          delay(10,10);                 // 延时产生一个脉冲
  71   1          Contro_Port &=~0x04;                  //EN=0    把Contro_Port.2 置0
  72   1          Contro_Port =0xef;
  73   1      }
  74          
  75          
  76          
  77          //===========================================
  78          //写字符串到LCD,如果一行写不下,则写到下一行,
  79          //如果一屏写不下,则只写一屏
  80          //row的值从1-2,column的值从1-16,不进行值的
  81          //有效性检查,有调用者自己保证
  82          //===========================================
  83          
  84          void Lcd1602_Write_String(unsigned char row_str,unsigned char column_str,unsigned char *dis_buffer)  reent
             -rant
  85          {   
  86   1          unsigned char i=0;
  87   1          row=row_str; column=column_str;
  88   1      
  89   1              switch(row)//这种结构保持以后升级到多行显示液晶
  90   1              {
  91   2                  case 1:Lcd1602_Write_Command(0x80+column-1);break;      //将数据地址指针定位到第一行
  92   2                  case 2:Lcd1602_Write_Command(0x80+0x40+column-1);break; //将数据地址指针定位到第二行
  93   2                  default: break;
  94   2              }
  95   1          while(dis_buffer[i]!='\0')
  96   1              {
  97   2                  Lcd1602_Write_Data(dis_buffer[i]);
  98   2                  i++;
  99   2                  if(++column==17)
 100   2                  {                
 101   3                      column=1;
 102   3                      if(++row==3)
 103   3                       return;
 104   3                      else
 105   3                      {
 106   4                    switch(row)//这种结构保持以后升级到多行显示液晶
 107   4                        {
 108   5                          case 1:Lcd1602_Write_Command(0x80);break;
 109   5                          case 2:Lcd1602_Write_Command(0x80+0x40);break;//重新调整数据地址指针
 110   5                          default:break;
 111   5                        }
 112   4                      }
 113   3                  }
 114   2              } 
 115   1      }
C51 COMPILER V8.02   LCD1602                                                               08/05/2007 21:31:20 PAGE 3   

 116          
 117          
 118          
 119          
 120          
 121          
 122          
 123          
 124          
 125          void Lcd1602_Write_char(unsigned char i)
 126          {
 127   1         
 128   1        if(i==0)return;
 129   1        switch(row)                                            //这种结构保持以后升级到多行显示液晶
 130   1            {
 131   2             case 1:Lcd1602_Write_Command(0x80+column-1);break;      //将数据地址指针定位到第一行
 132   2             case 2:Lcd1602_Write_Command(0x80+0x40+column-1);break; //将数据地址指针定位到第二行
 133   2             default:break;
 134   2            }
 135   1      
 136   1        Lcd1602_Write_Data(i);
 137   1      
 138   1        if(++column==17)
 139   1         {            
 140   2          column=1;
 141   2          if(++row==3)
 142   2          row=1;
 143   2        }
 144   1      }
 145          
 146          
 147          
 148          
 149          void delay(uchar t1,t2)
 150          { 
 151   1        uchar i,j;
 152   1        for(i=0;i<t1;i++)
 153   1          for(j=0;j<t2;j++);
 154   1      
 155   1          }
 156          
 157          //==========================================
 158          //清除指定的行,光标返回最左边第一个字符位置
 159          //==========================================
 160          void Lcd1602_Clear_Line(unsigned char line)
 161          {
 162   1          Lcd1602_Write_String(line,1,"                ");
 163   1      
 164   1          switch(line)// 将数据地址指针返回到起始位置    这种结构保持以后升级到多行显示液晶
 165   1              {
 166   2          case 1:Lcd1602_Write_Command(0x80);break;       //将数据地址指针定位到第一行
 167   2          case 2:Lcd1602_Write_Command(0x80+0x40);break;  //将数据地址指针定位到第二行
 168   2          default: break;
 169   2              }    
 170   1      }   
 171          /*
 172          void Dis_decode_data(uint decode_data )
 173          {      
 174                 uchar k[5],i;
 175          
 176                   k[0]=(uchar)(decode_data/10000);
 177                   k[1]=(uchar)((decode_data-k[0]*10000)/1000);
C51 COMPILER V8.02   LCD1602                                                               08/05/2007 21:31:20 PAGE 4   

 178                   k[2]=(uchar)((decode_data-k[0]*10000-k[1]*1000)/100);
 179                   k[3]=(uchar)((decode_data-k[0]*10000-k[1]*1000-k[2]*100)/10);
 180                   k[4]=(uchar)((decode_data-k[0]*10000-k[1]*1000-k[2]*100)-k[3]*10/1);
 181          
 182                 for(i=0;i<5;i++)
 183                    { Lcd1602_Write_char(k[i]+'0');} 
 184          }    */
 185          
 186          /*
 187          void Lcd1602_Clear_All(void)
 188          {
 189             Lcd1602_Write_Command(0x01);//显示清屏。
 190             Lcd1602_Write_Command(0x80);//将数据指针设置到第一行的第一个字符。
 191          }
 192          
 193          
 194          //==================================================
 195          //清除指定的位置的字符,光标返回最左边第一个字符位置
 196          //==================================================
 197          void Lcd1602_Clear_Char(unsigned char row,unsigned char column)
 198          {
 199              Lcd1602_Write_String(row,column,"");
 200          }    */


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    460    ----
   CONSTANT SIZE    =     17    ----
   XDATA SIZE       =      2       3
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   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 + -