关于温度传感器读写函数的编写:温度传感器的读写函数编写
在上面的函数的前提下,读取温度传感器响应的数据并在数码管上显示即可。
利用Ds18b20ReadTemp()函数返回温度值。
编写datapros()函数处理传输过来的数据。(DisplayData数组是用于存储显示数据的全局变量,smgduan用来存储标准的数码管显示数组)
代码部分:
void datapros(int temp)
{
float tp;
if(temp< 0) //当温度值为负数
{
DisplayData[0] = 0x40; // 显示‘-’符号
//因为读取的温度是实际温度的补码,所以减1,再取反求出原码
temp=temp-1;
temp=~temp;
tp=temp;
temp=tp*0.0625*100+0.5;
//保留两位小数*100,+0.5达成四舍五入
}
else
{
DisplayData[0] = 0x00; //首位不显示
tp=temp;//数据处理有小数点将温度赋给一个浮点型变量
temp=tp*0.0625*100+0.5;
}
DisplayData[1] = smgduan[temp / 10000];
DisplayData[2] = smgduan[temp % 10000 / 1000];
DisplayData[3] = smgduan[temp % 1000 / 100] | 0x80;
DisplayData[4] = smgduan[temp % 100 / 10];
DisplayData[5] = smgduan[temp % 10];
}
最后编写数码管的显示函数。
void DigDisplay()
{
u8 i;
for(i=0;i<6;i++)
{
switch(i) //位选,选择点亮的数码管,
{
case(0):
LSA=0;LSB=0;LSC=0; break;//显示第0位
case(1):
LSA=1;LSB=0;LSC=0; break;//显示第1位
case(2):
LSA=0;LSB=1;LSC=0; break;//显示第2位
case(3):
LSA=1;LSB=1;LSC=0; break;//显示第3位
case(4):
LSA=0;LSB=0;LSC=1; break;//显示第4位
case(5):
LSA=1;LSB=0;LSC=1; break;//显示第5位
}
P0=DisplayData[5-i];//发送数据
delay(40); //间隔一段时间扫描
P0=0xff;//消影
}
}
完成了上面的相关函数之后只需要在主函数中调用他们即可。
void main()
{
datapros(Ds18b20ReadTemp());
DigDisplay();
}
效果图如下: