后面会讲一下各个模块怎么用的,先上一张DS18B20温度传感器的电路图
它采用的onewire单总线通信,比赛的时候赛点资源包里面有底层驱动代码,不过会在里面挖坑
要注意驱动代码里面的时序中延时有没有扩大十二倍,因为我们使用的开发板IAP15F2K61S2速度比传统51快8~12倍
void DS18B20_Init(void)
{
init_ds18b20(); //复位初始化
Write_DS18B20(0xCC); //跳过ROM指令,忽略64位ROM地址,直接向DS18B20发起各种温度转换指令。
Write_DS18B20(0x44); //温度转换指令,启动DS18B20进行温度转换,转换时间最长为500ms(典型值
为200ms),结果保存在高速RAM中。
}
float DS18B20_Read(void)
{
unsigned char TLSB,TMSB;
int temp;
float T;
init_ds18b20(); //复位初始化
Write_DS18B20(0xCC); //跳过ROM指令,忽略64位ROM地址,直接向DS18B20发起各种温度转换指令。
Write_DS18B20(0xBE); //读暂存器指令,读取高速暂存存储器9个字节的内容。
TLSB=Read_DS18B20(); //读取低八位
TMSB=Read_DS18B20(); //读取高八位
temp=(TMSB<<8)|TLSB; //整合为16位数据
T=temp/16.0; //除以16.0或者乘以0.0625
return T;
}
DS18B20返回的16位二进制数代表温度值,其高五位代表正负。如果高五位全部为1,则代表返回的温度值为负值。如果高五位全部为0,则代表返回的温度值为正值。后面的11位数据代表温度的绝对值,将其转换为十进制数值之后,再除以16.0即可获得此时的温度值
比赛中常常有一个温度界面或参数,界面显示实时温度,参数作为阈值,温度是显示整数还是小数。