按键扫描程序入口初始化按键位是否为0YES定时器延时8ms按键位是否为0返回标志位子程序结束NONO
图3.16 按键扫描程序流程图
三、水位控制程序设计
水位控制程序设计主要是对水位采集程序的设计,水位采集程序主要是对单片机端口的设置。由于是开关量的检测,即当端口检测到低电平,则表示水位上升到对应的导线位置,在软件编程的时候可以参考上一小节的按键扫描程序进行设计。
四、温度控制程序设计
温度控制程序设计主要是对温度采集程序的设计。温度采集是通过分时与DS18B20的单总线通信完成的,有严格的时隙概念,因此对DS18B20的各种操作必须按协议进行。 1、初始化DS18B20程序设计
通过单线总线的所有执行(处理)都从一个初始化时序开始。初始化时序如图3.17所示,初始化时序包括一个由总线控制器发出的复位脉冲和跟有其后由从机发出的存在脉冲。存在脉冲让总线控制器知道DS18B20在总线上且已准备好操作。
图3.17 DS18B20初始化时序图
该程序的执行过程如图3.18所示:
①先将数据线(DQ)置高电平1;
②延时(该时间要求不是很严格,但是要尽可能短一点); ③数据线(DQ)拉到低电平0;
④延时750us(该时间范围可以在480~960us); ⑤数据线(DQ)拉到高电平1;
⑥延时等待。如果初始化成功则在15~60ms内产生一个由DS18B20返回的低电平0,据该状态可以确定它的存在。
⑦若CPU读到数据线(DQ)上的低电平0后,还要进行延时,其延时的时间从发出高电平算起(第⑤步的时间算起)最少要480us;
⑧将数据线(DQ)再次拉到高电平1后结束。
18B20初始化入口DQ=1延时50usDQ=0延时750usDQ=1NO是否返回0YES
图3.18 DS18B20初始化流程图
2、读取DS18B20当前温度
硬件电路连接好以后,只需按下面操作过程即可读出温度数据。本设计中只对一个DS18B20进行操作,就不需要读取ROM编码以及匹配ROM编码,只要用跳过ROM(CCH)命令,就可进行如下温度转换和读取操作。
DS18B20在出厂时默认配置为12位,其中最高位为符号位,即温度值共11位,单片机在读取数据时,一次会读2字节共16位,读完后将低11位的二进制数转化为十进制数后在乘以0.0625便为所测的实际温度值。另外,还需要判断温度的正负。前5个数字为符号位,这5位同时变化,我们只需要判断11位就可以了。前5位为0时,读取的温度为正值时,只要将测得的数值乘以0.0625即可得到实际温度值。读取DS18B20当前温度程序流程图如图3.23所示:
子程序结束读取温度值入口DS18B20复位跳过ROM匹配DS18B20复位跳过ROM匹配读取温度数据启动温度转换延时500ms等待温度转换温度数据处理子程序结束 图3.23 读取DS18B20当前温度程序流程图
五、漏电检测及声音提示程序设计
漏电检测的输出口接在单片机的外部中断0,当检测到漏电,外部中断0获取下降沿,产生中断。漏电检测及声音提示程序源代码如下:
六、控制策略程序设计
热水器控制系统中的控制任务的实现最终是靠程序的执行来完成的。在已完成各个功能模块的设计后,还需将各个功能模块按照一定的控制策略结合在一起,才能达到总体控制要求。作为一个控制系统,热水器控制系统的控制过程可以归结为三个步骤:数据采集、数据分析处理和控制输出。这个三个步骤不断重复,使整个系统实现所需的控制目标。
用户可以通过按键选择不同的控制策略,控制器设置了四个按键:“功能键”、“加键”、“减键”和“确认键”。各按键功能如下:
“功能键”用于切换数值项的可调状态。第一次按下水温度变为可调,再次按下水位变为可调状态。此为一个循环,直至“确认键”按下,保存当前设置,跳出菜单。
“加键”和“减键”用于调整设定的水温和水位。当前状态为可调状态时每按一次“加键”和“减键”,被设置的数据值递增或递减。调整温度值时以1℃为调整单位。
“确认键”用于在可调状态时,保存当前设置参数并跳出可调状态,返回主程序。
通过定时器定时产生中断扫描是否有设置键按下,当设置键按下时,进入相应菜单进行水位和温度的设置。
第三节 本章小结
本章首先对系统硬件部分设计进行了详细的理论分析,主要有电源电路中稳压芯片的外围器件作用的说明,功率器件的驱动电路设计过程,漏电检测电路的理论计算。根据电路原理图的进行软件部分设计,并对各个子程序进行了相关分析。其中,详细的介绍了控制策略程序、液晶显示屏LCD1602操作程序和读取温度传感器DS18B20温度值程序。这样整个系统的设计部分就完成了。