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

📄 disp.lst

📁 e1604b 液晶显示模块驱动程序 包括proteus的仿真图
💻 LST
字号:
C51 COMPILER V7.50   DISP                                                                  10/24/2007 00:27:06 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE DISP
OBJECT MODULE PLACED IN Disp.OBJ
COMPILER INVOKED BY: F:\edu\Keil\C51\BIN\C51.EXE Disp.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*
   2          ****************************************************
   3          
   4                          显示
   5          
   6          ****************************************************
   7          */
   8          
   9          #include <reg52.H>
  10          #include "Typedef.H"
  11          #include "UserDef.H"
  12          #include "Disp.h"
  13          
  14          
  15          /* 端口定义 */
  16          #define DISPDATAPORT    P0              //数据端口
  17          sbit Pin_RS = P2^0;                             //指令、数据选择(0=指令;1=数据)
  18          sbit Pin_RW = P2^1;                             //读写选择(0=写,1=读)
  19          sbit Pin_E = P2^2;                              //锁存(下降沿有效)
  20          
  21          
  22          /*  全局变量 */
  23          static INT8U idata DispBuffer[2][MAXDISPLEN];           //显示内容缓冲区
  24          static INT8U idata DispPro[2][MAXDISPLEN];              //显示属性缓冲区
  25          //显示属性定义
  26          #define PRO_BLINK       (1<<1)  //闪烁
  27          
  28          
  29          /***************************************
  30          
  31                  LCD忙等待
  32          
  33          ****************************************/
  34          void Busy(void)
  35                  {
  36   1              INT8U bf;
  37   1      
  38   1              Pin_E = 0;
  39   1              DISPDATAPORT = 0xFF;    //使端口为输入状态
  40   1              Pin_RW = 1;                             //读
  41   1              Pin_RS = 0;                             //指令
  42   1      
  43   1              while (1)
  44   1                      {
  45   2                      Pin_E = 1;
  46   2                      bf = DISPDATAPORT;
  47   2                      Pin_E = 0;
  48   2                      if ((bf & 0x80) == 0)
  49   2                              break;
  50   2                      }
  51   1              }
  52          
  53          
  54          /***************************************
  55          
C51 COMPILER V7.50   DISP                                                                  10/24/2007 00:27:06 PAGE 2   

  56                  LCD数据写
  57          
  58          ****************************************/
  59          void LCD_Data(INT8U Data)
  60                  {
  61   1              Busy();
  62   1              
  63   1              Pin_E = 0;
  64   1              Pin_RW = 0;             //写
  65   1              Pin_RS = 1;             //数据
  66   1      
  67   1              Pin_E = 1;
  68   1      
  69   1              DISPDATAPORT = Data;
  70   1      
  71   1              Pin_E = 0;
  72   1              }
  73          
  74          /***************************************
  75          
  76                  LCD命令写
  77          
  78          ****************************************/
  79          void LCD_Cmd(INT8U cmd)
  80                  {
  81   1              Busy();
  82   1              
  83   1              Pin_E = 0;
  84   1              Pin_RW = 0;             //写
  85   1              Pin_RS = 0;             //指令
  86   1      
  87   1              Pin_E = 1;
  88   1      
  89   1              DISPDATAPORT = cmd;
  90   1      
  91   1              Pin_E = 0;
  92   1              }
  93          
  94          /***************************************
  95          
  96                  显示扫描刷新程序
  97          
  98          ****************************************/
  99          void DispRef(void)
 100                  {
 101   1              static INT8U BlinkCnt = 0;              //闪烁显示计数器
 102   1              static BOOLEAN BlinkStatus = 0; //当前闪烁状态
 103   1              INT8U n;
 104   1      
 105   1              /* 计算显示闪烁状态 */
 106   1              BlinkCnt ++;                                                    
 107   1              BlinkCnt %= T_BLINK;
 108   1              if (BlinkCnt == 0)
 109   1                      BlinkStatus = !BlinkStatus;
 110   1      
 111   1              /* 若当前闪烁状态=0且当前显示位允许闪烁 */
 112   1      
 113   1      
 114   1              /* 输出行0 */
 115   1              LCD_Cmd(0x80);
 116   1              for (n=0;n<MAXDISPLEN;n++)
 117   1                      {
C51 COMPILER V7.50   DISP                                                                  10/24/2007 00:27:06 PAGE 3   

 118   2                      if ((BlinkStatus == 0) && ((DispPro[0][n] & PRO_BLINK) != 0))
 119   2                              LCD_Data(' ');
 120   2                      else
 121   2                              LCD_Data(DispBuffer[0][n]);
 122   2                      }
 123   1      
 124   1              /* 输出行1 */
 125   1              LCD_Cmd(0xC0);
 126   1              for (n=0;n<MAXDISPLEN;n++)
 127   1                      {
 128   2                      if ((BlinkStatus == 0) && ((DispPro[1][n] & PRO_BLINK) != 0))
 129   2                              LCD_Data(' ');
 130   2                      else
 131   2                              LCD_Data(DispBuffer[1][n]);
 132   2                      }
 133   1              }
 134          
 135          
 136          /***************************************
 137          
 138                  获取整数的长度  
 139          
 140          ****************************************/
 141          static INT8U GetIntLen(INT32U val)
 142                  {
 143   1              INT8U len;
 144   1      
 145   1              len = 0;
 146   1              while (val != 0)
 147   1                      {
 148   2                      val /= 10;
 149   2                      len ++;
 150   2                      }
 151   1      
 152   1              if (len == 0)
 153   1                      len = 1;
 154   1      
 155   1              return len;
 156   1              }
 157          
 158          
 159          
 160          /***************************************
 161          
 162                  显示一个整数
 163                  入口参数:整数数值,起始显示位置,长度
 164          
 165          ****************************************/
 166          void DispInt(INT32U val,INT8U row,INT8U col,INT8U len)
 167                  {
 168   1              INT8U n,end;
 169   1      
 170   1              end = col + len - 1;
 171   1              for (n=0;n<len;n++)
 172   1                      {
 173   2                      DispBuffer[row][end] = val % 10 + '0';
 174   2                      DispPro[0][end] = 0;
 175   2                      val /= 10;
 176   2                      end --;
 177   2                      }
 178   1              }
 179          
C51 COMPILER V7.50   DISP                                                                  10/24/2007 00:27:06 PAGE 4   

 180          
 181          /***************************************
 182          
 183                  显示一个字符
 184                  入口参数:字符,显示位置,是否闪烁
 185          
 186          ****************************************/
 187          void DispChr(INT8U cv,INT8U row,INT8U col,BOOLEAN blink)
 188                  {
 189   1              DispBuffer[row][col] = cv;
 190   1              if (blink == TRUE)
 191   1                      DispPro[row][col] = PRO_BLINK;
 192   1              else
 193   1                      DispPro[row][col] = 0;
 194   1              }
 195          
 196          /***************************************
 197          
 198                  显示一个字符串
 199                  入口参数:字符串指针,显示位置,是否闪烁
 200          
 201          ****************************************/
 202          void DispStr(INT8U *str,INT8U row,INT8U col,BOOLEAN blink)
 203                  {
 204   1              while ((*str)!=0)
 205   1                      {
 206   2                      DispBuffer[row][col] = *str;
 207   2                      if (blink == TRUE)
 208   2                              DispPro[row][col] = PRO_BLINK;
 209   2                      else
 210   2                              DispPro[row][col] = 0;
 211   2      
 212   2                      str ++;
 213   2                      col ++;
 214   2                      }
 215   1              }
 216          
 217          /***************************************
 218          
 219                  显示一个浮点数
 220                  注:无超显示范围判断
 221                          使用全部的显示区域
 222          
 223          ****************************************/
 224          void DispFloat(float val,INT8U row,INT8U col,INT8U Len)
 225                  {
 226   1              INT8U IntLen,n;
 227   1              INT32U iv,ivf;
 228   1      
 229   1      
 230   1              /* 符号位处理 */
 231   1              if (val < 0)
 232   1                      {
 233   2                      DispBuffer[row][col] = '-';
 234   2                      val = -val;
 235   2                      col ++;
 236   2                      Len --;
 237   2                      }
 238   1                      
 239   1              /* 整数位数计算 */
 240   1              IntLen = GetIntLen((INT32U)val);        
 241   1      
C51 COMPILER V7.50   DISP                                                                  10/24/2007 00:27:06 PAGE 5   

 242   1              /* 整数部分 */
 243   1              iv = (INT32U)val;
 244   1      
 245   1              /*  */
 246   1              for (n=0;n<(Len-IntLen);n++)
 247   1                      {
 248   2                      val *= 10;
 249   2                      }
 250   1              ivf = (INT32U)val;
 251   1              ivf += 5;
 252   1              ivf /= 10;
 253   1      
 254   1              /* 显示整数部分 */
 255   1              DispInt(iv,row,col, IntLen);
 256   1              /* 显示小数点 */
 257   1              DispChr('.',row,col+IntLen ,FALSE);
 258   1              /* 显示小数部分 */
 259   1              for (n=0;n<(Len-IntLen-1);n++)
 260   1                      {
 261   2                      DispInt(ivf%10 , row , col + Len -n -1, 1);
 262   2                      ivf /= 10;
 263   2                      }
 264   1      
 265   1              /* 计算实际有效位数,去掉小数部分尾数的所有0 */
 266   1              n = col + Len - 1;
 267   1              while (n >= IntLen)
 268   1                      {
 269   2                      if (DispBuffer[row][n] != '0')
 270   2                              {
 271   3                              break;
 272   3                              }
 273   2                      DispBuffer[row][n] = ' ';
 274   2                      n --;
 275   2                      }
 276   1              }
 277          
 278          /***************************************
 279          
 280                  显示清屏
 281          
 282          ****************************************/
 283          void DispCls(void)
 284                  {
 285   1              INT8U col,row;
 286   1      
 287   1              for (row=0;row<2;row++)
 288   1                      {
 289   2                      for (col=0;col<MAXDISPLEN;col++)
 290   2                              {
 291   3                              DispBuffer[row][col] = ' ';
 292   3                              DispPro[row][col] = 0;
 293   3                              }
 294   2                      }
 295   1              }
 296          
 297          
 298          
 299          /***************************************
 300          
 301                  屏初始化
 302          
 303          ****************************************/
C51 COMPILER V7.50   DISP                                                                  10/24/2007 00:27:06 PAGE 6   

 304          void DispInit(void)
 305                  {
 306   1      
 307   1              LCD_Cmd(0x38);          //Function Set
 308   1                                                      //data bus length = 1 (8 bits)
 309   1                                                      //display lines = 1 (2 lines)
 310   1                                                      //character font = 0(5x7 Dot Font)
 311   1                      
 312   1              LCD_Cmd(0x06);          //Entry Mode Set
 313   1                                                      //Sets DD RAM counter to increment
 314   1      
 315   1              LCD_Cmd(0x0C);          //Sets Display 
 316   1                                              
 317   1              LCD_Cmd(0x01);          //Clears Display
 318   1                                                      //returns cursor to the Home Position (Address 00)
 319   1              }
 320          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    793    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1      36
   IDATA SIZE       =     64    ----
   BIT SIZE         =      1       2
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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