当前位置:首页 > 基于51单片机与DS18B20的数字温度计设计 - 副本
4.2.5 数据处理
高速暂存存储器由9个字节组成,其分配如表5所示。当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在 高速暂存存储器的第0和第1个字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后。
图7 字节分配
下表为12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0, 这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际 温度。 例如+125℃的数字输出为07D0H,
实际温度=07D0H*0.0625=2000*0.0625=125℃。 例如-55℃的数字输出为FC90H,则应先将11位数据位取反加1得370H(符号位不变,也不作运算), 实际温度=370H*0.0625=880*0.0625=55℃。 可见其中低四位为小数位。
图8 DS18B20温度数据表
4.3 显示电路
LED数码管显示采用动态扫描方式,能简化电路布线,节约单片机I/O端口。 段码和位码由单片机P0送出,分别用74HC673N锁存。
图9 数码管驱动显示电路
4.4 声光报警电路
当温度超过设定温度值时,实现声光报警,蜂鸣器鸣叫、8个发光二极管点亮。蜂鸣器由单片机P2^3口控制,用三极管驱动,发光二极管接单片机P1口,由74HC673N锁存。
图10 声光报警电路
4.5 键盘输入电路
四个键分别连接单片机P3^4、P3^5、P3^6、P3^7构成独立式键盘,分别实现加、减、报警温度设定功能键和温度查询功能键。
图11 键盘输入电路
5 软件设计
5.1 主程序模块
主程序需要调用3个子程序,分别为:
? 实时温度显示子程序:驱动数码管把实时温度值送出在LED数码管显示 ? 查询记录温度值子程序:查询过去存储的温度值,最多可查询10个值 ? 温度设定、报警子程序:设定报警温度值,当温度超过该值时产生报警,
即驱动蜂鸣器鸣叫、8个发光二极管发光 主程序流程图:
开始
定时器初始化、启动 显示实时温度 温度设定、报警
查询记录温度值
图12 主程序流程图
5.2 读温度值模块
读温度值模块需要调用4个子程序,分别为:
? DS18B20初始化子程序:让单片机知道DS18B20在总线上且已准备好操
作
? DS18B20写字节子程序:对DS18B20发出命令
? DS18B20读字节子程序:读取DS18B20存储器的数据 ? 延时子程序:对DS18B20操作时的时序控制 1. 读温度值模块流程图:
入口
DS18B20初始化 跳过读序列号 启动温度转换 延时 DS18B20初始化 跳过读序列号 读取温度值高低位
数据转换处理 返回
图13 读温度值子程序流程图
共分享92篇相关文档