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

📄 tem_test.lst

📁 DS18B20是DALLAS公司生产的一线式数字温度传感器
💻 LST
字号:
C51 COMPILER V7.50   TEM_TEST                                                              12/05/2007 10:50:25 PAGE 1   


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

line level    source

   1          /*-------------------------------------------------------------------------------------------------
   2                                ╔=======================================
   3                                ┆       YG51A开发板配套实验学习例程   ┆
   4                                ┆             Version 2.0             ┆
   5                                ┆                                     ┆
   6                                ┆            扬光电子工作室           ┆
   7                                ┆                                     ┆
   8                                ┆           QQ:573764777              ┆
   9                                ┆         E-mail:yg-stu@163.com       ┆
  10                                ╚=======================================╝
  11          *********************************** 程序功能说明 *********************************************
  12          数码管显示当前温度
  13          ********************************************************************************************/
  14          
  15          #include <reg52.h>
  16          #define  uchar  unsigned char
  17          
  18          sbit DQ =P3^7; //18B20数据线引脚
  19          
  20          //数码管显示的段码表
  21          uchar code table[] ={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
  22                           //   0    1    2    3    4    5    6    7    8    9    
  23          uchar code table_d[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
  24                            //   0    1    2    3    4    5    6    7    8    9    
  25          
  26          uchar dispbuf[4]; //显示缓冲区   
  27          uchar  temper[2];//存放温度的数组       
  28          
  29          void seg_scan();               
  30          
  31          /*****************************延时函数**************************/
  32          
  33          void delay (unsigned int us)  
  34          {
  35   1        while(us--);
  36   1      }
  37          
  38          void reset(void)   //复位
  39          {
  40   1        uchar x=0;
  41   1        DQ = 1;
  42   1        delay(8);   //稍做延时
  43   1        DQ = 0;
  44   1        delay(80);   //精确延时 大于 480us
  45   1        DQ = 1;   //拉高总线
  46   1        delay(14);
  47   1        x=DQ;
  48   1        delay(20);
  49   1      }
  50          /**********************从DS18B20读一字节***************/
  51          uchar readbyte(void) //读1字节
  52          {
  53   1        uchar i=0;
  54   1        uchar dat=0;
  55   1        for (i=8;i>0;i--)
C51 COMPILER V7.50   TEM_TEST                                                              12/05/2007 10:50:25 PAGE 2   

  56   1        {
  57   2          DQ = 0;
  58   2          dat>>=1;
  59   2          DQ = 1;
  60   2          if(DQ)
  61   2          dat|=0x80;
  62   2          delay(4);
  63   2         }
  64   1        return(dat);
  65   1       }
  66          /***********************向DS18B20写一字节***********************/
  67          void writebyte(unsigned char dat) //写1字节
  68          {
  69   1        uchar i=0;
  70   1        for (i=8; i>0; i--)
  71   1        {
  72   2         DQ = 0;
  73   2         DQ = dat&0x01;
  74   2         delay(5);
  75   2         DQ = 1;
  76   2         dat>>=1;
  77   2         }
  78   1       delay(4);
  79   1      }
  80          /***********************CPU读取温度值***************************/
  81          void readtemp(void) //读取温度
  82          {
  83   1        uchar a=0,b=0;
  84   1        reset();
  85   1      
  86   1        seg_scan();
  87   1      
  88   1        writebyte(0xCC); // 跳过序列号
  89   1        writebyte(0x44); // 启动温度转换
  90   1        reset();
  91   1       
  92   1        seg_scan();
  93   1        
  94   1        writebyte(0xCC);
  95   1        writebyte(0xBE); //读9个寄存器,前两个为温度
  96   1      
  97   1        seg_scan(); 
  98   1      
  99   1        a=readbyte();   //低位
 100   1        b=readbyte();   //高位
 101   1      
 102   1        seg_scan();
 103   1      
 104   1        temper[0]=a&0x0f;
 105   1        a=a>>4;         //低位右移4位,舍弃小数部分
 106   1        temper[1]=b<<4;         //高位左移4位,舍弃符号位
 107   1        temper[1]=temper[1]|a;
 108   1        }
 109          
 110          /******************************显示*************************/
 111          
 112          void seg_scan()
 113          {    
 114   1        int i,j=0xFE;
 115   1        int dispdata;
 116   1        for(i=0;i<4;i++)
 117   1          {
C51 COMPILER V7.50   TEM_TEST                                                              12/05/2007 10:50:25 PAGE 3   

 118   2           P2=j;
 119   2           dispdata=dispbuf[i];
 120   2           if(i==1)
 121   2             P0=table_d[dispdata];
 122   2           else
 123   2             P0=table[dispdata];
 124   2           delay(500);
 125   2           j=(j<<1)|0x01;
 126   2           if(j==0xEF)j=0xFE;
 127   2           }  
 128   1      }
 129          
 130          /*******************************主函数***********************/
 131          
 132          main()
 133          { uchar i;
 134   1        uchar temp;
 135   1        float backbit;   
 136   1        for(i=0;i<4;i++)
 137   1         dispbuf[i] = 0;
 138   1        while(1){
 139   2             readtemp();//读18B20
 140   2             backbit = temper[0];//换成浮点数
 141   2             backbit = backbit * 6.25;//乘以0.0625*100
 142   2             temp = backbit;//取低2位整数部分
 143   2             dispbuf[3] = temp%10 ;
 144   2             
 145   2             temp = temp/10;
 146   2             dispbuf[2] = temp%10 ;
 147   2             
 148   2             temp = temper[1];//取整数部分
 149   2             dispbuf[1] = temp%10;
 150   2             
 151   2             temp = temp/10;
 152   2             dispbuf[0]= temp%10;
 153   2             
 154   2                 seg_scan(); //显示扫描 
 155   2        }
 156   1      }
 157          
 158          /********************************结束************************/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    381    ----
   CONSTANT SIZE    =     20    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      6       8
   IDATA SIZE       =   ----    ----
   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 + -