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

📄 disp_drive.lst

📁 在keil和proteus中实现两片51单片机的通信。。。
💻 LST
字号:
C51 COMPILER V7.50   DISP_DRIVE                                                            01/04/2009 22:44:57 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE DISP_DRIVE
OBJECT MODULE PLACED IN Disp_drive.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Disp_drive.c BROWSE DEBUG OBJECTEXTEND

line level    source

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

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

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

 180          
 181          /***************************************
 182          
 183                  显示一个整数(可闪烁)
 184                  入口参数:整数数值,起始显示位置,长度
 185          
 186          ****************************************/
 187          void DispInt_blink(INT32U val,INT8U row,INT8U col,INT8U len,BOOLEAN blink)
 188                  {
 189   1              INT8U n,end;
 190   1      
 191   1              end = col + len - 1;
 192   1              for (n=0;n<len;n++)
 193   1                      {
 194   2                      DispBuffer[row][end] = val % 10 + '0';
 195   2      
 196   2              if (blink == TRUE)
 197   2                      DispPro[row][col+n] = PRO_BLINK;
 198   2              else
 199   2                      DispPro[row][col+n] = 0; 
 200   2              //      DispPro[0][end] = 0;
 201   2                      val /= 10;
 202   2                      end --;
 203   2                      }
 204   1              }
 205          
 206          
 207          
 208          
 209          
 210          
 211          /***************************************
 212          
 213                  显示一个字符
 214                  入口参数:字符,显示位置,是否闪烁
 215          
 216          ****************************************/
 217          void DispChr(INT8U cv,INT8U row,INT8U col,BOOLEAN blink)
 218                  {
 219   1              DispBuffer[row][col] = cv;
 220   1              if (blink == TRUE)
 221   1                      DispPro[row][col] = PRO_BLINK;
 222   1              else
 223   1                      DispPro[row][col] = 0;
 224   1              }
 225          
 226          /***************************************
 227          
 228                  显示一个字符串
 229                  入口参数:字符串指针,显示位置,是否闪烁
 230          
 231          ****************************************/
 232          void DispStr(INT8U *str,INT8U row,INT8U col,BOOLEAN blink)
 233                  {
 234   1              while ((*str)!=0)
 235   1                      {
 236   2                      DispBuffer[row][col] = *str;
 237   2                      if (blink == TRUE)
 238   2                              DispPro[row][col] = PRO_BLINK;
 239   2                      else
 240   2                              DispPro[row][col] = 0;
 241   2      
C51 COMPILER V7.50   DISP_DRIVE                                                            01/04/2009 22:44:57 PAGE 5   

 242   2                      str ++;
 243   2                      col ++;
 244   2                      }
 245   1              }
 246          
 247          /***************************************
 248          
 249                  显示一个浮点数
 250                  注:无超显示范围判断
 251                          使用全部的显示区域
 252          
 253          ****************************************/
 254          void DispFloat(float val,INT8U row,INT8U col,INT8U Len)
 255                  {
 256   1              INT8U IntLen,n;
 257   1              INT32U iv,ivf;
 258   1      
 259   1      
 260   1              /* 符号位处理 */
 261   1              if (val < 0)
 262   1                      {
 263   2                      DispBuffer[row][col] = '-';
 264   2                      val = -val;
 265   2                      col ++;
 266   2                      Len --;
 267   2                      }
 268   1                      
 269   1              /* 整数位数计算 */
 270   1              IntLen = GetIntLen((INT32U)val);        
 271   1      
 272   1              /* 整数部分 */
 273   1              iv = (INT32U)val;
 274   1      
 275   1              /*  */
 276   1              for (n=0;n<(Len-IntLen);n++)
 277   1                      {
 278   2                      val *= 10;
 279   2                      }
 280   1              ivf = (INT32U)val;
 281   1              ivf += 5;
 282   1              ivf /= 10;
 283   1      
 284   1              /* 显示整数部分 */
 285   1              DispInt(iv,row,col, IntLen);
 286   1              /* 显示小数点 */
 287   1              DispChr('.',row,col+IntLen ,FALSE);
 288   1              /* 显示小数部分 */
 289   1              for (n=0;n<(Len-IntLen-1);n++)
 290   1                      {
 291   2                      DispInt(ivf%10 , row , col + Len -n -1, 1);
 292   2                      ivf /= 10;
 293   2                      }
 294   1      
 295   1              /* 计算实际有效位数,去掉小数部分尾数的所有0 */
 296   1              n = col + Len - 1;
 297   1              while (n >= IntLen)
 298   1                      {
 299   2                      if (DispBuffer[row][n] != '0')
 300   2                              {
 301   3                              break;
 302   3                              }
 303   2                      DispBuffer[row][n] = ' ';
C51 COMPILER V7.50   DISP_DRIVE                                                            01/04/2009 22:44:57 PAGE 6   

 304   2                      n --;
 305   2                      }
 306   1              }
 307          
 308          /***************************************
 309          
 310                  显示清屏
 311          
 312          ****************************************/
 313          void DispCls(void)
 314                  {
 315   1              INT8U col,row;
 316   1      
 317   1              for (row=0;row<2;row++)
 318   1                      {
 319   2                      for (col=0;col<MAXDISPLEN;col++)
 320   2                              {
 321   3                              DispBuffer[row][col] = ' ';
 322   3                              DispPro[row][col] = 0;
 323   3                              }
 324   2                      }
 325   1              }
 326          
 327          
 328          
 329          /***************************************
 330          
 331                  屏初始化
 332          
 333          ****************************************/
 334          void DispInit(void)
 335                  {
 336   1      
 337   1              LCD_Cmd(0x38);          //Function Set
 338   1                                                      //data bus length = 1 (8 bits)
 339   1                                                      //display lines = 1 (2 lines)
 340   1                                                      //character font = 0(5x7 Dot Font)
 341   1                      
 342   1              LCD_Cmd(0x06);          //Entry Mode Set
 343   1                                                      //Sets DD RAM counter to increment
 344   1      
 345   1              LCD_Cmd(0x0C);          //Sets Display 
 346   1                                              
 347   1              LCD_Cmd(0x01);          //Clears Display
 348   1                                                      //returns cursor to the Home Position (Address 00)
 349   1              }
 350          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    912    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1      45
   IDATA SIZE       =     64    ----
   BIT SIZE         =      1       3
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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