毕业论文-酒窖无线温湿度测控系统之无线数传系统设计_第1页
毕业论文-酒窖无线温湿度测控系统之无线数传系统设计_第2页
毕业论文-酒窖无线温湿度测控系统之无线数传系统设计_第3页
毕业论文-酒窖无线温湿度测控系统之无线数传系统设计_第4页
毕业论文-酒窖无线温湿度测控系统之无线数传系统设计_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、本科毕业论文(设计)在图3-11中,只要有10毫安左右的电流即可保证压电式蜂鸣器正常工作。因此,使用三极管加5伏特的电压并且并联一个电阻用于驱动蜂鸣器。当P26对应端口有高电平时三极管导通蜂鸣器工作与此同时发光二极管发光警报,否则蜂鸣器以及报警信号灯都不工作。4 软件部分的设计4.1 主程序远程温度传感器的设计思路,因为硬件设计相对比较简单,操作方便,实用性强。由于本系统采用了nRF24L01无线收/发芯片的微机串口通信主要有系统的初始化、串口的无线发送、串口的无线接收、地址的校验、温湿度控制的设定、温湿度的检测以及温湿度的显示 HYPERLINK l _参考文献 14。对于整个系统,组成其的

2、每一个功能实现模块都是有着举足轻重的地位。微型中央数据处理芯片STC89C52只有通过合适的运行代码程序才能实现系统所需要的功能,才能更好地对外部的传感器以及按键发送来的数据或指令实施准确的分析、决策并指令外部传感器模块采集系统最需要的实时数据信息。本系统的软件设计流程如图4-1所示。图4-1 系统总流程图4.2 LCD显示模块子程序LCD1602显示模块必须要先扫描该模块的工作状态标志位,如果工作状态标志位显示该模块正处于忙碌状态则执行显示操作,显示预设显示地址中的字符,否则不执行操作。因而LCD1602液晶显示模块显示过程较为缓慢,但由于LCD1602显示稳定,使用较为便捷(可与中央微处理

3、芯片STC89C52直接连接)且该系统对显示效率要求不高故采用之。LCD显示模块的软件流程如图4-2所示。图4-2 显示流程图4.3 nRF24L01发送模块子程序发送子模块部分实现思路如下,先初始化DHT11,从DHT11读出温湿度(DHT11默认采用8位二进制),将得到的温、湿度值的二进制代码转化为十进制的数值,选择温、湿度数据组中的整数部分送到对外发送数据的数组中。再将nRF24L01执行初始化操作,即可将实时的温湿度信息发送出去。之后再执行延时以及初始化以继续进行下一次采集发送,其流程如图4-3所示。图4-3 发送流程图4.4 nRF24L01接收模块子程序接收子模块部分设计思路与发送

4、端相似,工作之前先初始化nRF24L01无线模块。初始化之后再判断是否有收到中断指令,若接收到中断指令则立即从FIFO_ buffer中读取二进制的数据代码,并将其转换成十进制的数字信息通过单片机在LCD屏上显示,其流程如图4-4所示。图4-4 接收流程图5 联机与调试5.1 硬件仿真因本设计中所用到的部分模块(nrf24l01无线模块),在仿真软件Proteus库中没有,故这里的仿真只针对与测试lcd1062是否可以显示,按键设置模块可否进行设定,报警电路可否运行。经仿真测试这些部分确可工作,其仿真电路如图5-1。图5-1 部分功能测试仿真5.2 硬件调试本系统由一个从机采集发射机和主机接收

5、显示机组成。从机主要由温湿度采集模块、数据处理模块以及数据发送模块组成。从机中的黑色按键是用来复位从系统单片机从而实现从系统的数据采集复位重新采集。由于STC89C52与nRF24L01模块所需的供电电压不同,故在系统中增加了LM1117电压模块转换出3.3V电压供无线模块使用。同时使用该模块还可以起到对系统元器件的保护作用防止因电路过流从而导致元器件的损毁。该板块有两个LED指示灯,较小的是电源指示,较大的是数据发送指示。从机板块的正面及背面背面走线如图5-2所示。图5-2 从机正面及背面走线图按下从机模块中的白色按键接通电源,此时电源指示灯点亮,系统开始工作。蓝色元件为DHT11温湿度传感

6、器,由它检测酒窖中实时的温湿度数据传送给中央微处理器,转换处理后送至无线模块将数据发送给主系统。当无线模块处于发送状态时数据指示灯会点亮,发送完毕后指示灯将自动熄灭。从机系统运行状态如图5-3所示。图5-3 从机运行状态图主机部分主要由数据接收模块、数据处理模块以及显示与报警模块组成。主机部分有四个黑色按键。单独一个的用于单片机复位,下面三个依次是设定值“”、设定值“+”,设置模式及移位。该板块同样也使用了LM1117电压转换模块,还有三个LED与一个蜂鸣器。其中较小的是电源指示灯,与蜂鸣器一起的是报警指示灯,在无线模块旁的是数据接受指示灯。主机板块的正面及背面走线如图5-4所示。图5-4 主

7、机正面及背面走线图按下主机模块中的白色按键接通电源,此时电源指示灯点亮,系统开始工作。当接收到从机发送来的温、湿度数据时接收指示灯点亮,接收结束后指示灯将自动熄灭。主机系统运行状态如图5-3所示。图5-3 主机运行状态图主机板块对温湿度的上下限进行设定时,只有当先按下设置键后才可对设定值依次进行调整。在进入设定设置界面后可分别移位设置温湿度的上下限。例如要对温度上下限设定,其操作步骤如下:按下设置键按增减键设定温度上限按下设置键按增减键设定温度下限再按三次设置键退出设置界面即可。(处于设置状态的参数前冒号下有以横线闪烁用以突出显示)设置界面如图5-5所示。图5-5 温度上下限设置当主机和从机同

8、时处于工作状态时从机便可以把采集到的数据发送给主机并被主机接收显示。如此主机与从机同时协调工作即实现了温湿度检测无线数据传输系统。整个系统运行如图5-6、图5-7。图5-6 系统发送状态图图5-7 系统接收显示状态图为了验证系统是否可以正确对温湿度进行显示和报警,从而对系统做了下面的一些测试。刚开始我想到的直接更改设定的上下限使当前的温湿度不再范围内,这样便可以了。后来仔细想想这样做有一个不足之处,那便是无法判定检测模块是否对环境的温湿度有较好的响应能力,从而改变了测试方案。首先设定合适的温湿度上下限使系统不产生报警(温度:1425,湿度:30%rh50%rh)。在用手贴在传感器的背面,这样既

9、可以增温又可以尽可能地减小对湿度的影响。当温度达到预设值上限蜂鸣器便产生报警并且报警指示灯闪烁。温度测试结果如图5-8所示。图5-8 温度测试图温度从测试结束后等待恢复后再开始对系统针对湿度进行测试。湿度的测试就比较简单了,只需对着温湿度传感器哈气即可。由于水蒸气是有温度的故不可避免的会影响到温度数据。好在当对着传感器哈气的距离只要不是太近,影响还是在可接受范围内的。湿度测试结果如图5-9所示。图5-9 湿度测试图结论与展望本设计实现的是利用nRF24L01无线技术完成远程温湿度测控的无线数据系统,。此次设计的是一个自动化技术与生活生产紧密结合的课题,以STC89C52 单片机为核心的嵌入式控

10、制器,底层的温湿度传感器收集到的数据先存入数据存储器,然后由中央为处理器处理打包送至无线模块,再将数据包发送给主机。主机在接收到数据包后处理显示。并在主机上加有按键,可设置温湿度范围实现温湿度报警的功能。该系统的结构合理,经济实用,具有较高的推广价值。在设计中由于采用了STC89C52单片机,性能可靠电路简单,适于批量生产;而且,系统中还可充分利用STC89C52中未用到的软件硬件资源,系统有再开发性。在此次设计过程中,遇到过很多困难,如对STC89C52等芯片的介绍,所查的资料全是英文版,这给设计工作带来了一定的困难,而且对许多的专业术语、词汇不甚了解,翻译工作进展很慢,最后在老师以及研究生

11、的指导下,才得以解决,比较其功能、特点,才逐步有了自己的设计内容。在这段时间的研制设计工作中,这从一定程度上说使本人获得了实际的工程应用技术研发方面既丰富而又宝贵的经验,并加深了对理论知识的认识和理论联系实际的应用能力及设计实践动手能力。致 谢此次毕业设计的完成,首先我要感谢的是老师以及帮助过我的同学,你们在我遇到困难的时候给了我设计的思路与建议,在此,向你们表示忠心的谢意!没有你们的默默支持,我难以取得预期的成果。互相学习是学习的最佳捷径,此次毕业设计我深有体会。在这次的设计制作过程中多数同学给了我很大的帮助,教给我一些实际设计的经验,在此表达我对他们衷心的感谢!自从步入大学的校门,老师们就

12、为我们的学习和发展付出了宝贵的时间和辛劳的汗水。就是因为有您们的谆谆教诲与耐心的指导我们才可取得今天的成绩。仅借于此表达我对老师们的感谢,感谢您们的指导和帮助,您们辛苦了!参考文献1 栾瑞.无线温湿度监测系统的设计D.吉林大学,2013.2 金懿,刘彭义.基于单总线数字温度传感器的分布式测温系统J.暨南大学学报(自然科学版),2004,25(1): 51-56.3 张玉健.基于 nRF24L01 的无线温湿度检测系统设计J.物联网技术,2012,12(01):21-23 4 G.J. McArdle, P.G . Milne. Result from evaluation of a long

13、pulse pilot detaa acquisition system on MAST. Fusion Engineering and Design.2006,81:15-17.5 邓星灵,康赫男.基于nRF905无线温湿度采集系统设计仪表技术J.2012,24(08): 35-386 张海良王冬云,基于VC 和无线数传模块的光伏电站远程监控系统的设计J, 工业控制计算机,2006 年19 卷第5 期7 张迎新等,单片微型计算机原理应用及接口技术,北京,国防工业出版社,2004.1.8时志云,盖建国,王代华,等.新型高速无线射频器件nRF24L01及其应用J.国外电子器件,2007(8);4

14、2-44.9 胡汉才.单片机原理及接口技术M.北京:清华大学出版社, 1998.810吴军辉,徐立鸿.温室环境集散控制系统中现场控制器的设计与开发,自动化仪表,2001.11张胜波,马小军,詹俊.基于nRF905 数传芯片的远程无线灯控箱系统J, 国外电子测量技术, Vol. 25, No. 12, Dec, 200612 董乔雪,王一鸣.温室计算机分布式自动控制系统开发,农业工程报,2002,18.14Dallas Semiconductor Corporation.DS18B20 Programmable Resolution 1-Wire Digital ThermometerP.Pro

15、duct Datasheet,2002.13 X5045 Datasheet EB/OL./data/fn/fn8126.pdf,2006附录A:系统原理图附录B:系统PCB图1 从机采集发射PCB2 主机接收显示PCB附录C:系统源程序1 温湿度检测发射模块#include /调用单片机头文件#define uchar unsigned char /无符号字符型 宏定义变量范围0255#define uint unsigned int /无符号整型 宏定义变量范围065535#include nrf24l01.Hsbit dht11=P26;uchar table_dht115=1,2,3,

16、4,5;sbit led = P27;/*1ms延时函数*/void delay_1ms(uint q)uint i,j;for(i=0;iq;i+)for(j=0;j120;j+);/*小延时函数*/void delay_uint(uint q)while(q-);/*温湿度处理*/void dht11_dis() /温湿度处理uchar i,j; /读温湿度时不能打开中断dht11 = 0;delay_1ms(18);dht11 = 1;delay_uint(6); /50usif(dht11 = 0) /判断是否响应 0 为响应while(dht11 = 0);while(dht11 =

17、 1); /等待响应时间过完for(i=0;i5;i+)for(j=0;j8;j+)table_dht11i = 1;while(dht11 = 0);delay_uint(6);/50us数据1的高电平时间为110us 低为27usif(dht11 = 1)table_dht11i |= 0 x01;while(dht11 = 1);dht11 = 1;/*主程序*/void main() /2.4G无线模块IO口初始化TX_Mode();dht11_dis(); /温湿度处理delay_1ms(650);while(1)dht11_dis(); /温湿度处理Tx_Buf0 = 0 xa1;

18、 Tx_Buf1 = table_dht110; /湿度Tx_Buf2 = table_dht112; /温度 Transmit(Tx_Buf);led = 0;delay_1ms(100);if(TX_DS) /当前STATUS状态 发送中断应使bit5 = 1 SPI_RW_Reg(WRITE_REG + STATUS,sta); if(MAX_RT) /如果是发送超时 SPI_RW_Reg(WRITE_REG + STATUS,sta);led = 1;delay_1ms(800);/NRF24L01发送端/#ifndef _NRF24L01_H_#define _NRF24L01_H_

19、/*IO端口定义*/sbit CE = P22;sbit SCK = P21;sbit MISO = P20;sbit CSN = P23;sbit MOSI = P24;sbit IRQ = P25;/*/uchar bdata sta; /状态标志sbit RX_DR =sta6;sbit TX_DS =sta5;sbit MAX_RT =sta4;/*NRF24L01*/#define TX_ADR_WIDTH 5 / 5 uints TX address width#define RX_ADR_WIDTH 5 / 5 uints RX address width#define TX_P

20、LOAD_WIDTH 32 / 32 uints TX payload#define RX_PLOAD_WIDTH 32 / 32 uints TX payloaduchar code TX_ADDRESSTX_ADR_WIDTH= 0 x34,0 x43,0 x20,0 x11,0 x05;/本地地址uchar code RX_ADDRESSRX_ADR_WIDTH= 0 x34,0 x43,0 x11,0 x10,0 x05; /接收地址uchar Tx_BufTX_PLOAD_WIDTH=0 x01,0 x02,0 x03,0 x22,0 x33,0 xaa,0 xbb,0 x11,0

21、x22,0 x33,0 xaa,0 xbb,0 x11,0 x22,0 x33,0 xaa,0 xbb,0 x11,0 x22,0 x33,0 xaa,0 xbb,0 x11,0 x22,0 x33,0 xaa,0 xbb,0 x11,0 x22,0 x33,0 xee,0 xff;/发送数据uchar Rx_BufRX_PLOAD_WIDTH;/接收数据/*NRF24L01寄存器指令*/#define READ_REG 0 x00 /读寄存器指令#define WRITE_REG 0 x20 /写寄存器指令#define RD_RX_PLOAD 0 x61 /读取接收数据指令#define

22、WR_TX_PLOAD 0 xA0 /写待发数据指令#define FLUSH_TX 0 xE1 /冲洗发送 FIFO指令#define FLUSH_RX 0 xE2 /冲洗接收 FIFO指令#define REUSE_TX_PL 0 xE3 /定义重复装载数据指令#define NOP 0 xFF /保留/*SPI(nRF24L01)寄存器地址*/*#define CONFIG 0 x00 /配置收发状态,CRC校验模式以及收发状态响应方式#define EN_AA 0 x01 /自动应答功能设置#define EN_RXADDR 0 x02 /可用信道设置#define SETUP_AW

23、0 x03 /收发地址宽度设置#define SETUP_RETR 0 x04 /自动重发功能设置#define RF_CH 0 x05 /工作频率设置#define RF_SETUP 0 x06 /发射速率、功耗功能设置#define STATUS 0 x07 /状态寄存器#define OBSERVE_TX 0 x08 /发送监测功能#define CD 0 x09 /地址检测#define RX_ADDR_P0 0 x0A /频道0接收数据地址#define RX_ADDR_P1 0 x0B /频道1接收数据地址#define RX_ADDR_P2 0 x0C /频道2接收数据地址#de

24、fine RX_ADDR_P3 0 x0D /频道3接收数据地址#define RX_ADDR_P4 0 x0E /频道4接收数据地址#define RX_ADDR_P5 0 x0F /频道5接收数据地址#define TX_ADDR 0 x10 /发送地址寄存器#define RX_PW_P0 0 x11 /接收频道0接收数据长度#define RX_PW_P1 0 x12 /接收频道0接收数据长度#define RX_PW_P2 0 x13 /接收频道0接收数据长度#define RX_PW_P3 0 x14 /接收频道0接收数据长度#define RX_PW_P4 0 x15 /接收频道

25、0接收数据长度#define RX_PW_P5 0 x16 /接收频道0接收数据长度#define FIFO_STATUS 0 x17 /FIFO栈入栈出状态寄存器设置/*延时函数*/*长延时*/void Delay(unsigned int s)unsigned int i,j;for(i=0;i1000;i+)for(j=0;js;j+);/*短延时*/void delay_ms(unsigned int x)unsigned int i,j;for(i=0;ix;i+)j=108;while(j-);/*IO口模拟SPI总线代码*/uchar SPI_RW(uchar byte)ucha

26、r i;for(i=0;i8;i+)MOSI=(byte&0 x80);byte=(byte1);SCK=1;byte|=MISO;led=MISO;Delay(150);SCK=0;return(byte);uchar SPI_RW_Reg(uchar reg,uchar value) /向寄存器REG写一个字节,同时返回状态字节uchar status;CSN=0;status=SPI_RW(reg);SPI_RW(value);CSN=1;return(status);uchar SPI_Read (uchar reg )uchar reg_val;CSN=0;SPI_RW(reg);r

27、eg_val=SPI_RW(0);CSN=1;return(reg_val);uchar SPI_Write_Buf(uchar reg, uchar *pBuf, uchar bytes)uchar status,byte_ctr;CSN = 0; /Set CSN low, init SPI tranactionstatus = SPI_RW(reg); /选择寄存器写入和读取状态字节for(byte_ctr=0; byte_ctrbytes; byte_ctr+) /然后写所有字节在缓冲区(* pBuf)SPI_RW(*pBuf+);CSN = 1; /Set CSN high agai

28、nreturn(status); /nRF24L01返回状态字节/*发送模式代码*/void TX_Mode(void)CE=0;SPI_RW_Reg(FLUSH_TX,0 x00);SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);/tx地址来nRF24L01写道SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); /RX_Addr0 tx adr一样为自动ackSPI_RW_Reg(WRITE_REG + EN_AA, 0 x01);/Enab

29、le Auto.Ack:Pipe0SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0 x01);/Enable Pipe0SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0 x1a);/500us + 86us, 10 重发.1aSPI_RW_Reg(WRITE_REG + RF_CH, 40);/选择RF信道40SPI_RW_Reg(WRITE_REG + RF_SETUP, 0 x07);/TX_PWR:0dBm,Datarate:1Mbps, LNA:HCURRSPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_W

30、IDTH); /设置接收数据长度,本次设置为2字节SPI_RW_Reg(WRITE_REG + CONFIG, 0 x0e);CE=1;delay_ms(100);void Transmit(unsigned char * tx_buf) /传输CE=0;/StandBy I模式SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); / 装载接收端地址SPI_RW_Reg(FLUSH_TX,0 x00);SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH); / 装载数据S

31、PI_RW_Reg(WRITE_REG + CONFIG, 0 x0e); / IRQ收发完成中断响应,16位CRC,主发送CE=1;/置高CE,激发数据发送delay_ms(150);/*接收模式代码*/uchar SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars)uchar status,i;/ 交易CSN = 0;/Set CSN low, init SPI tranactionstatus = SPI_RW(reg);/选择寄存器写入和读取的状态 ucharfor(i=0;iuchars;i+)pBufi = SPI_RW(0);CSN

32、 = 1;return(status);/return nRF24L01 status uchar/*/*函数:unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)/*功能:数据读取后放如rx_buf接收缓冲区中/*/unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)unsigned char revale=0;sta=SPI_Read(STATUS); / 读取状态寄存其来判断数据接收状况if(RX_DR) / 判断是否接收到数据CE = 0; /SPI使能SPI_Read_Bu

33、f(RD_RX_PLOAD,rx_buf,RX_PLOAD_WIDTH);/ read receive payload from RX_FIFO bufferrevale =1; /读取数据完成标志Delay(100);SPI_RW_Reg(WRITE_REG+STATUS,sta); /接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标志return revale;/*/*函数:void RX_Mode(void)/*功能:数据接收配置 /*/void RX_Mode(void)CE=0;SPI_RW_Reg(FLUSH_RX,0 x00);SPI_Write_

34、Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); / Writes TX_Address to nRF24L01SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); / RX_Addr0 same as TX_Adr for Auto.Ack SPI_RW_Reg(WRITE_REG + EN_AA, 0 x01); /Enable Auto.Ack:Pipe0SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0 x01); /Enable Pip

35、e0SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0 x1a); /500us + 86us, 10 retrans.1aSPI_RW_Reg(WRITE_REG + RF_CH, 40); / Select RF channel 40SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); /设置接收数据长度,本次设置为32字节SPI_RW_Reg(WRITE_REG + RF_SETUP, 0 x07); / TX_PWR:0dBm, Datarate:1Mbps, LNA:HCURRSPI_RW_Reg(WRITE_REG

36、 + CONFIG, 0 x0F);CE=1;delay_ms(130);/*串口初始化*/void StartUART( void ) /波特率9600SCON = 0 x50;TMOD = 0 x20;TH1 = 0 xFD;TL1 = 0 xFD;PCON = 0 x00;TR1 = 1;/*通过串口将接收到数据发送给PC端*/void R_S_Byte(uchar R_Byte) SBUF = R_Byte; while( TI = 0 ); /查询法TI = 0; /*主函数*/void main()/int i=0;/CE=0;/SCK=0;/CSN=1;/P1=0 x00;/#i

37、f MODE /发送 模式代码/TX_Mode();/SPI_RW_Reg(FLUSH_RX,0 x00);/while(1)/ /Transmit(Tx_Buf);/Delay(10);/sta=SPI_Read(READ_REG + STATUS);/if(TX_DS)/ /P1=sta; /8位LED显示当前STATUS状态 发送中断应使bit5 = 1 灯灭 /Delay(100);/SPI_RW_Reg(WRITE_REG + STATUS,sta); /if(MAX_RT) /如果是发送超时 /P1=0 x0f; /发送超时时 8位LED灯 bit4 = 1 灯灭/Delay(15

38、0); /SPI_RW_Reg(WRITE_REG + STATUS,sta);/#else /接收 模式代码/StartUART();/RX_Mode();/Delay(0);/防止编译警告/while(1)/ /if(nRF24L01_RxPacket(Rx_Buf)/for(i=0;iTX_PLOAD_WIDTH;i+)/R_S_Byte(Rx_Bufi);/#endif#endif2 温湿度接收显示报警模块 PAGE 40#include #include eepom52.h#define uchar unsigned char #define uint unsigned int#in

39、clude nrf24l01.H#include lcd1602.hsbit beep = P26; /蜂鸣器IO口定义sbit led = P27;uchar a_a;bit flag_300ms ;uchar key_can;/按键值的变量uchar menu_1; /菜单设计的变量uint t_high = 30,t_low = 10;/温度报警参数uint s_high = 30,s_low = 10;/湿度报警参数bit flag_lj_en; /按键连加使能bit flag_lj_3_en; /按键连3次连加后使能 加的数就越大了 uchar key_time,flag_value

40、; /用做连加的中间变量bit key_500ms ;uchar flag_clock;/温度报警变量uchar menu_shudu = 20; /用来控制连加的速度uchar flag_w_bj_en,flag_s_bj_en;uchar table_dht115=1,2,3,4,5;/*1ms延时函数*/void delay_1ms(uint q)uint i,j;for(i=0;iq;i+)for(j=0;j= 5)menu_1 = 0;if(menu_1 = 0)init_1602_dis_csf();write_com(0 x0c); /关闭光标if(menu_1 = 1)writ

41、e_string(1,0, WH: WL: );write_string(2,0, SH: % SL: % );write_sfm2(1,4,t_high);write_sfm2(1,11,t_low);write_sfm2(2,4,s_high);write_sfm2(2,11,s_low);write_zifu(1,6,0 xdf);write_zifu(1,13,0 xdf);write_com(0 x80+2); /将光标移动到秒个位write_com(0 x0f); /显示光标并且闪烁menu_shudu = 20;if(menu_1 = 1) /设置高温报警if(key_can =

42、 2)if(flag_lj_3_en = 0)t_high + ;/按键按下未松开自动加三次else t_high += 5;/按键按下未松开自动加三次之后每次自动加10if(t_high 99)t_high = 99;if(key_can = 3)if(flag_lj_3_en = 0)t_high - ;/按键按下未松开自动加三次else t_high -= 5;/按键按下未松开自动减三次之后每次自动减10if(t_high = t_high)t_low = t_high - 1;if(key_can = 3)if(flag_lj_3_en = 0)t_low - ;elset_low -

43、= 5;if(t_low 99)s_high = 99;if(key_can = 3)if(flag_lj_3_en = 0)s_high - ;/按键按下未松开自动加三次else s_high -= 5;/按键按下未松开自动减三次之后每次自动减5if(s_high = s_high)s_low = s_high - 1;if(key_can = 3)if(flag_lj_3_en = 0)s_low - ;else s_low -= 5;if(s_low = 5)s_low = 5;write_sfm2(2,11,s_low);write_com(0 x80+0 x40+11); /将光标移

44、动到秒个位write_com(0 x0f); /显示光标并且闪烁write_eepom_shidu(); /*报警函数*/void clock_h_l()static uchar value1,value2;if(table_dht110 = s_high)value1 +;/消除湿度在边界时的干扰if(value1 2)flag_s_bj_en = 1; /湿度报警标志位else if(table_dht110 (s_low) | (table_dht110 2)flag_s_bj_en = 0;/温度取消报警时回差1%else value1 = 0;if(table_dht112 = t_

45、high)value2 +;/消除温度在边界时的干扰if(value2 2)flag_w_bj_en = 1; /温度 报警标志位else if(table_dht112 (t_low ) | (table_dht112 (t_high)value2 +; /消除温度在边界时的干扰if(value2 2)flag_w_bj_en = 0; /温度取消报警时回差1度else value2 = 0;if(flag_s_bj_en = 1) | (flag_w_bj_en = 1)beep = beep; /蜂鸣器报警else beep = 1;void main()static uchar flag_en;init_1602();init_1602_dis_csf();time_init(); /初始化定时器init_eepom();RX_Mode();while(1)led = 0;if(flag_300ms = 1) /300ms 处理一次温度程序flag_300ms = 0;led = 1;if(flag_en = 1)clock_h_l(); /报警函数if(nRF24L01_RxPacket(Rx_Buf)flag_en = 1;if(menu_1 = 0) /开始界面显示的内容write_sfm2(2,10,Rx_Buf1); /显示湿度write_sfm2(2,4,Rx

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论