二、方案分析 1. 主控选择
这个系统大致会用到传感器模块、按键模块、蜂鸣器模块、LCD模块,实现传感器与单片机的通信,51可以实现串口通信、IIC通信,资源完全够用,所以本系统采用51单片机做主控。
2.各模块选择(1)测温模块
测温模块选择DS18B20:与传统的热敏电阻等测温元件相比,它是一种新型的体积小、适用电压宽、与微处理器接口简单的数字化温度传感器,具有独特的单线接口方式,DS18B20 在与微处理器连接时仅需要一条口线即可实现微处理器与 DS18B20 的双向通讯,同时精度高、速度快、抗干扰能力强。
DS18B20 外观实物如下图所示:
DS18B20 内部结构如下图所示:
ROM 中的 64 位序列号是出厂前被光刻好的,它可以看作是该 DS18B20 的地址序列号。64 位光刻 ROM 的排列是:开始 8 位(28H)是产品类型标号,接着的 48 位是该 DS18B20 自身的序列号,最后 8 位是前面 56 位的循环冗余校验码。光刻 ROM 的作用是使每一个 DS18B20 都各不相同,这样就可以实现一根总线上挂接多个 DS18B20 的目的。
DS18B20 温度传感器的内部存储器包括一个高速的暂存器 RAM 和一个非易失性的可电擦除的 EEPROM,后者存放高温度和低温度触发器 TH、TL 和配置寄存器。
配置寄存器是配置不同的位数来确定温度和数字的转化,配置寄存器结构如下:
低五位一直都是"1",TM 是测试模式位,用于设置 DS18B20 在工作模式还是在测试模式。在 DS18B20 出厂时该位被设置为 0,用户不需要去改动。R1 和
R0 用来设置 DS18B20 的精度(分辨率),可设置为 9,10,11 或 12 位,对应的分辨率温度是 0.5℃,0.25℃,0.125℃和 0.0625℃。R0 和 R1 配置如下图:
在初始状态下默认的精度是 12 位,即 R0=1、 R1=1。高速暂存存储器由 9 个字节组成,其分配如下:
当温度转换命令(44H)发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第 0 和第 1 个字节。存储的两个字节,高字节的前 5 位是符号位 S,单片机可通过单线接口读到该数据,读取时低位在前,高位在后, 数据格式如下:
如果测得的温度大于 0,这 5 位为‘ 0’,只要将测到的数值乘以 0.0625(默认精度是 12 位)即可得到实际温度;如果温度小于 0,这 5 位为‘ 1’, 测到的数值需要取反加 1 再乘以 0.0625 即可得到实际温度。温度与数据对应关系如下:
比如我们要计算+85 度,数据输出十六进制是 0X0550,因为高字节的高 5 位为 0,表明检测的温度是正温度,0X0550 对应的十进制为 1360,将这个值乘以 12 位精度 0.0625,所以可以得到+85 度。
知道了怎么计算温度, 接下来我们就来看看如何读取温度数据, 由于DS18B20 是单总线器件,所有的单总线器件都要求采用严格的信号时序,以保证数据的完整性。DS18B20 时序包括如下几种:初始化时序、写(0 和 1)时序、读(0 和 1)时序。 DS18B20 发送所有的命令和数据都是字节的低位在前。
DS18B20 的典型温度读取过程,
DS18B20 的典型温度读取过程为:复位→发 SKIP ROM 命令(0XCC)→发开始转换命令(0X44)→延时→复位→发送 SKIP ROM 命令(0XCC)→发读存储器命令
(0XBE)→连续读出两个字节数据(即温度)→结束。
时序图如下:
初始化时序图
写时序图
读时序图
(2)按键模块:此处单个独立按键模块即可
(3)EEPROM模块:使用 AT24C02 芯片,存储容量为 256 字节,可实现IIC-EEPROM 功能,存储的数据掉电不丢失。
AT24C02 芯片管脚及外观图如下图所示:
芯片管脚说明如下图所示:
AT24C02 器件地址为7 位,高 4 位固定为 1010,低 3 位由 A0/A1/A2 信号线的电平决定。 因为传输地址或数据是以字节为单位传送的,当传送地址时, 器件地址占 7 位,还有最后一位(最低位 R/W)用来选择读写方向,它与地址无关。
硬件电路连接如下:
(4)显示部分:LCD1602。1602 液晶也叫 1602 字符型液晶,它能显示 2 行字符信息,每行又能显示 16 个字符。它是一种专门用来显示字母、数字、符号的点阵型液晶模块。它是由若干个 5x7 或者 5x10 的点阵字符位组成,每个点阵字符位都可以用显示一个字符, 每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用。本质是多个LED组合,通过引脚使能来进行并行数据的移位与存储。
(5)报警模块:蜂鸣器。
三、流程设计我们选择三个按键进行模式切换:K1、K2与K3。其中K1第一次按下,LCD显示上限温度,然后K1断开,再按K2或K3,K2决定加,K3决定减,LCD显示此时状态,设定值传送给AT24C02。K1第二次按下,LCD显示下限温度,然后K1断开,再按K2或K3,K2决定加,K3决定减,LCD显示此时状态,设定值传送给AT24C02,。K1第三次按下,DS18B20测温,LCD回到显示上限、下限、当前温度三者共同显示状态。此外,通过给蜂鸣器设置不同频率产生不同声音来区别超过过高过低。
四、仿真图
五、仿真结果
1.
2.
3.
结论:仿真结果无误。
项目资料:
链接:https://pan.baidu.com/s/1nwjxkPrz7OXeUoGMvv1WxQ
提取码:l73g
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)