测试DS18B20  

 

 

/*文件名:测试DS18B20.C
/功能:使用数码管测试温度传感器
*/
/****************************************************************************************
*包含文件声明
***************************************************************************************/
#include<reg52.h>
#include"display.h"
#include"DS18B20.h"
#include <intrins.h>

/**********************************************************************************
*函数声明
********************************************************************************/
void delay_50ms(unsigned int )  ;    //延时精度50ms
void  hextobcd( void) ;      //将十六进制转换为BCD

/************************************************************************************
*全局变量声明
***********************************************************************************/
extern unsigned char Temperature;
uchar disp_data[4] = {0,0,0,0};                 //数码管显示数据

 

/**********************************************************************************
*主程序
********************************************************************************/

/*******************************************************************************
** 函数名称:void main ()
** 函数功能:使用数码管测试温度传感器
** 入口参数:void
** 出口参数:void
** 说    明:
**************************************************************************************/
void main(void)
{
    Display(disp_data);
 delay_50ms(10);   

    DS18B20_Init();                   //温度传感器初始化
    while (1)
    { 
      
        delay_50ms(1);            
  DS18B20ConvT();          //转换温度
  delay_50ms(16);         //800ms转换时间等待
        ReadDS18B20();          //读取温度
  hextobcd();                                 //将温度转换为BCD
  _nop_();
  Display(disp_data);
    }
 }

/***************************************************************************************
** 函数名称:void delay_50ms(unsigned int t)
** 函数功能:延时程序
** 入口参数:unsigned int t
** 出口参数:void
** 说    明:延时精度50ms
****************************************************************************************/
 
 void delay_50ms(unsigned int t)
{
 unsigned int j;
 for(;t>0;t--)
  for(j = 6245;j>0;j--)
 ;
}
/***************************************************************************************
** 函数名称:void  hextobcd( void)
** 函数功能:将十六进制转换为BCD
** 入口参数:void
** 出口参数:void
** 说    明:使用了全局变量
***************************************************************************************/
void  hextobcd( void)
{
 unsigned char high= 0, low = 0, temp =0,high_temp = 0,low_temp =0;
 high_temp = (Temperature>>4) *0x16; 
 low_temp = Temperature&0x0F;
 if(low_temp > 9)
 {
  low_temp = low_temp -10 + 0x10;
 }
 temp = high_temp + low_temp;
 high = temp>>4;
 low = temp & 0x0F;
 if(low>9)
 {
  high +=1;
  low -=10;
 }
 
 disp_data[1]= high;
 disp_data[0] = low;
 
}