|
由于本论坛禁止直接求程序,禁止伸手党,所以向大家请教一下大致的实现方法,理清头绪后我自己来写程序去实现,谢谢大家
设计要求
所设计的数字温度计应具有如下功能:
将温度显示在LCD1602上。
当温度超过或低于设定的阈值时,能够通过LED闪烁报警。
设计思路:
采用单总线数字温度传感器DS1302提供温度值。显示模块采用LCD1602,将温度显示在第1行。温度超过或低于设定的阈值,分别用两个LED进行闪烁报警
DS18B20内有9个字节的高速暂存器RAM单元,说明:第1字节和第2字节是单片机发给DS18B20温度转换命令后,经转换所得的温度值,以两字节补码形式存放其中。一般情况下,用户多使用第1字节和第2字节。单片机通过单总线可读得该数据,读取时低位在前,高位在后。第3、4字节分别是由软件写入用户报警的上下限值TH和TL。第5字节为配置寄存器,用来配置DS18B20的测温分辨率,第6、7、8字节未用,为全1。第9字节是前面所有8个字节的CRC码,用来保证正确通信。
配置寄存器(第5字节)各位的定义如下:最高位TM出厂时已被写入0,用户不能改变;低5位都为1;R1和R0用来设置分辨率:DS18B20的转换时间与分辨率有关。当设定分辨率为9位时,转换时间为93.75ms;……;当设定分辨率为12位时,转换时间为750ms。
DS18B20内有9个字节的高速暂存器RAM单元,说明:第1字节和第2字节是单片机发给DS18B20温度转换命令后,经转换所得的温度值,以两字节补码形式存放其中。一般情况下,用户多使用第1字节和第2字节。单片机通过单总线可读得该数据,读取时低位在前,高位在后。第3、4字节分别是由软件写入用户报警的上下限值TH和TL。第5字节为配置寄存器,用来配置DS18B20的测温分辨率,第6、7、8字节未用,为全1。第9字节是前面所有8个字节的CRC码,用来保证正确通信。配置寄存器(第5字节)各位的定义如下:最高位TM出厂时已被写入0,用户不能改变;低5位都为1;R1和R0用来设置分辨率:DS18B20的转换时间与分辨率有关。当设定分辨率为9位时,转换时间为93.75ms;……;当设定分辨率为12位时,转换时间为750ms。
当DS18B20采集的温度为+125℃时,输出为07D0H,则有:
实际温度=(07D0H)/16=(0×163 +7×162 +13×161 +0×160)/16= 125℃当DS18B20采集的温度为− 55℃时,输出为FC90H,由于是补码,需要先将11位数据(符号位不变,也不参加运算)减1取反得0370H。则有:
实际温度=(0370H)/16=(0×163+ 3×162+ 7×161 + 0×160)/16=55℃
注意:负号则需要对采集的温度的结果数据进行判断后,再予以显示。
|
|