版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
题目:孵化室温湿度控制系统设计页引言一个智能化的孵化室温湿度控制系统,是对孵化室内的环境进行能够实时监控,及时显示孵化室内的温湿度,在满足一定的控制范围内,孵化室能够正常运行,当超过设置的范围时,能及时做出反应,对孵化室进行升降温度和加减湿度,以达到最佳的孵化环境。系统设计中将采用MCS-51系列的STC89C52单片机作为智能控制芯片,对传感器采集的温湿度信号进行分析计算处理,分别发送至液晶显示屏幕和继电器模块,液晶显示屏显示孵化室的温度湿度数值大小,继电器模块对孵化室内温湿度进行控制改变,从而为孵化室提供一个最佳孵化环境,减少了人工操作的不稳定性和高成本问题。第1章绪论1.1课题研究的背景随着生活水平的不断提高和社会的不断进步,大多数人们都迈入了小康的生活,对物质生活的要求也在不断的提升,尤其是在衣食住行方面,与前几十年想比,有了明显的改变。民以食为天,在吃的方面,现在人们吃的东西越来越丰富,营养也越来越得到提升,其中禽类动物因为具有较高的营养价值、价格便宜等优点,成为了老百姓餐桌上不可缺少的菜品,但是想要能够养殖出高质量、大规模化的鸡,那么在孵化过程中对种蛋的选择和孵化环境就提出了更高的要求,在保证禽蛋的出壳率的同时,还要保证新生雏鸡的健康率。近几十年间国内的养禽业正在飞速的发展,特别是肉用崽鸡的需求发展迅速,导致了一些规模化的禽业养殖厂家在不断收购农民土地,扩大禽类的养殖规模,与此同时对禽蛋类孵化设备的需求量也急剧增加,有需求就有市场,这就加速了孵化设备的不断改进,然而家禽孵化是一个对温度和湿度都要求很严格的过程,国内一些专业的禽蛋孵化企业在大批量的统一孵化禽蛋时还是主要以人工去操控孵化室的温度和湿度的方法,人为的去操控孵化室内的温度和湿度是一个消耗人力和消耗时间的方式,这对孵化的成本极大的增加了,而且孵化过程效率低下。因此一个拥有高度智能化的孵化室温湿度控制系统会拥有很大的市场。1.2课题研究的意义MCS-51单片机是一种集成度特别高的电路智能控制芯片,具有处理数据、存储RAM、计时器和中断系统等多种功能,因为具有操作简单、高性价比和体积小等特点,所以经常在各种中小型智能设计控制当中都可以发现。想要孵化室能够实现全程的温度和湿度自动化检测和控制,那么采用单片机来控制无疑是最优的选择方案,采用单片机设计的孵化室温度和湿度控制系统,能够即时精准的显示孵化室内的温度和湿度的变化,人们还可以通过液晶显示屏直观的观察孵化室温湿度变化,通过孵化室内的升温或降温设备控制最佳孵化温度范围,加湿或降湿设备控制到设定的最佳孵化湿度范围,如果将这套智能化的控制系统安置在孵化室内,将会为禽蛋孵化提供了更加适宜的环境,同时节省了传统高昂的人工费用和降低了人工操作中存在的失误率,也有利于大批量的孵化禽蛋。1.3课题研究的主要内容随着社会的不断发展和技术的不断进步,各种各样的单片机也在不断推出新功能以及更高的性价比,单片机的应用在日常生活中也越来越广泛。本设计结合STC89C52单片机的功能来针对孵化室对温湿度的要求,运用单片机智能控制编程技术设计出一个具有温湿度采集、保持温湿度大小和温湿度范围设定等功能的孵化室温湿度控制系统,在制作过程中,要注重理论知识和实践操作相结合,加深对单片机、温湿度传感器、LCD显示屏的认识,运用所学的专业理论知识独立思考分析和解决实际问题,熟悉单片机控制系统的设计方法和编程思路。第2章系统总体方案设计2.1功能要求孵化室控制系统主要实现的功能包括通过单片机控制温湿度感应传感器检测环境,然后将采集的模拟环境因素变成数字信号,传递回单片机控制芯片,再有单片机做出反应,对温度调控器和湿度调控器进行调控,改变孵化室的温度和湿度。具体要求如下:当孵化室内温度低于38℃时,单片机控制芯片发出信号给温度调控器,加热孵化室。当孵化室内温度高于38℃时,单片机控制芯片发出信号给温度调控器,温度调控器对孵化室进行散热,降低孵化室温度。当孵化室湿度低于50RH时,单片机控制芯片发出信号给湿度调控器,加湿孵化室。4.当孵化室湿度高于60RH时,单片机控制芯片发出信号给湿度调控器,湿度调控器对孵化室进行干燥,减少孵化室内湿度。2.2总体设计框图图2-1总体设计框图报警电路温湿度传感器采集部分温湿度控制器部分LCD液晶显示部分部分STC89C52单片机以单片机为主控制核心芯片,然后外围电路分模块来进行对孵化室的温湿度的采集、温湿度液晶显示和温湿度的改变等功能。总体设计框图如图2-1所示;图2-1总体设计框图报警电路温湿度传感器采集部分温湿度控制器部分LCD液晶显示部分部分STC89C52单片机2.3设计方案2.3.1单片机型号的选择微控制器是一种具有高集成度电路的智能控制芯片。他是一个小而完善的微型计算机系统,采用超大规模集成电路技术,把中央处理器、只读存储器、中断系统、随机存储器、各种输入输出端口和具有数据处理能力的定时器/计数器等功能集成到一块硅片。它广泛应用在智能控制领域。方案一:AT89C52单片机是ATMEL公司生产的一种高性能、低压MOS型8位单片机。该器件采用ATMEL公司的非易失性高密度存储技术,兼容标准的MCS-51指令系统、片上闪存单元和通用8位中央处理器,AT89C52单片机广泛应用于微电子控制行业,它主要用于收敛调节控制的功能。方案二:STC89C52RC单片机是STC公司生产的一种具有8K字节系统可编程闪存的单片机,该器件还具有高性能、低功耗的特点。除了标准功能外,它还支持2种软件能够自主选择节电模式,有降至0Hz的静态逻辑操作的功能。通过对比上面两种型号的单片机,基于数字电路的知识和单片机的原理,选择的是市场上常用的STC89C52单片机作为控制芯片,STC89C52单片机的指令系统与AT89C52系列完全兼容,虽然采用了经典的MCS-51内核,但是STC89C52做了很多改进,使芯片具备了传统51单片机所不具备的功能,另外,AT89C52不带ISP下载,需要一个下载器才行,STC89C52可以通过您的USB接口下载到串口,下载的软件可以下载到STC制造商的网站上。2.3.2温湿度传感器的选择方案一:采用分开的温湿度传感器(1)温度传感器的选择单独使用的温度传感器有很多型号选择,在日常生活中最常见的数字温度传感器DS18B20,模拟温度传感器AD590k及热敏电阻等等。数字温度传感器控制精度差,无法进行自动化温控系统,在需要测量温湿度两个参数时,需要分别编写程序。(2)湿度传感器的选择湿度传感器主要分为三种类型:出式集成、输出集成、输出式集成。所用的大多数传感器都是集成输出型,以高频HF3223为代表,采用模块化结构,在55%相对湿度下输出频率为8750赫兹。这些传感器具有抗干扰能力强、线性度好、价格低廉、易于安装便数字电路或单片机等优点。方案二:采用一体式的温湿度传感器DHT11是国内常见的温湿度传感器型号,湿度精准度为±5%RH,温度精准度为±2摄氏度,适用湿度范围为20-90%RH,适用温度范围0-50摄氏度。它响应迅速、抗干扰能力强、性价比高。综上分析,选择分开的传感器稍显复杂,采用一体式温湿度传感器既能满足设计要求,而且简便易行。DHT11本身自带A/D转换功能,能将检测到的温湿度直接传递给单片机,在编程方面更加简介易懂。2.3.3显示器的选择选择使用LCD1602来作为显示电路,LCD具有显示内容丰富、功耗低、体积小等优点,设计者可以根据自己的实际设计需求,显示出自己需要的数字和图标,当显示的数据较为复杂的时候,液晶显示屏所特有的功能就更加突出了,液晶所显示的数据更加生动。如图2-2所示LCD1602的实物图。图2-2LCD1602液晶显示屏正面实物图第3章硬件电路设计3.1STC89C52单片机设计图3-1STC89C52引脚图STC89C52单片机是STC公司生产的单时钟/机器周期的增强型8051单片机,是有抗干扰能力强、功耗低、运行速度快等特点的新一代51单片机,它内部集成了专用复位电路和4KB的存储器,拥有32位输出输入端口。如3-1所示单片机的引脚图。图3-1STC89C52引脚图3.1.1单片机主要参数(1)工作承受电压:3.8V~2.0V(3V单片机)/5.5V~3.3V(5V单片机)(2)工作频率范围:0~40MHz,实际工作频率能够达48MHz(3)工作温度范围:-40~+85℃(工业级)/0~75℃(商业级)(4)具有EEPROM存储功能(5)能够实现在系统编程,不需要专用编程器,直接通过输入输出端口下载程序3.1.2单片机最小系统单片机最小系统主要包括外围电路、时钟电路、复位电路、电源电路等。图3-2STC89C52单片机最小系统图如图3-2所示,单片机的XTAL1、XTAL2引脚接晶振电路;单片机的RST复位引脚接一个复位电路;EA接使能端。单片机的P0.0~P0.7分别接LCD1602显示屏的数据引脚;P2.0、P2.1、P2.2、P2.3串口分别接按键设置电路,对应的功能分别是设置、加、减、确定,通过按键来设置温度和湿度的上下限输入;P3.1、P3.2、P3.3、P3.4串口分别接温湿度控制电路,对应的功能分别是加温、降温、减湿、加湿,通过控制电路来实现孵化室的温湿度改变;P3.5是一个报警电路;P1.0、P1.1接一个存储器件;P1.7是一个数据收集串口,温湿度传感器采集到信号通过P1.7口传递给单片机。3.2DHT11温湿度传感器模块设计3.2.1DHT11简介DHT11传感器是一款集成了湿度传感器和温度传感器为一体的复合型传感器,能够同时检测温度和湿度,内部结构包含一个采集湿度的电阻式感湿元器件和一个采集温度的NTC测温元器件,通过一个数据引脚与单片机串口连接。因为其低功耗、体积小、集成更加简易快捷等特点收到大众的喜爱。如图3-3所示传感器实物。图3-3DHT11实物图3.2.2DHT11主要参数(1)工作电压:5.5V~3.3V(DC)(2)分辨率:湿度为1%RH,温度为1℃(3)工作测量范围:湿度范围为20~90%RH,温度范围为0~50℃(4)测量精准度:湿度±5%RH,温度±2℃(5)单总线数字输出3.2.3DHT11的电气特性当VCC=5V,T=25℃的时,DHT11温湿度传感器的电气特性如表3-1。表3-1DHT11的电气特性参数条件MinTypMax单位供电DC355.5V供电电流测量0.52.5mA平均0.21mA待机100150uA采样周期秒1次3.2.4DHT11的连接方式DHT11温湿度传感器有4个引脚,分别为VDD、DATA、NC、GND,想要DHT11温湿度传感器能够正常工作,VDD引脚需要供电3-5.5V的直流电,DATA引脚时串行数据,单总线,NC引脚是空脚,需要悬空设置,GND引脚是接地的,或者接电源负极。具体连接方式可见图3-4。图3-4DHT11连接方式切记传感器的正负极不可接反,否则极易烧坏DHT11温湿度传感器,将会导致后续没有采集到的温湿度数据显示。仿真中的原理图连接方式如图3-5所示,DHT11的数据端口接在单片机的P1.7串口,由于测量范围电路小于20米,所以原理图上加了一个10K的上拉电阻。图3-5DHT11原理图连接方式3.2.5DHT11的封装信息DHT11的封装信息如图3-6所示。图3-6DHT11封装图3.3LCD1602液晶显示模块设计3.3.1LCD1602简介液晶显示模块是一种点阵式液晶显示器,能够显示符号、数字、字母等。目前,市场上常用的模块有16*1、16*2、20*2和40*2行,设计采用的是16*2字符型液晶显示屏,能够同时显示16*2,即总共可以显示32个字符,每行16个字符,这16个字符液晶显示字符和数字。具体实物见图2-2,3-7所示。液晶显示器分为两种,一种有背光,另一种没有背光。,通用字符型液晶显示器都是基于高清44780液晶芯片来实现的,控制原理完全一样,有背光的液晶显示器比没有背光的液晶显示器的厚度厚,但是在实际应用中,有背光和没有背光没有差别。图3-7LCD1602液晶显示屏背面实物图3.3.2LCD1602主要参数(1)工作电压:4.5~5.5V(2)工作电流:2.0mA(5.0V)(3)字符尺寸:2.95*4.35(W*H)mm(4)内含复位电路(5)拥有80字节DDRAM显示数据存储器3.3.3LCD1602连接方式LCD1602显示电路引脚如图3-8所示,一共有16个引脚。数据端为D0~D7,这是一个双向的数据端。图3-8LCD1602显示电路引脚图如图3-9所示,当连接显示原理图时,LCD的引脚1连接到电源的地线,引脚2接正5V电源,引脚3可以接VCC也可以接GND,当引脚3连接VCC时,LCD的对比度最弱,当引脚3连接GND时,LCD的对比度最高,但是接到GND时,它会产生"鬼影",所以经常通过串联一个10K的电位器来对对比度进行调节。引脚4是LCD内部寄存器选择引脚,当电平为低电平时,选择指令寄存器,当电平为高电平时,选择数据寄存器,在原理图中,引脚4处于悬空状态,引脚5连接到低电平时进行写操作,当引脚5连接到高电平时进行读操作,由于没有从液晶显示屏读取数据,因此只有命令和显示数据被写入显示屏,因此,选择低电平以保证始终处于写入状态。当R/W接受到低电平,RS接收到低电平时能够显示地址或者写入指令,当R/W接收到高电平,RS接收到低电平时可以读忙信号,当R/W接受到低电平,RS接受到高电平时能够写入数据。引脚6作为使能端子,当接受高电平是读取数据,负跳变时执行指令,引脚7到14为双向数据端,与单片机的P0端口相连接,接受单片机发来的信息,引脚15作为背光源的正极连接到VCC,为了避免在模拟中用5V电压直接烧坏背光灯,将一个10欧姆的电阻串联到15引脚上来限制电流,并将引脚16作为背光的负极连接到GND上。图3-9显示电路原理图3.424C02存储模块设计3.4.124C02简介24C02是一种采用IIC总线技术的非易失性EEPROM存储器组件。主要用于断电后寻相互一些数据。在上次运行时保存的数据可以在下一次运行时还能调用。具体实物见图3-10所示。图3-1024C02实物图3.4.224C02主要参数(1)工作温度:工业级:-55℃~+125℃,商业级:0℃~+75℃(2)VCC管脚承受电压:-2.0~+7.0V(3)各管脚承受电压:-2.0~VCC+2.0V(4)输出短路电流:100mA3.4.324C02引脚配置24C02一个有8个引脚,分别为A0~A2、Vss、VCC、WP、SCSDA,引脚图见图3-11所示。引脚功能见表3-2所示。图3-1124C02引脚图表3-2引脚功能表引脚名称功能A0、A1、A2器件地址选择SDA串行数据/地址SCL串行时钟WP写保护VCC+1.8V~6.0VVSS地3.4.424C02连接方式具体连接方式见图3-12所示。SCK接单片机的P1.0口,SDA接单片机的P1.1口,A1、A2、WP接电源正极。图3-1224C02仿真连接方式3.5报警模块设计当温度和湿度超过预设值时,报警电路就会发出报警声音,这种电路是一个结构简单、性能稳定、使用方便、价格低廉的报警电路。如图3-13所示,该电路采用一个小功率三极管来驱动扬声器,单片机接收到报警信号时,P3.5串口输出低电平,三极管导通,扬声器得到电正常工作,发出报警声音。图3-13报警电路原理图3.6继电器控制模块设计想要控制孵化室内的温湿度,就需要大功率电热丝、风扇、超声波加湿器等大功率执行器件,而单片机的输出电压为3.3V,不足以驱动大功率设备,为了有效驱动和控制这些设备采用继电器的驱动方式来控制这些大功率设备。电磁继电器一般由衔铁、线圈、触点簧片、铁芯等组成,电路中继电器提供一个开关的作用,图3-14所示。图3-14继电器原理图3.7按键控制模块实设计在设计中,为了更好的对孵化室的温湿度范围进行控制,在P2口安装了按键电路,提供按键实现孵化室温湿度阈值的设定,见图3-15所示,P2.0口设置的按键功能是确定功能,P2.1口设置的按键功能是设置功能,P2.2口设置的按键功能是加功能,P2.3口按键设置的按键功能是减功能。图3-15按键功能原理图3.8硬件实物图将上面的各个功能元器件安装原理图焊接在一起,就做出了一个完整的孵化室温湿度控制系统,提前规划好元器件的位置,有利于后面排线不至于混乱。具体硬件实物图见图3-16所示。图3-16硬件实物图第4章系统软件设计4.1程序设计一个完整的设备,一定是硬件与软件的完美结合,由此可知软件部分设计也是至关重要的。在对软件的设计中,按照图4-1的思维方式进行设计。图4-1思维步骤图KeiluVision是KeilC51forwindows的集成开发环境IDE,可以实现软件编辑、调试、连接、编译等完整的开发过程,编程人员在完成程序的编写后,通过运行编译,最终会生成一个标准的hex目标文件,将目标文件加入到搭建好的仿真软件里,就可以实现仿真功能。与汇编相比,C语言的紧凑、简洁易懂,在使用中方便灵活,在功能上、结构性、可续性、可维护性上有明显的优势,因此在编程中选择C语言来进行编程,网上的教学视频易学易用。4.1.1主程序流程框图如图4-2所示,单片机上电后,首先进入数据初始化状态,然后开始工作,DHT11进行温湿度测量,将采集到的信号发给单片机,单片机发送数据到LCD1602液晶显示屏上,显示屏显示出当前孵化室内的温湿度,在收到传感器采集到的信号同时,单片机会进行温湿度判断,判断采集到的孵化室温湿度与设置的阈值的大小,当检测到温度高于设置的阈值时,会同时发送两个信号分别到报警电路和继电器控制加热电路,报警电路发出警示声音,继电器收到单片机发送的信号,闭合弹簧,形成通路加热丝进行加热工作,使孵化室内的温度上升,一直到设置的温度范围内,当检测到温度低于设置的阈值时,也会发送两个信号,一个到报警电路,报警电路发出警示声音,另一个到继电器控制降温电路,继电器闭合,风扇开始运作,对孵化室进行吹风降温。使孵化室内温度降低,一直到设置的温度范围内,当检测到孵化室内湿度高于设置的阈值时,报警电路收到信号发出警示声音,继电器控制减湿电路运行,风扇工作,对孵化室内进行降湿,当湿度低于设置的阈值时,报警电路发出警示声音,继电器控制加湿电路运行,超声波加湿电路开始运行,对孵化室进行加湿处理。报警电路图4-2湿控电路工作超过设置湿度范围温控电路工作超过设置温度范围1602显示数据判断温湿度单片机采集信号上电温湿度测量初始化主程序流程框图报警电路湿控电路工作超过设置湿度范围温控电路工作超过设置温度范围1602显示数据判断温湿度单片机采集信号上电温湿度测量初始化4.1.2DHT11工作过程如图4-3所示,单片机P1.7串口发送启动信号(低电平),DHT数据端口接收到信号由低速模式变为高速模式,一直到启动信号结束(电平拉高)后,DHT数据端口发送一个信号表示对单片机的响应,发出40位的数据,同时触发信号开始采集。注意:DHT数据总线处于空闲状态时,它是高电平的,单片机的P1.7串口把总线拉低(低电平)以等待DHT响应,低电平维持时间需要超过18ms,以确保DHT能够检测到启动信号。DHT接收到单片机的启动信号,直到启动信号结束后,才会发送低电平响应信号,P1.7串口启动信号结束后,等待20-40us,读取DHT的响应信号,P1.7串口发送启动信号后,可以切换到输入模式,或者输出高电平均可,数据总线会被上拉电阻拉高。P1.7串口发送启动信号后,等待20us-40us读取DHT发送的响应信号,当读取总线处于低电平(0电平),这意味着DHT在发送响应信号,需要拉高总线,准备发送采集到的数据,每一位数据都以低电平开始,如果出现响应信号为高电平(1电平)时,则DHT没有响应。图4-3是否是否是否结束并保持高电平将数据按十进制数位存入数组单片机接受数据从机80us低电平是否结束从机80us高电平是否结束判断P1.7引脚是否为低电平开始延时40usP1.7输出高电平延时18msP1.7输出低电平DHT11传感器程序流程图是否是否是否结束并保持高电平将数据按十进制数位存入数组单片机接受数据从机80us低电平是否结束从机80us高电平是否结束判断P1.7引脚是否为低电平开始延时40usP1.7输出高电平延时18msP1.7输出低电平4.1.3LCD1602液晶显示屏工作过程LCD显示程序中包括两部分程序,分别是初始化子程序和LCD显示程序。LCD有四种状态,包含写命令操作、读数据操作、写数据操作、读状态操作,具体见表4-1所示。表4-1LCD的四种基本状态RSR/W操作00写命令操作(初始化、光标定位等)01读状态操作(读忙标志位)10写数据操作(要求显示内容)11读数据(可以把显示存储区的数据反读出来)初始化结束输入方式设置延时1.52ms清屏显示状态设置功能设置延时37ms延时20ms上电如图4-4LCD初始化流程图所示,LCD上电后,首先是延时20ms,进行功能设置,然后延时37ms,进行显示状态的设置,包括设置开显示、不显示光标、清屏等操作,最后再延时,进行输入方式的设置。初始化结束输入方式设置延时1.52ms清屏显示状态设置功能设置延时37ms延时20ms上电图4-4LCD初始化流程图进行完了LCD的初始化,接下来就是显示程序的设计,包括光标定位、确定显示字符等,显示流程图如图4-5所示,图4-5结束显示第二行内容设置第二行显示地址显示第一行内容设置第一行显示地址延时LCD初始化开始LCD显示流程图结束显示第二行内容设置第二行显示地址显示第一行内容设置第一行显示地址延时LCD初始化开始4.1.4按键扫描工作过程设计中还安装了四个独立按键,分别对应的功能是对系统内温湿度范围进行调控,当检测到第一个按键设置按键按下的时候,系统进行温湿度阈值可改变状态,默认改变第一个是温度,再按一次设置按键,转换到湿度可调节状态,检测到第二个按键按下时,在第一个状态下对温湿度进行加操作,检测到第三个按键按下时,同理对相对应状态下的温湿度进行减操作,当把所需要的温湿度范围设置完全时,最后按下第四个确定键,系统又进入工作状态,在工作状态下,不能对温湿度进行调节。程序流程图如图4-6所示。按键扫描开始图4-6按键扫描流程图温湿度减1进入设置功能结束设置功能温湿度加1确定按键是否按下减按键是否按下加按键是否按下设置按键是否按下按键扫描开始温湿度减1进入设置功能结束设置功能温湿度加1确定按键是否按下减按键是否按下加按键是否按下设置按键是否按下4.2系统仿真设计程序的部分完成了,接下来就是系统的仿真部分,在电脑上使用仿真软件将所需要的电路搭建出来,然后输出程序就可以实现仿真功能。常用的仿真软件有Proteus和AltiumDesigner(简称AD)两种,AD是仿真软件中第一款同时也是唯一一个拥有完整的板级设计解决方案的软件,它是第一个将基于处理器设计、可编程器件设计、集成电路板设计和设计过程集成嵌入式软件开发功能集合在一起的仿真软件。它能够同时进行嵌入式设计、FPGA设计和PCB解决方案,能够将设计者策划的方案从理论转变成实际产品的所需全部功能。Proteus是能够进行单片机及其外围设备组成的智能系统的仿真、数字电路仿真和模拟电路仿真的仿真软件。相比之下,AD的特点就是能够进行强大的PCB板设计和简单的数字/模拟电路的仿真,而Proteus可以进行单片机和ARM的仿真、直观的模拟/数字电路,在操作上更加基础和简单。所以选择使用Proteus作为孵化室温湿度控制系统的仿真软件。如图4-7所示,在Proteus中按照需要找出元器件,搭建好一个完整的原理图。图4-7Proteus中搭建原理图第5章系统程序调试和下载5.1系统程序调试整个系统程序包括温湿度系统控制主程序,还有传感器采集程序、LCD显示程序和按键程三个子程序。主程序通过调用三个子程序,来实现不同的功能。当系统某个电路不能正常工作时,就可以通过调试子程序的方法来判断电路是否正确,这样来提高效率。5.1.1传感器程序调试如图5-1所示,传感器程序包括延时程序、延时函数和读取温湿度函数三部分构成,首先进行初始化,需要调用延时程序,然后进入循环语句,读取温湿度大小,定义了温度的高8位和低8位,湿度的高8位、低8位,接受到主机的接受信号,传感器进入数据传输状态,并且进行数据校验。当一直没有接受到信号时,查看是否延时程序出现了问题,导致传感器没有正确进入数据传输状态图5-1传感器程序调试5.2.1LCD程序调试如图5-2所示,想要改变液晶中某位的值,就需要调用以下函数,每一行所对应的地址不一样,把行和列的数据加起来,发送行列数据进入循环,发送完字符串后跳出循环,没法送完就继续发,字符串指针地址加1.最后显示的数据要取绝对值。图5-2LCD程序调试图5.3.1按键程序调试如图5-3所示,设置按键按下,LCD进入初始化设置界面,第一行显示温度和湿度的上限,第二行显示温湿度的下线,选中第一个位置闪烁,开始设置,直到设置完最后一位数字大小,按下确认按键,退出数字状态,恢复待机显示界面。图5-3按键程序调试图5.4.1主程序调试如图5-4所示,主程序开始关闭定时器,定时器初始化,数据初始化,打开定时器,液晶显示初始化,调用传感器程序、液晶显示程序、按键程序,显示测试的温湿度。当返还的温湿度超过数字的范围时,会打开继电器开关,控制温湿度。图5-4主程序调试图5.5.1程序仿真在Keil上完成程序的编译无错功能后,设置编译生成一个hex文件,如图5-5所示,图5-5生成hex文件启动Proteus软件,打开搭建好的原理图,双击单片机会有一个弹窗出现,如图5-6所示,然后将Keil编译产生的hex文件加载到单片机里,点击运行,开始仿真。观察LCD是否有数字显示,单片机是否正常工作,最后在调试按键功能是否正常。图5-6添加hex文件图当一切都调试好,就会看见LCD上实时显示孵化室内温湿度的大小,还有对应指示灯的亮灭,如图5-7所示。图5-7实现仿真功能图5.2系统实物搭建和程序下载5.2.1系统实物搭建按照原理图,规划好所需要的元器件清单,都尽量有备份使用,然后开始焊接实物图,在焊接的过程中,注意元器件的引脚,在仿真时的原理图和实际元器件的引脚图是有区别的。具体实物图如图3-16和图5-8所示。图5-8硬件实物背面图5.2.2系统程序下载在Proteus上实现了功能的仿真,焊接完了实物,接下来就可以把程序烧录进单片机里面了,打开STC-isp-v6.85H烧录软件,在烧录前需要对烧录软件进行一些设置。首先选择芯片为STC89C52RC,然后找到对应的COM串口,打开编译好的程序文件,程序文件是以hex为后缀,选中hex文件,最后点击Downlode/下载,因为是冷启动烧录程序,所以需要点击下载后再开启电源键。详细如图5-9所示。图5-9STC烧录软件配置图第6章结束语本系统是以STC89C52单片机为核心、外围电路来辅助实现功能的单片微型计算机,通过传感器采集电路、继电器控制电路、按键控制电路、LCD液晶显示等,能够单独完成对孵化室内温度和湿度的实时检测、显示、控制和报警等功能,还可以通过按键控制电路实现人机交互的功能,基本实现了各项要求。经过几个月的奋斗,从选择确定题目,到查找相关文献,理论学习,编程和仿真软件的具体操作,焊接实物,系统调试,这一个完整的项目让我学习了很多,对单片机的硬件结构和软件编程方法有了更深的理解,特别是DHT11温湿度传感器,第一次接触这类传感器,从一无所知到能够完成孵化室的温湿度检测及显示,说明只要愿意努力去学习,总会有收获的。毕设过程中要虚心请教指导老师和网上查找相关资料,现在是一个网络社会发达的时代,要学会合理利用资源。参考文献[1]陈明荧.8051单片机课程设计实训教材[M].北京:清华大学出版社,2003.[2]徐新艳.单片机原理、应用与实践[M].北京:高等教育出版社,2005.[3]吴金戌,沈庆阳,郭庭吉.8051单片机实践与应用[M].北京:清华大学出版社,2002.[4]王千.实用电子电路大全[M].电子工业出版社,2001.[5]冯博琴.微型计算机原理与接口技术[M].北京:清华大学出版社,2004.[6]张毅刚.MCS-51单片机应用设计[M].哈尔滨工业大学出版社,2004.[7]张淑清,姜万录等.单片微型计算机接口技术及应用[M].国防工业出版社,2003.[8]吴金戌,沈庆阳,郭庭吉.8051单片机实践与应用[M].北京:清华大学出版社,2001.[9]冯博琴.微型计算机原理与接口技术[M].清华大学出版社,2004.[10]张毅刚.MCS-51单片机应用设计[M].哈尔滨工业大学出版社,2004.[11]赵亮,侯国锐.单片机C语言编程与实例[M].北京:人民邮电出版社,2003.[12]王振红,李洋,郝承祥.ISD4004语音芯片的工作原理及其在智能控制系统中的应[J].电子器件2002年3月第25卷第1期.[13]R.L.Geiger,P.E.Allen,N.R.Strader.VLSI.DesignTechniquesforAnalogAndDigitialCiruits,McGraw-HillInc.1990.
致谢致谢所有在毕设过程中能够给予帮助的老师和同学,特别是两位蒋雪琴和笪贤进导师,在毕设过程中不耐其烦的为我讲解毕设遇到的问题,即便一些在他们看来很基础的问题,依然认真为我讲解,在论文过程中给我指导批改英文翻译、开题报告、文献综述等。即便因为疫情影响,大家没有在线下见面,但是我仍然可以感受到导师和同学们的热情。在大家帮助下,我收获了丰富的理论知识,提高了动手实践能力,巩固我的专业知识,并让我对当前电子行业的发展方向有了一定的理解,便于毕业后找工作。在两位导师的耐心指导下,设计的系统基本达到了题目的要求,相信这次一定会给我的人生留下一笔深刻的痕迹。最后,由衷的对于给予过我帮助的所以导师以及各位同学表示感谢。附录#include<reg52.h>#include<intrins.h>#include<absacc.h>#include<math.h> //包含头文件#defineucharunsignedchar#defineuintunsignedint //宏定义//定义四个输出端口sbitLed_jiashi=P3^4; //加湿sbitLed_qushi=P3^3; //去湿sbitLed_jiangwen=P3^1; //降温sbitLed_shengwen=P3^2; //升温//定义三个设置按键sbitKey_SET=P2^0; //设置按键sbitKey_ADD=P2^1; //加按键sbitKey_SUB=P2^2; //减按键sbitKey_OK=P2^3; //确定按键//定义24C02数据口sbitSCL=P1^0;sbitSDA=P1^1;//定义DHT11数据口sbitDATA=P1^7;sbitbuzz=P3^5; //蜂鸣器接口//定义LCD1602端口sbitE=P1^3; //1602使能引脚//sbitRW=P2^6; //1602读写引脚 我们只需要向液晶里写数据,不需要读取数据,所以就把读写引脚直接接地,程序里就不用单独控制了sbitRS=P1^2; //1602数据/命令选择引脚//定义全局变量ucharU8FLAG,U8temp,U8comdata,U8RH_data_H_temp,U8RH_data_L_temp,U8T_data_H_temp,U8T_data_L_temp,U8checkdata_temp; //定义读取温湿度变量ucharU8RH_data_H,U8RH_data_L,U8T_data_H,U8T_data_L,U8checkdata;ucharMode,humidity,temperature; //设置模式、读取到的湿度温度数据存储变量charTH,TL,HH,HL; //温湿度的上下限变量bitbdataFlagStartRH,hot,cold,humid,dry,BJ; //开启转换温湿度标志位、热冷湿干和报警变量//定时器0初始化voidTimer0_Init(){ ET0=1;//允许定时器0中断 TMOD=0x11;//定时器工作方式选择 TL0=0xb0; TH0=0x3c;//定时器赋予初值50ms TR0=1;//启动定时器T0}//定时器0中断voidTimer0_ISR(void)interrupt1using0{ ucharRHCounter; //定义计数变量 TL0=0xb0; TH0=0x3c;//定时器赋予初值 RHCounter++; //每进一次中断就是50ms,此变量加一 if(RHCounter%10==0&&BJ==1) //加到10的整数倍,并且报警标志位为1 buzz=!buzz; //开启报警,每500ms蜂鸣器引脚取反一次,就是蜂鸣器一秒响一次 elseif(BJ==0) //报警标志位为0时 buzz=1; //关闭报警 //每2秒钟启动一次温湿度转换if(RHCounter>=40) //计数到40次,就是2s,启动一次温湿度转换{FlagStartRH=1; //启动转换变量置1 RHCounter=0; //计数变量清零}}/*以下程序为24c02的程序,都是官方的实例程序,可以参考时序图理解,都是固定的*//*********************************BASEDRIVE**********************************/voidDELAY(unsignedintt) //延时函数{ while(t!=0) t--;}/******************************IICDRIVE******************************/voidIICStart(void) //24c02的开始函数,SCL=0; //SCL引脚拉低 DELAY(1); //短延时SDA=1;SCL=1;DELAY(1); //SDA拉高,SCL拉高,短延时SDA=0;DELAY(1); //SDA拉低,短延时SCL=0; //SCL拉低}voidIICStop(void) //停止{ SDA=0;SCL=1;DELAY(1); //注释略SDA=1;DELAY(1);SCL=0; }voidSEND0(void) //发送{ SDA=0; SCL=1; DELAY(1); SCL=0;}voidSEND1(void){ SDA=1; DELAY(1); SCL=1; DELAY(1); SCL=0;}bitCheck_Ack(void) //应答{ unsignedcharerrtime=250; //定义变量 DELAY(1); SCL=1; DELAY(1); CY=SDA; //SDA引脚高电平就是1,低电平就是0,赋值给CY while(CY) //如果CY为1,就执行此while { errtime--; //变量减 CY=SDA; //赋值 if(!errtime) //判断有没有减到0 { IICStop(); //停止24C02 return1; //返回1 } } DELAY(1); SCL=0; return0;}voidWrite_byte(unsignedchardat){unsignedchari; for(i=0;i<8;i++) { if((dat<<i)&0x80) SEND1(); else SEND0(); }}unsignedcharRead_byte(void){ unsignedchari,temp=0; for(i=0;i<8;i++) {SDA=1; SCL=1; DELAY(1); if(SDA==1) { temp=temp<<1; temp=temp|0x01; } else temp=temp<<1; SCL=0; } returntemp;}/************************************EEPROMDRIVE Addr:from0x00-->*************************************/unsignedcharrdeeprom(unsignedcharaddr){unsignedchartemp=0; bitflag=0; IICStart(); Write_byte(0xa0);Check_Ack(); Write_byte(addr); Check_Ack(); IICStart(); Write_byte(0xa1); Check_Ack(); temp=Read_byte(); SEND1(); IICStop(); returntemp;}voidwrteeprom(unsignedcharaddr,unsignedchardat){ IICStart(); Write_byte(0xa0); Check_Ack(); Write_byte(addr); Check_Ack(); Write_byte(dat); Check_Ack(); IICStop();}/*以下程序为DHT11温湿度传感器程序,官方的实例程序*/voidDelay1(uintj) //延时程序{uchari;for(;j>0;j--){ for(i=0;i<27;i++);}}voidDelay_10us(void) //延时函数,大约10us,不精确{uchari;i--;i--;i--;i--;i--;i--;} voidCOM(void) //读取温湿度函数{uchari;for(i=0;i<8;i++) { U8FLAG=2; while((!DATA)&&U8FLAG++); Delay_10us(); Delay_10us(); Delay_10us(); U8temp=0;if(DATA)U8temp=1; U8FLAG=2; while((DATA)&&U8FLAG++); //超时则跳出for循环 if(U8FLAG==1)break; //判断数据位是0还是1 //如果高电平高过预定0高电平值则数据位为1 U8comdata<<=1; U8comdata|=U8temp;//0}//rof}ucharRH(void){//主机拉低18msDATA=0; Delay1(180);//原来为5 DATA=1; //总线由上拉电阻拉高主机延时20us Delay_10us(); Delay_10us(); Delay_10us(); Delay_10us(); //主机设为输入判断从机响应信号 DATA=1; //判断从机是否有低电平响应信号如不响应则跳出,响应则向下运行 if(!DATA) //T! { U8FLAG=2; //判断从机是否发出80us的低电平响应信号是否结束 while((!DATA)&&U8FLAG++); U8FLAG=2; //判断从机是否发出80us的高电平,如发出则进入数据接收状态 while((DATA)&&U8FLAG++); //数据接收状态 COM(); U8RH_data_H_temp=U8comdata; COM(); U8RH_data_L_temp=U8comdata; COM(); U8T_data_H_temp=U8comdata; COM(); U8T_data_L_temp=U8comdata; COM(); U8checkdata_temp=U8comdata; DATA=1; //数据校验 U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp); if(U8temp==U8checkdata_temp) { U8RH_data_H=U8RH_data_H_temp; U8RH_data_L=U8RH_data_L_temp; U8T_data_H=U8T_data_H_temp; U8T_data_L=U8T_data_L_temp; U8checkdata=U8checkdata_temp; } return1; } else//传感器不响应 { return0; }}voiddelay() { inti,j; for(i=0;i<=10;i++) for(j=0;j<=2;j++);} voidenable(uchardel){ P0=del; //数据发送到P0口 RS=0; //RS引脚拉低 E=1; //E引脚高电平 delay(); //延时 E=0; //E引脚低电平 delay(); //延时}voidwrite(uchardel){ P0=del; //同上 RS=1; E=1; delay(); E=0; delay();}voidL1602_init(void){ enable(0x38); //设置液晶工作模式,意思:16*2行显示,5*7点阵,8位数据 enable(0x0c); //开显示不显示光标 enable(0x06); //整屏不移动,光标自动右移 enable(0x01);//清屏}voidL1602_char(ucharhang,ucharlie,charsign){ uchara; //定义变量 if(hang==1)a=0x80; //如果hang变量为1,让地址数据为0x80就是第一行的 if(hang==2)a=0xc0; //如果hang变量为0,让地址数据为0xc0就是第二行的 a=a+lie-1; //列数据减一,因为液晶屏的列是从0开始的 enable(a); //发送行和列数据 write(sign); //写显示内容}voidL1602_string(ucharhang,ucharlie,uchar*p){ uchara; if(hang==1)a=0x80; //第一行地址 if(hang==2)a=0xc0; //第二行地址 a=a+lie-1; //行和列数据加一起 enable(a); //发送行列数据 while(1) //进入循环 { if(*p=='\0')break; //发送完字符串后跳出while循环 write(*p); //没发送完就继续发 p++; //字符串指针地址加1 }}//显示整型的温湿度数据用,共占用4位,其中一位符号位voidL1602_int(ucharhang,ucharlie,intnum){uinttemp;uintgewei,shiwei,baiwei,sign;if(num>=0) //如果温度值大于等于0sign=0; //符号为正else //反之sign=1; //符号为负temp=abs(num); //温度值取绝对值baiwei=temp/100; //除以100得到温度值百位temp=temp-baiwei*100; //温度值减去百位得到十位和个位的数shiwei=temp/10; //除以10得到十位的数据gewei=temp-shiwei*10; //减去十位的数据得到个位的数num=abs(num); //温度取绝对值if(num>=100) //如果温度大于100{//L1602_char(hang,lie+1,baiwei+48); L1602_char(hang,lie+2,shiwei+48); //显示十位和个位 L1602_char(hang,lie+3,gewei+48);}elseif(num>=10) //温度大于10{if(sign==1) //负数时 L1602_char(hang,lie+1,'-'); //显示负号 L1602_char(hang,lie+2,shiwei+48); //显示十位和个位数L1602_char(hang,lie+3,gewei+48);}else //温度小于10{if(sign==1) //负数时 L1602_char(hang,lie+2,'-'); //显示负号 else //正数 L1602_char(hang,lie+2,''); //十位不显示L1602_char(hang,lie+3,gewei+48); //显示个位数}}voiddisplay() //显示函数{ if(Mode==0) //不是设置状态 { L1602_int(1,3,temperature); //显示温度数据 L1602_char(1,7,0xdf); //显示摄氏度的° L1602_int(1,12,humidity); //显示湿度数据 if(hot==1&&cold==0&&humid==0&&dry==0) //温度过高 {L1602_string(2,1,"It'sveryhot!");BJ=1;} //显示热,报警 elseif(hot==1&&cold==0&&humid==1&&dry==0) //温度高,湿度高 {L1602_string(2,1,"Hotandhumid!");BJ=1;} //显示热,湿,报警 elseif(hot==1&&cold==0&&humid==0&&dry==1) //温度高,湿度低 {L1602_string(2,1,"Hotanddry!");BJ=1;} //显示热,干,报警 elseif(hot==0&&cold==1&&humid==0&&dry==0) //温度低 {L1602_string(2,1,"It'sverycold!");BJ=1;} //显示冷,报警 elseif(hot==0&&cold==1&&humid==1&&dry==0) //温度低,湿度高 {L1602_string(2,1,"Coldandhumid!");BJ=1;} //显示冷,湿,报警 elseif(hot==0&&cold==1&&humid==0&&dry==1) //温度低,湿度低 {L1602_string(2,1,"Coldanddry!");BJ=1;} //显示冷,干,报警 elseif(hot==0&&cold==0&&humid==1&&dry==0) //湿度高 {L1602_string(2,1,"It'sveryhumid!");BJ=1;} //显示潮湿,报警 elseif(hot==0&&cold==0&&humid==0&&dry==1) //湿度低 {L1602_string(2,1,"It'sverydry!");BJ=1;} //显示干燥 elseif(hot==0&&cold==0&&humid==0&&dry==0) //都在范围内 {L1602_string(2,1,"Goodenvironment");BJ=0;} //显示环境好,关闭报警 } }/***按键函数***/voidKEY() //按键函数{ if(Key_SET==0) //设置按键按下 { Delay1(200); //延时去抖 if(Key_SET==0) //再次判断按键按下 { Mode++; //显示位加 TR0=0; //关闭定时器 Led_shengwen=1; Led_jiangwen=1; Led_jiashi=1; Led_qushi=1; //关闭四路继电器输出 hot=0; cold=0; humid=0; dry=0; //变量清零 if(Mode==1) //设置第一个位置 { L1602_string(1,1,"TH:CHH:%"); //初始化设置界面,第一行显示温度和湿度上限 L1602_char(1,8,0xdf); //显示摄氏度的° L1602_string(2,1,"TL:CHL:%"); //第二行显示温度和湿度的下限 L1602_char(2,8,0xdf); //显示摄氏度的° L1602_int(1,4,TH); //显示温度上限 L1602_int(1,12,HH); //显示湿度上限 L1602_int(2,4,TL); //显示温度下限 L1602_int(2,12,HL); //显示湿度下限 enable(0x80+6); //选中第一个位置闪烁 enable(0x0f); //开启闪烁 } elseif(Mode==2) //第二个位置 { enable(0x80+0x40+6); //温度上限位置闪烁 enable(0x0f); } elseif(Mode==3) { enable(0x80+14); //湿度上限位置闪烁 enable(0x0f); } elseif(Mode==4) { enable(0x80+0x40+14); //湿度下限位置闪烁 enable(0x0f); } elseif(Mode>=5) //设置完最后一位,回到第一位 { Mode=1; //回到第一位置 enable(0x80+6); //第一个位置闪烁 enable(0x0f); } while(!Key_SET); //按键释放 } } elseif(Key_ADD==0) //加按键 { Delay1(200); if(Key_ADD==0) { if(Mode==1) //设置温度上限 { TH++; //温度上限加 if(TH>=100) //加到100 TH=99; //赋值99,也就是最大能加到99 L1602_int(1,4,TH); //显示温度上限 enable(0x80+6); //因为送显示数据了,闪烁的位置会自动右移,所以这里要指定要闪烁的位置 wrteeprom(0,TH); //将上限值写入AT24C02芯片 } elseif(Mode==2) //设置温度下限 { TL++; //加 if(TL>=TH) //下限不能比上限高 TL=TH-1; //下限只能加到比上限小一 L1602_int(2,4,TL); //一下注释同上,略 enable(0x80+0x40+6); wrteeprom(1,TL); } elseif(Mode==3) { HH++; if(HH>=100) HH=99; L1602_int(1,12,HH); enable(0x80+14); wrteeprom(2,HH); } elseif(Mode==4) { HL++; if(HL>=HH) HL=HH-1; L1602_int(2,12,HL); enable(0x80+0x40+14); wrteeprom(3,HL); } while(!Key_ADD); } } elseif(Key_SUB==0) //减按键 { Delay1(200); if(Key_SUB==0) { if(Mode==1) { TH--; if(TH<=TL) TH=TL+1; L1602_int(1,4,TH); enable(0x80+6); wrteeprom(0,TH); } elseif(Mode==2) { TL--; if(TL<=0) TL=0; L1602_int(2,4,TL); enable(0x80+0x40+6); wrteeprom(1,TL); } elseif(Mode==3) { HH--; if(HH<=HL) HH=HL+1; L1602_int(1,12,HH); enable(0x80+14); wrteeprom(2,HH); } elseif(Mode==4) { HL--; if(HL<=0) HL=0; L1602_int(2,12,HL); enable(0x80+0x40+14); wrteeprom(3,HL); } while(!Key_SUB); } } if(Key_OK==0&&Mode!=0) //确认按键 { Delay1(200); if(Key_OK==0) { L1602_string(1,1,"Tem:CHum:%"); //退出设置状态,恢复待机显示界面 L1602_string(2,1,"Goodenvironment"); Mode=0;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 宜昌市枝江市2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 威海市乳山市2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 鹤壁市鹤山区2025-2026学年第二学期四年级语文第六单元测试卷(部编版含答案)
- 昌都地区洛隆县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 赤峰市红山区2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 曲靖市陆良县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 赣州市兴国县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 鸡西市麻山区2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 广告招商方案
- 深度解析(2026)《CBT 3659-1994压载水遥控阀组控制装置技术条件》:从标准规范到未来舰船智能化应用前瞻
- 关于高考评价体系
- 建筑地基处理技术规范DBJ-T 15-38-2019
- 《燃煤火力发电企业设备检修导则》
- 油田地面工程简介
- 驾照体检表完整版本
- 商铺出租可行性方案
- 2023年非车险核保考试真题模拟汇编(共396题)
- 中国主要地质灾害
- 2022-2023年明纬开关电源手册
- 数据密集型科学研究范式课件
- JJF 2020-2022 加油站油气回收系统检测技术规范
评论
0/150
提交评论