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

📄 lcd1602driver.lst

📁 1602液晶显示驱动程序,包括反显,各种自定义字符显示
💻 LST
字号:
C51 COMPILER V7.06   LCD1602DRIVER                                                         01/25/2008 16:03:52 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE LCD1602DRIVER
OBJECT MODULE PLACED IN LCD1602DRIVER.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE LCD1602DRIVER.C BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include"LCD1602DRIVER.H"
   2          #include"reg52.h"
   3          #include"intrins.h"
   4          #include"string.h"
   5          #include"key.h"
   6          //================================================================================
   7          //函数名称:LCD1602_Write(uchar Comment,uchar Modle_Choose)写命令
   8          //函数功能:向LCD1602写命令
   9          //================================================================================
  10          void LCD1602_Write(uchar Comment,bit Modle_Choose)
  11          {
  12   1      
  13   1              LCD_E = 0;
  14   1              LCD_RS=Modle_Choose;
  15   1              LCD_RW = 0;
  16   1              _nop_();
  17   1              Data_Port = Comment;
  18   1              _nop_();
  19   1              _nop_();
  20   1              LCD_E = 1;
  21   1              LCD_E = 0;
  22   1              _nop_();
  23   1              Test_Busy();
  24   1      }
  25          //================================================================================
  26          //函数名称:LCD1602_Read(uchar Modle_Choose)读命令
  27          //函数功能:读LCD1602端口数据
  28          //================================================================================
  29          uchar LCD1602_Read(uchar Modle_Choose)
  30          {
  31   1              uchar Data_Return;
  32   1              if(Modle_Choose&0x01)
  33   1              LCD_RS=1;
  34   1              else
  35   1              LCD_RS=0;
  36   1              LCD_RW = 1;
  37   1              LCD_E = 0;
  38   1              _nop_();
  39   1              LCD_E = 1;
  40   1              _nop_();
  41   1              _nop_();
  42   1              Data_Return = Data_Port ;
  43   1              _nop_();
  44   1              LCD_E=0;
  45   1              LCD_RW = 0;
  46   1              Test_Busy();
  47   1              return Data_Return;
  48   1      }
  49          //================================================================================
  50          //函数名称:LCD1602_Init()
  51          //函数功能:LCD1602初始化
  52          //================================================================================
  53          void  LCD1602_Init()
  54          {
  55   1              LCD_E=0;
C51 COMPILER V7.06   LCD1602DRIVER                                                         01/25/2008 16:03:52 PAGE 2   

  56   1              LCD1602_Write(Modle_Choode,Comment_Modle);                                                                                
  57   1              LCD1602_Write(Modle_Choode,Comment_Modle);               
  58   1              LCD1602_Write(Clear_Screen,Comment_Modle);
  59   1              LCD1602_Write(Open_Disput,Comment_Modle);
  60   1              LCD1602_Write(Auto_Move,Comment_Modle);
  61   1       
  62   1      }
  63          //================================================================================
  64          //函数名称:void  LCD1602_ClearScreen();
  65          //函数功能:清屏
  66          //===============================================================================
  67          void  LCD1602_ClearScreen()
  68          {
  69   1              Test_Busy();
  70   1              LCD1602_Write(Clear_Screen,Comment_Modle);
  71   1      }
  72          //================================================================================
  73          //函数名称:Test_Busy()
  74          //函数功能:检查LCD总线忙
  75          //================================================================================
  76          void Test_Busy()
  77          {
  78   1              uchar Flage;
  79   1              LCD_RS=0;
  80   1              LCD_RW = 1;
  81   1              LCD_E = 1;
  82   1              _nop_();
  83   1              _nop_();
  84   1              Flage=Data_Port;
  85   1              while(Flage&0x80)
  86   1              {
  87   2                      Flage=Data_Port;
  88   2                      _nop_();
  89   2              }
  90   1              LCD_E = 0;
  91   1              
  92   1      }
  93          //================================================================================
  94          //函数名称:Delay(uchar Delay_Time)
  95          //函数功能:检查LCD总线忙
  96          //===============================================================================
  97          void  Delay(uchar Delay_Time)
  98          {
  99   1              uchar i;
 100   1              for(;Delay_Time>0;Delay_Time--)
 101   1                      for(i=0;i<50;i++);
 102   1      }
 103          //================================================================================
 104          //函数名称:uchar Translater(uchar Tr_Data);
 105          //函数功能:转换成ASCLL码
 106          //===============================================================================
 107          uchar Translater(uchar Tr_Data)
 108          {
 109   1              uchar TD;
 110   1              TD = Tr_Data+0x30;
 111   1              return TD;
 112   1                      
 113   1      }
 114          //================================================================================
 115          //函数名称:void  Disput_AChar(uchar addr,uchar Display);
 116          //函数功能:向指定地址显示一个字符
 117          //===============================================================================
C51 COMPILER V7.06   LCD1602DRIVER                                                         01/25/2008 16:03:52 PAGE 3   

 118          void  Disput_ANum(uchar addr,uchar Display)
 119          {       
 120   1               uchar ASCALL_Data;
 121   1               ASCALL_Data=Translater(Display);
 122   1               Test_Busy();
 123   1               LCD1602_Write(addr,Comment_Modle);
 124   1               Test_Busy();
 125   1               LCD1602_Write(ASCALL_Data,Data_Modle);
 126   1               
 127   1      }
 128          //================================================================================
 129          //函数名称:void  Disput_AChar(uchar addr,uchar *Display);
 130          //函数功能:向指定地址显示一行字符
 131          //===============================================================================
 132          void  Disput_ALineChar(uchar addr,uchar *Display)
 133          {
 134   1              uchar Str_Length,address;
 135   1              address=addr;
 136   1              Str_Length=strlen(Display);
 137   1              for(;Str_Length>0;Str_Length--)
 138   1              {
 139   2              
 140   2                      LCD1602_Write(address,Comment_Modle);
 141   2                      LCD1602_Write(*(Display++),Data_Modle);
 142   2                      if(address==0x8f)
 143   2                      address=0xc0;
 144   2                      else if(address==0xcf)
 145   2                      address=0x80;
 146   2                      else    address++;
 147   2              }
 148   1                      
 149   1      }
 150          //================================================================================
 151          //函数名称:void  Disput_CharNum(uchar addr,uchar Display);
 152          //函数功能:向指定地址显示一行字符
 153          //===============================================================================
 154          void  Disput_CharNum(uchar addr,uchar Display)
 155          {
 156   1              uchar Disput_Data[4]={0x20,0x20,0x20,0};
 157   1              uchar Temp;
 158   1              uchar i=0;
 159   1              Temp=Display;
 160   1               while(Temp/10)
 161   1               {
 162   2      
 163   2                      Temp/=10;
 164   2                      i++;
 165   2               }
 166   1               while(i)
 167   1               {
 168   2                      Disput_Data[i]=Display%10+0x30;
 169   2                      Display/=10;
 170   2                      i--;
 171   2               }
 172   1               Disput_Data[i]=Display%10+0x30;
 173   1               Disput_ALineChar(addr,Disput_Data);
 174   1      
 175   1      }
 176          //================================================================================
 177          //函数名称:void  Disput_IntNum(uchar addr,uchar Display);
 178          //函数功能:向指定地址显示一行字符
 179          //===============================================================================
C51 COMPILER V7.06   LCD1602DRIVER                                                         01/25/2008 16:03:52 PAGE 4   

 180          void  Disput_IntNum(uchar addr,uint Display_Int)
 181          {
 182   1              uchar Disput_Data[7]={0x20,0x20,0x20,0x20,0x20,0x20,0};
 183   1              uint Temp;
 184   1              uchar i=0;
 185   1              Temp=Display_Int;
 186   1               while(Temp/10)
 187   1               {
 188   2      
 189   2                      Temp/=10;
 190   2                      i++;
 191   2               }
 192   1                while(i)
 193   1               {
 194   2                      Disput_Data[i]=Display_Int%10+0x30;
 195   2                      Display_Int/=10;
 196   2                      i--;
 197   2               }
 198   1               Disput_Data[i]=Display_Int%10+0x30;
 199   1               Disput_ALineChar(addr,Disput_Data);
 200   1      
 201   1                      
 202   1      }
 203          //================================================================================
 204          //函数名称:void  Disput_LongNum(uchar addr,uchar Display);
 205          //函数功能:向指定地址显示一行字符
 206          //===============================================================================
 207          void  Disput_LongNum(uchar addr,ulong Display_Long)
 208          {
 209   1              uchar Disput_Data[13]={0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0};
 210   1              ulong Temp;
 211   1              uchar i=0;
 212   1              Temp=Display_Long;
 213   1               while(Temp/10)
 214   1               {
 215   2                      Temp/=10;
 216   2                      i++;
 217   2               }
 218   1               while(i)
 219   1               {
 220   2                      Disput_Data[i]=Display_Long%10+0x30;
 221   2                      Display_Long/=10;
 222   2                      i--;
 223   2               }
 224   1               Disput_Data[i]=Display_Long%10+0x30;
 225   1               Disput_ALineChar(addr,Disput_Data);
 226   1      
 227   1      
 228   1      }
 229          void main()
 230          {
 231   1              uchar Key_Value=0;
 232   1              LCD1602_Init();
 233   1              Disput_ALineChar(0x80,"Key_Value:");
 234   1              //Disput_CharNum(0x80,123);
 235   1              while(1)
 236   1              {
 237   2                      Key_Value=KeyScan();
 238   2                      if(Key_Value!=16)
 239   2                      {
 240   3                              Disput_LongNum(0xc0,Key_Value);
 241   3                              while(Key_Value==KeyScan());
C51 COMPILER V7.06   LCD1602DRIVER                                                         01/25/2008 16:03:52 PAGE 5   

 242   3                      }
 243   2              }
 244   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    701    ----
   CONSTANT SIZE    =     35    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      47
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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