value >>= 1;
}
}
//*************************************************************************
// 发送温度转换命令
//*************************************************************************
/*启动ds1820转换*/
void ds1820_start(void) {
ds1820_reset();
ds1820_write_byte(0xCC); //勿略地址
ds1820_write_byte(0x44); //启动转换
}
//*************************************************************************
// DS8B20读取温度信息
//*************************************************************************
unsigned int ds1820_read_temp(void)
{
unsigned int i;
unsigned char buf[9];
ds1820_reset();
ds1820_write_byte(0xCC); //勿略地址
ds1820_write_byte(0xBE); //读取温度
for (i = 0; i < 9; i++)
{
buf[i] = ds1820_read_byte();
}
i = buf[1];
i <<= 8;
i |= buf[0];
value=i;
value=value*0.625; //不是乘以0.0625的原因是为了把小数点后一位数据也转化为可以显示的数据
//比如温度本身为27.5度,为了在后续的数据处理程序中得到BCD码,我们先放大到275
//然后在显示的时候确定小数点的位置即可,就能显示出27.5度了
//value=value*10;
return i;
}
//*************************************************************************
// 温度数据处理函数
//*************************************************************************
void data_do(uint d)
{
uint A2t;
A1=d/100; //分出百,十,和个位
A2t=d%100;
A2=A2t/10;
A3=A2t%10;
}
//*************************************************************************
// 主程序
//*************************************************************************
void main(void)
{
DDRC = 0x00;
PORTC = 0xFF;
system_init(); //系统初始化
delay_ms(250);
ds1820_reset(); //复位D18B20
while (1)
{
ds1820_start(); //启动一次转换
delay_ms(300); //等待转换结束
ds1820_read_temp(); //读取温度数值
data_do(value); //处理数据,得到要显示的值
display(A1,A2,A3); //显示温度值
delay_ms(1000); //延时1S
}
}
上一页 [1] [2] [3]
本文关键字:温度传感器 程序 AVR单片机,单片机-工控设备 - AVR单片机