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 读温度值子程序流程图
2. DS18B20初始化子程序流程图:
入口
DQ置高电平 稍延时 DQ复位0 延时>480ms DQ拉高电平 延时15~60ms DQ为低电平? N Y 返回 图14 DS18B20初始化子程序流程图
3. DS18B20写字节和读字节子程序流程图:
图15 DS18B20写字节子程序流程图
图16 DS18B20读字节子程序流程图
5.3 中断模块
中断采用T0方式1,初始值定时为50ms。 中断模块需调用两个子程序:
? 读温度值子程序:定时读取温度值,实时更新温度值 ? 记录温度值子程序:定时记录温度值,供查询使用
把这两个子程序放在中断的原因是,不会因为调整报警温度或查询历史温度值而停止更新温度值和记录温度值。 中断模块流程图:
中断入口 定时器重置初值 计数值加1 1秒? Y 读温度值 N 记录温度值 中断返回
图17中断模块流程图
5.4 温度查询模块
温度查询模块需要接受按键输入,进入查询界面后,按加减键分别查询上一个和下一个历史温度值,并驱动数码管显示需要查询的温度值。 温度查询模块流程图如下:
入口
N 功能键按下?
Y
延时消抖
N 确认按下?
Y 显示温度值与位次