东南大学成贤学院毕业设计报告
第四章 方案设计
设计就是根据题目的要求对软件进行规划,并选择最合适的软件程序来达到目的。
4.1 设计要求
设计的报警器应能实现如下功能:报警器需在一氧化碳浓度达到100ppm时启动报警。 具体实现如下功能:
(1)系统要求设置正常工作状态,除正常工作状态外蜂鸣器处于关闭状态。 (2)当室内一氧化碳浓度达到100ppm时系统应启动蜂鸣器报警。
4.2 系统组成
本次设计是单片机在系统检测以及工程控制方面的应用。它是以AT89S52单片机为核心构成的单片机系统。在此系统中,检测信号进入单片机进行运算处理。为了更好的理清设计思路,将整个系统细分为七个部分进行说明。整个报警器由七个部分组成,即分为七大模块:主控模块、8155扩展并口、键盘模块、浓度检测模块、存储模块、显示模块和报警模块。在本次设计中,使用的核心器件是单片机和一氧化碳传感器。为了保证整个系统的可靠运行,设计中必须明确这七大部分的实际联系:以单片机为中心,其它各大模块一一展开。其中,主控模块以单片机为主,对其它模块的运行进行控制;键盘模块用来实现控制命令及数据的输入;浓度检测模块所实现的功能是将房间中的一氧化碳浓度值转换成为单片机能够处理的数字信号,并且通过显示模块将浓度值显示出来;存储模块主要用来记录存储浓度检测模块所检测的气体浓度的数据;显示模块由LCD液晶显示器构成,主要用来显示浓度检测模块检测的气体浓度;报警模块是此系统的外部电路,它的功能是实现报警。因为本次设计要用到模数转换器ADC0809,所以AT89S52的32个口不够用,因此要用到8155扩展并口。综上,本设计的系统框图如下图4-1所示。
键盘模块 存储模块 报警模块 图4-1 一氧化碳报警器系统组成框图
浓度检测模块 AT89S52 8155 显示模块 31
东南大学成贤学院毕业设计报告
第五章 软件设计
5.1 主程序流程图
主程序的设计流程图如下图5-1所示,当一氧化碳浓度检测系统接通电源时,AT89S52单片机自动复位,然后开始运行主程序。该程序首先对系统进行初始化,然后给出开机显示,告知系统已经通电,可以开始工作了;接着对键盘进行扫描,判断是否有键输入,如果有按键按下,就进行键处理,键处理是包含在键盘扫描中的;再接着测一氧化碳浓度并对数据进行存储和显示;再接着进行数据处理,判断是否需要报警,如果单片机从传感器接受来的数据符合报警条件,单片机就控制报警器报警,最后返回到键盘扫描处,如果不需要报警,则直接返回到键盘扫描处,重新循环。
NO 开始 初始化 键盘扫描 浓度数据采集 数据存储和显示 数据处理 是否需要报警 YES 报警器报警 图5-1主程序流程图
32
东南大学成贤学院毕业设计报告
5.2 ADC0809程序流程图
ADC0809的A/D启动端START由单片机的P2.7与写控制信号/WR经过或非门后控制,转换完成后ADC0809的EOC端信号反向后送入单片机的INT0端,触发单片机外部中断服务程序,在中断程序当中读取A/D。程序流程图如下图5-2所示。
开始
选定通道0
启动A/D转换 延时1ms等待EOC出现高电平 给OE置1,转换后的数据传给单片机
结束
图5-2 模/数转换程序流程图
5.3 存储器AT24C02程序流程图
存储器程序设计时,要特别注意以下两个问题:
(1)AT24C02有一个约10ms的片内写周期 。在该周期内,AT24C02不对外界的操作作出反应。 (2)在发送数据的过程中,要确保当SCL为高电平时,SDA保持稳定。 程序设计分两个过程:写数据过程和读数据过程 (1)在写数据周期依次执行以下过程 ? 发“起始位”。
? 发“写入代码”(8bit),1010(A2A1A0)0。 ? 收“ACK”应答(1bit)。
? 发“EEPROM”片内地址(即要写入EEPROM的位置)(8bit)。从00到FF中的任意一个,
对应EEPROM中的相应位。 ? 收“ACK”应答(1bit)。
? 要发送的数据(8bit),即要存储到EEPROM中的数据。 ? 发“停止位”。
(2)在读数据周期依次执行以下过程
33
东南大学成贤学院毕业设计报告
? 发“起始位”。
? 发“写入代码”(8bit),1010(A2A1A0)0。 ? 收“ACK”应答(1bit)。
? 发“EEPROM”片内地址(即要写入EEPROM的位置)(8bit)。从00到FF中的任意一个,
对应EEPROM中的相应位。 ? 收“ACK”应答(1bit)。 ? 发“起始位”。
? 发“读出代码”(8bit),1010(A2A1A0)1。 ? 接收。
? 发“ACK”应答。 ? 发“停止位”。
向AT24C02写数据程序流程图如下图5-3所示。
开始 发送起始位 检测AT24C02是否准备好 发送数据 接收ACK应答 准备好 YES NO 发送完 YES 接收非应答位 NO 向AT24C02发送“写入”代码 接收ACK应答 向AT24C02发送存储地址 发送停止位 结束 图5-3 向AT24C02写数据程序流程图
从AT24C02读取数据的程序流程图和写入数据的流程图类似,此处不再缀述。
5.4 LCD1602液晶显示器程序流程图
液晶显示器程序流程图如下图5-4所示。
34
东南大学成贤学院毕业设计报告
开始
写第一行首地址
向第一行写入数据
NO 写完
YES
写第二行首地址
向第二行写入数据 NO 写完
YES 结束 图5-4 LCD1602液晶显示器程序流程图
5.5 键盘程序流程图
对于键盘的程序设计,需要及时并且准确地响应按键的动作。在进行单片机键盘接口设计的时候,需要注意如下几个方面。
1、合理的按键编码
按键编码也就是在单片机程序中,每个按键动作对应的键值。当按键按下的时候,键盘将向单片机发送该按键对应的键值,单片机程序对不同的键值做出不同的响应。因此,要求每个按键对应一个唯一的键值。
在硬件结构上,键盘按键使用单片机的I/O线与CPU进行通信,而单片机I/O线接受的是高低逻辑电平信号。因此,不同的键值可以表示为I/O线上不同的高低电平的组合。键盘编码设计的首要任务就是选择合理的键盘结构,为每个按键分配不同的键值,以供单片机程序识别和响应。
2、可靠的输入检测
可靠的输入检测是让单片机程序能够正确无误地识别是否有按键动作,以及是哪个按键按下。键盘的可靠输入是键盘接口设计的关键点。由于键盘的按键均为机械触点,根据触点的机械弹性效应,在按键按下和断开的时候,接触点处会出现抖动,这样可能导致误响应或者多次响应等。因此,对于键盘输入的可靠识别和检测需要在程序中做如下两方面的处理。
(1)消除抖动影响。由于材料机械弹性效应的不同,按键的抖动时间长短不等,一般大致在5ms~10ms之间。根据这个特征,可以在硬件或者软件中采取相应的措施来消除抖动的影响。通常来说,采
35