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

📄 lcd1602.lst

📁 该程序是基于c8051f020的平台
💻 LST
字号:
C51 COMPILER V8.02   LCD1602                                                               09/13/2007 16:35:02 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE LCD1602
OBJECT MODULE PLACED IN Lcd1602.OBJ
COMPILER INVOKED BY: d:\Keil3\C51\BIN\C51.EXE Lcd1602.c BROWSE DEBUG OBJECTEXTEND

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      }
  55          
C51 COMPILER V8.02   LCD1602                                                               09/13/2007 16:35:02 PAGE 2   

  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      }
 116          
C51 COMPILER V8.02   LCD1602                                                               09/13/2007 16:35:02 PAGE 3   

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

 179             Lcd1602_Write_Command(0x80);//将数据指针设置到第一行的第一个字符。
 180          }
 181          
 182          
 183          //==================================================
 184          //清除指定的位置的字符,光标返回最左边第一个字符位置
 185          //==================================================
 186          void Lcd1602_Clear_Char(unsigned char row,unsigned char column)
 187          {
 188              Lcd1602_Write_String(row,column,"");
 189          }    */


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