黑龙江农垦科技职业技术学院毕业论文
4 系统软件设计
在系统软件设计中,充分考虑了与硬件电路有机结合,利用AT89S52单片机以及温湿度传感器DHT11许多优异的特性实现对温度和湿度的高精度测量。系统软件采用模块化设计,在主程序下分成若干彼此独立的功能模块,如温湿度数据采集、液晶显示、键盘输入、串口通讯模块等。
系统单片机代码采用C语言编写,以Keil uVision3为开发环境。系统程序主要由主程序、温湿度采集子程序、键盘扫描子程序、液晶显示子程序、报警子程序、串口发送和接收子程序等部分组成。其中,系统的主程序设计主要完成系统初始化、中断优先级设定以及判断调用各模块程序,即主要实现各模块程序的链接。设计时只需对温度/湿度进行相应的采集处理后,即可让液晶实时显示当前的温度与湿度值。而蜂鸣报警只需接上单片机的I/O口,并对其接口线进行编程即可完成。整个控制系统软件设计采用键盘控制方式。
4.1 主程序设计
食品温、湿度测控系统软件设计主要由系统初始化、温湿度数据采集、液晶显示、键盘扫描处理、数据通信等几部分组成。
程序设计思想:首先要对系统进行初始化,主要完成对单片机各功能部件初始状态的配置。然后通过键盘处理模块对现场控制信号进行设定,设置温、湿度的上限与下限,即报警范围;同时,键盘处理模块还可以完成特殊情况下强制执行信号的操作,如复位、开/关报警等。接下来通过温湿度传感器数据采集模块完成对环境温、湿度的实时数据采集及相关处理。最后通过液晶显示屏显示现场温、湿度参数,从而实现了对温、湿度参数的实时显示。其中,通过单片机对现场检测到的温、湿度实时参数与所设定的温、湿度控制参数进行比较,若发现现场监测值超出所设定范围,则蜂鸣器发出报警提示。此外,数据通信完成温、湿度检测系统与上位PC机之间的协议化通信,以便上位PC机能够定时读取测控系统的温、湿度参数。
系统程序流程图如图4-1所示:
20
黑龙江农垦科技职业技术学院毕业论文
开始 while
显示温湿度参数
Y
图4-1 温湿度检测系统程序流程图
系统初始化 设定报警范围 读取温、湿度控制参数 键盘扫描 温、湿度数据采集 温湿度是否 超出范围 报警 发送温湿度到上位机 21
黑龙江农垦科技职业技术学院毕业论文
4.2 温湿度采集子程序设计
本设计中温湿度检测模块采用数字温湿度传感器DHT11,当用户MCU发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采集,用户可选择读取部分数据。该模式下,DHT11接收到开始信号触发一次温湿度采集,如果没有接收到主机发送开始信号,DHT11不会主动进行温湿度采集,采集数据后转换到低速模式。
DHT11工作过程如下:
总线空闲状态为高电平,单片机把总线拉低等待DHT11响应,单片机把总线拉低必须大于18毫秒,保证DHT11能检测到起始信号。DHT11接收到单片机的开始信号后,等待单片机开始信号结束,然后发送80us低电平响应信号。主机发送开始信号结束后,延时等待20-40us,然后读取DHT11的响应信号,单片机机发送开始信号后,可以切换到输入模式或者输出高电平,总线由上拉电阻拉高。
当总线为低电平时,说明DHT11发送响应信号。DHT11发送响应信号后,再把总线拉高80us,准备发送数据,每一bit数据都以50us低电平时隙开始,高电平的长短决定了数据位是0还是1。如果读取响应信号为高电平,则DHT11没有响应,请检查线路是否连接正常。当最后一bit数据传送完毕后,DHT11拉低总线50us,随后总线由上拉电阻拉高进入空闲状态。
温湿度采集子程序见附录。
4.3 液晶显示子程序设计
本设计中采用标准的1602液晶显示屏。1602液晶模块内部的字符发生存储器(CGROM)已经存储了192种字符(160个5×7点阵字符和32个5×10点阵字符),这些字符包括阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码。本模块字符在LCD显示屏上的显示位置与该字符的字符代码在显示缓冲区DDRAM内的存储地址一一对应。液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,即告诉模块在哪个位置显示字符。
1602液晶显示流程图如下图4-2所示,液晶显示子程序见附录。
22
黑龙江农垦科技职业技术学院毕业论文
入口
获得显示RAM地址
返回主程序 图4-2 液晶显示流程图
对1602初始化,写入显示命令 延时 检测忙信号 Sta7=0? 延时 写入相应数据 数据显示完毕? 4.4 键盘扫描软件设计
在单片机应用系统中,扫描键盘只是CPU的工作任务之一。在实际应用中,要想做到既能及时响应键操作,又不过多地占用CPU时间,就要根据应用系统中CPU的忙闲情况,选择好键盘的工作方式。键盘的工作方式一般有编程扫描方式和中断扫描方式两种,由于本设计中可以利用CPU在完成其他工作的空余,调用键盘扫描子程序,来
23
黑龙江农垦科技职业技术学院毕业论文
响应键输入要求,因此可以选用编程扫描方式。
4.4.1 键盘扫描功能
本设计中键盘扫描程序具备下述四个功能:
(1)判别键盘上有无键按下。其方法为:扫描口输出全扫描字“0”(即各列均为低电平),读各行的状态,若全为“1”,则键盘无键按下,若不全为“1”,则有键按下。
(2)去除键的抖动影响。其方法为:判别到有键按下后,软件延时一段时间(本设计为10ms)后,在判断键盘状态,如果仍有键按下状态,则认为有一个确定的键被按下,否则按键抖动处理。
(3)求按键位置。根据前面介绍的键扫描方法,逐行逐列进行扫描,最后确定按下键的键号。确定键号的方法为:闭合键的键号处于低电平的行首键号加上处于低电平的列号。此外,闭合键的键号也可以用计算的方法获得,计算公式为:处于低电平的行号×4+低电平的列号。
(4)判别按键是否释放。键闭合一次仅进行一次键功能操作,等键释放以后再将键值送入累加器A中,然后执行键功能操作。
4.4.2 键盘扫描工作原理
键盘中行线通过上拉电阻接+5V,平时无按键动作时,行线处于高电平状态,而当有按键按下时,则对应的行线与列线短接,行线电平状态由与此行线相连的列线电平决定。
本设计中对键盘的扫描方式为行扫描,即将行线接到单片机的输入口线,列线接到单片机的输出口线,在单片机的控制下,即可判别键盘中究竟是哪一个按键被按下。其方法是:先令第一列列线为低电平(0),其余3根列线为高电平,读行线状态。如果第1、2、3、4行都为高电平,则第一列没有键闭合;如果读出的行线状态不全为高电平,则为低电平的行线与第一列相交的键处于闭合状态。如果第一列没有键闭合,接着使第二列为低电平,其余列线为高电平。用同样的方法检查第二列上有无键闭合,依此类推,最后使第四列为低电平,其余列为高电平,检查第四列有无键闭合。
24