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

📄 18b20test.lst

📁 温度测量显示程序
💻 LST
字号:
C51 COMPILER V7.50   18B20TEST                                                             08/31/2007 15:57:10 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE 18B20TEST
OBJECT MODULE PLACED IN 18B20test.OBJ
COMPILER INVOKED BY: D:\Program Files\keil\C51\BIN\C51.EXE 18B20test.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /************************************************************
   2          *File Name:    数字温度计
   3          *Author:       LiZhaosuo
   4          *Date:        2007//8/31
   5          *Modify:       NO
   6          *Description: 以ADuC812为主控芯片,MAX7219为显示控制芯片,
   7                         DS18B20为温度传感器,精度可以达到0.1度
   8          *************************************************************/
   9          
  10          #include  <aduc812.h> 
  11          #include "intrins.h"
  12          #include "max7219.h"  
  13          #include "delay.h"   
  14          
  15          #define uchar unsigned char
  16          #define uint  unsigned int
  17          
  18          
  19          sbit dq=P3^3;   //温度输入口 temperature input
  20          
  21          /*温度小数部分查表法用*/
  22          uchar data distab[16]=
  23          {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};
  24          
  25          /*温度数据暂存*/
  26          uchar data display[5]={0x00,0x00,0x00,0x00,0x00};
  27          uchar data temp_data[2]={0x00,0x00}; 
  28          
  29          void TempDelay (uint t);
  30          void Init18b20 (void);
  31          void WriteByte (uchar wr);
  32          uchar ReadByte (void);
  33          void read_temp (void);
  34          void work_temp(void);
  35          void Temp_Display (void);
  36          
  37          /************************************************************
  38          *Function:延时处理
  39          *parameter:
  40          *Return:
  41          *Modify:
  42          *************************************************************/
  43          void TempDelay (uint t)
  44          {
  45   1        for(;t>0;t--)
  46   1        ;
  47   1      }
  48          /************************************************************
  49          *Function:18B20初始化
  50          *parameter:
  51          *Return:
  52          *Modify:
  53          *************************************************************/
  54          void Init18b20 (void)
  55          {
C51 COMPILER V7.50   18B20TEST                                                             08/31/2007 15:57:10 PAGE 2   

  56   1       uchar flag;
  57   1       while(flag)
  58   1       {
  59   2         while(flag)
  60   2         {
  61   3           dq=1;
  62   3           _nop_();_nop_();
  63   3           dq=0;
  64   3           TempDelay(50);  //delay 550 us
  65   3           _nop_();
  66   3           dq=1;
  67   3           TempDelay(6);  //delay 66 us
  68   3           _nop_(); _nop_();
  69   3               flag=dq;
  70   3         }
  71   2         TempDelay(45);//500us
  72   2         flag=~dq;
  73   2       }
  74   1       dq=1;
  75   1      }
  76          /************************************************************
  77          *Function:向18B20写入一个字节
  78          *parameter:
  79          *Return:
  80          *Modify:
  81          *************************************************************/
  82          void WriteByte (uchar wr)  //单字节写入
  83          {
  84   1       uchar i;
  85   1       for (i=8;i>0;i--)
  86   1       {
  87   2        dq=1;
  88   2        _nop_();_nop_();
  89   2        dq=0;
  90   2        _nop_();_nop_();_nop_();_nop_();_nop_();//5us
  91   2        dq=wr&0x01;//最低位移出
  92   2        TempDelay(6);   //delay 66us
  93   2        wr>>= 1;//右移一位
  94   2       }
  95   1       dq=1;
  96   1       TempDelay(1);   
  97   1      }
  98          /************************************************************
  99          *Function:读18B20的一个字节
 100          *parameter:
 101          *Return:
 102          *Modify: lzs
 103          *************************************************************/
 104          uchar ReadByte (void)     //读取单字节
 105          {
 106   1       uchar i,value=0;
 107   1       for(i=8;i>0;i--)
 108   1       {
 109   2        dq=1;_nop_();_nop_();
 110   2        value >>= 1;
 111   2        dq=0;
 112   2        _nop_();_nop_();_nop_();_nop_();//4us
 113   2        dq=1;
 114   2        _nop_();_nop_();_nop_();_nop_();//4us
 115   2        if(dq)
 116   2        value|=0x80;
 117   2        TempDelay (6);        //66us
C51 COMPILER V7.50   18B20TEST                                                             08/31/2007 15:57:10 PAGE 3   

 118   2        _nop_();
 119   2       }
 120   1       dq=1;
 121   1       return(value);         
 122   1      }
 123          /************************************************************
 124          *Function:读出18B20 的温度值
 125          *parameter:
 126          *Return:
 127          *Modify:
 128          *************************************************************/
 129          void read_temp (void)
 130          {
 131   1        Init18b20 ();    //总线复位
 132   1        WriteByte (0xCC);//发SkipROM指令
 133   1        WriteByte (0xBE);//发读指令
 134   1        temp_data[0]=ReadByte ();//温度低8位值
 135   1        temp_data[1]=ReadByte ();//温度高8位值
 136   1        Init18b20 ();    //复位
 137   1        WriteByte (0xCC);//发SkipROM指令
 138   1        WriteByte (0x44);//发转换指令
 139   1      }
 140          /************************************************************
 141          *Function:温度数据处理
 142          *parameter:
 143          *Return:
 144          *Modify:
 145          *************************************************************/
 146          void work_temp(void)
 147          {
 148   1       uchar n;
 149   1       if(temp_data[1]>127) //负温度求补码
 150   1       {
 151   2        temp_data[1]=(256-temp_data[1]);
 152   2        temp_data[0]=(256-temp_data[0]);
 153   2        n=1;
 154   2       }
 155   1      
 156   1       display[4]=temp_data[0]&0x0f;
 157   1       display[0]=distab[display[4]];
 158   1       display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);
 159   1       display[3]=display[4]/100;
 160   1       display[1]=display[4]%100;
 161   1       display[2]=display[1]/10;
 162   1       display[1]=display[1]%10;
 163   1       display[1]=display[1]+10;           //个位的数字加点
 164   1       if(!display[3])
 165   1       {
 166   2        display[3]=21;
 167   2        if(!display[2])
 168   2        {
 169   3         display[2]=21;
 170   3        }
 171   2       }//最高位为零时不显示
 172   1       if(n){display[3]=20;}//负温度时显示-
 173   1      }
 174          /************************************************************
 175          *Function:显示函数
 176          *parameter:
 177          *Return:
 178          *Modify:
 179          *************************************************************/
C51 COMPILER V7.50   18B20TEST                                                             08/31/2007 15:57:10 PAGE 4   

 180          void Temp_Display (void)
 181          { 
 182   1        uchar i,k;
 183   1        for(i=0;i<=8;i++)
 184   1        {
 185   2          Max7219Clear (i);//first clear the digit
 186   2        }
 187   1        for(k=0;k<=3;k++)
 188   1        {
 189   2               Max7219DisplayChar (k+1, display[k]);          
 190   2        } 
 191   1      }
 192          /************************************************************
 193          *Function:main函数
 194          *parameter:
 195          *Return:
 196          *Modify:
 197          *************************************************************/
 198          void main(void) 
 199          {
 200   1        char i;
 201   1      //  char j;
 202   1        Max7219Init ();                            // 初始化MAX7219
 203   1        Max7219SetBrightness (0x04);               // 设置显示亮度
 204   1                
 205   1        for(i=0;i<=8;i++)
 206   1        {
 207   2              Max7219DisplayChar (i, 18);//开机显示8.
 208   2        }
 209   1      
 210   1        Init18b20 ();    //初始化18b20
 211   1        WriteByte (0xCC);//发SkipROM指令
 212   1        WriteByte (0x44);//发转换指令
 213   1      /*  for(j=0;j<3;j++) //数码管循环显示跑8 三次,复位时显示界面
 214   1        {
 215   1              for(i=0;i<=8;i++)
 216   1              {
 217   1                Max7219DisplayChar (i, 18);
 218   1                Delay_nms(150);                  
 219   1                Max7219Clear (i);
 220   1              }
 221   1        }
 222   1      */
 223   1        Delay_nms(2000);//显示2s
 224   1        while(1)
 225   1        {
 226   2          read_temp();
 227   2              work_temp();
 228   2          Temp_Display(); 
 229   2          Delay_nms(2000);//显示2s    
 230   2        }
 231   1      }
 232          /*************************结束*************************/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    820    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     23       7
   IDATA SIZE       =   ----    ----
C51 COMPILER V7.50   18B20TEST                                                             08/31/2007 15:57:10 PAGE 5   

   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 + -