测试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;
}