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

📄 1602-wendu.lst

📁 2010年新增TX-1C程序
💻 LST
字号:
C51 COMPILER V8.02   1602_WENDU                                                            07/17/2010 10:42:44 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE 1602_WENDU
OBJECT MODULE PLACED IN 1602-wendu.OBJ
COMPILER INVOKED BY: D:\处理软件\keil\C51\BIN\C51.EXE 1602-wendu.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1           /***************************************************************
   2                                                  “天祥电子”            倾情奉献
   3                                                                  www.txmcu.com
   4                                                                  www.txmcu.cn
   5          *****************************************************************
   6          程序功能:      将DS18B20所采集到的温度实时显示到1602上。
   7          *****************************************************************/
   8          #include <reg52.H>
   9          #include <intrins.H>
  10          #include <math.H>
  11          
  12          #define uchar unsigned char
  13            #define uint unsigned int
  14           sbit dula = P2^6;
  15           sbit wela = P2^7;
  16          
  17          sbit RS = P3^5;    
  18           sbit LCDEN = P3^4; 
  19          
  20          void delayUs()
  21          {
  22   1          _nop_();
  23   1      }
  24          
  25           void delayMs(uint a)
  26          {
  27   1          uint i, j;
  28   1          for(i = a; i > 0; i--)
  29   1              for(j = 100; j > 0; j--);
  30   1       }
  31          
  32          
  33          void writeComm(uchar comm)
  34          {
  35   1           RS = 0;    
  36   1          P0 = comm;
  37   1          LCDEN = 1;
  38   1           delayUs();
  39   1          LCDEN = 0;
  40   1          delayMs(1);
  41   1      }
  42          
  43          //写数据:RS=1, RW=0;
  44          void writeData(uchar dat)
  45          {
  46   1           RS = 1;
  47   1           P0 = dat;
  48   1           LCDEN = 1;
  49   1          delayUs();
  50   1          LCDEN = 0;
  51   1          delayMs(1);
  52   1       }
  53          
  54          
  55           void init()
C51 COMPILER V8.02   1602_WENDU                                                            07/17/2010 10:42:44 PAGE 2   

  56           {
  57   1         
  58   1           dula = wela = 0;
  59   1          writeComm(0x38);
  60   1         writeComm(0x0c); 
  61   1          writeComm(0x06);
  62   1          writeComm(0x01); 
  63   1      }
  64          
  65          void writeString(uchar * str, uchar length)
  66          {
  67   1           uchar i;
  68   1          for(i = 0; i < length; i++)
  69   1          {
  70   2               writeData(str[i]);
  71   2           }
  72   1       }
  73           
  74          /**//*****************************DS18B20*******************************/
  75           sbit ds = P2^2;
  76          void dsInit()
  77           {
  78   1          
  79   1          unsigned int i;  
  80   1          ds = 0;
  81   1          i = 100;  
  82   1           while(i>0) i--;
  83   1          ds = 1;   
  84   1          i = 4;
  85   1           while(i>0) i--;
  86   1       }
  87           
  88          void dsWait()
  89           {
  90   1            unsigned int i;
  91   1            while(ds);  
  92   1            while(~ds);
  93   1            i = 4;
  94   1            while(i > 0) i--;
  95   1      }
  96          
  97          
  98          bit readBit()
  99          {
 100   1          unsigned int i;
 101   1          bit b;
 102   1          ds = 0;
 103   1          i++;   
 104   1          ds = 1; 
 105   1         i++; i++;  
 106   1          b = ds;
 107   1          i = 8; 
 108   1          while(i>0) i--;
 109   1          return b;
 110   1      }
 111          
 112          unsigned char readByte()
 113          {
 114   1          unsigned int i;
 115   1          unsigned char j, dat;
 116   1         dat = 0;
 117   1          for(i=0; i<8; i++)
C51 COMPILER V8.02   1602_WENDU                                                            07/17/2010 10:42:44 PAGE 3   

 118   1          {
 119   2              j = readBit();
 120   2            
 121   2              dat = (j << 7) | (dat >> 1);
 122   2          }
 123   1          return dat;
 124   1      }
 125          
 126          
 127          void writeByte(unsigned char dat)
 128          {
 129   1          unsigned int i;
 130   1          unsigned char j;
 131   1          bit b;
 132   1          for(j = 0; j < 8; j++)
 133   1          {
 134   2              b = dat & 0x01;
 135   2              dat >>= 1;
 136   2          
 137   2              if(b)   
 138   2              {
 139   3                 ds = 0;          i++; i++;  
 140   3                  ds = 1;    
 141   3                  i = 8; while(i>0) i--;  
 142   3              }
 143   2              else  
 144   2              {
 145   3                  ds = 0;
 146   3                i = 8; while(i>0) i--;  
 147   3                  ds = 1;
 148   3                 i++; i++;
 149   3              }
 150   2         }
 151   1      }
 152          
 153          
 154          void sendChangeCmd()
 155          {
 156   1          dsInit();    
 157   1          dsWait();   
 158   1          delayMs(1);    
 159   1          writeByte(0xcc);
 160   1          writeByte(0x44);
 161   1      }
 162          
 163          void sendReadCmd()
 164          {
 165   1          dsInit();
 166   1          dsWait();
 167   1          delayMs(1);
 168   1          writeByte(0xcc); 
 169   1          writeByte(0xbe); 
 170   1      }
 171          
 172          
 173          int getTmpValue()
 174          {
 175   1          unsigned int tmpvalue;
 176   1          int value; 
 177   1          float t;
 178   1          unsigned char low, high;
 179   1          sendReadCmd();
C51 COMPILER V8.02   1602_WENDU                                                            07/17/2010 10:42:44 PAGE 4   

 180   1          
 181   1          low = readByte(); 
 182   1          high = readByte();
 183   1         
 184   1          tmpvalue = high;
 185   1          tmpvalue <<= 8;
 186   1          tmpvalue |= low;
 187   1          value = tmpvalue;
 188   1          
 189   1        \
 190   1          t = value * 0.0625;
 191   1          \
 192   1          value = t * 100 + (value > 0 ? 0.5 : -0.5); //大于0加0.5, 小于0减0.5
 193   1          return value;
 194   1      }
 195          
 196          void display(int v) 
 197          {
 198   1          unsigned char count;
 199   1          unsigned char datas[] = {0, 0, 0, 0, 0};
 200   1          unsigned int tmp = abs(v);
 201   1          datas[0] = tmp / 10000;
 202   1          datas[1] = tmp % 10000 / 1000;
 203   1          datas[2] = tmp % 1000 / 100;
 204   1          datas[3] = tmp % 100 / 10;
 205   1          datas[4] = tmp % 10;
 206   1          writeComm(0xc0+3);
 207   1          if(v < 0)
 208   1          {
 209   2              writeString("- ", 2);
 210   2         }
 211   1          else
 212   1          {
 213   2             writeString("+ ", 2);
 214   2          }
 215   1          if(datas[0] != 0)
 216   1          {
 217   2              writeData('0'+datas[0]);
 218   2          }
 219   1          for(count = 1; count != 5; count++)
 220   1          {
 221   2              writeData('0'+datas[count]);
 222   2              if(count == 2)
 223   2              {
 224   3                  writeData('.');
 225   3              }
 226   2          }
 227   1      }
 228          /**//*****************************DS18B20*******************************/
 229          
 230          void main()
 231          {
 232   1          uchar table[] = "  xianzaiwendu: ";
 233   1          sendChangeCmd();
 234   1          init();
 235   1          writeComm(0x80);
 236   1          writeString(table, 16);
 237   1          while(1)
 238   1          {
 239   2              delayMs(1000); //温度转换时间需要750ms以上
 240   2              writeComm(0xc0);
 241   2              display(getTmpValue());
C51 COMPILER V8.02   1602_WENDU                                                            07/17/2010 10:42:44 PAGE 5   

 242   2              sendChangeCmd();
 243   2          }
 244   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    724    ----
   CONSTANT SIZE    =     28    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      35
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       2
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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