温湿度检测仪电子设计竞赛报告.doc

上传人:bao****ty 文档编号:132402114 上传时间:2020-05-15 格式:DOC 页数:13 大小:647.50KB
返回 下载 相关 举报
温湿度检测仪电子设计竞赛报告.doc_第1页
第1页 / 共13页
温湿度检测仪电子设计竞赛报告.doc_第2页
第2页 / 共13页
温湿度检测仪电子设计竞赛报告.doc_第3页
第3页 / 共13页
温湿度检测仪电子设计竞赛报告.doc_第4页
第4页 / 共13页
温湿度检测仪电子设计竞赛报告.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《温湿度检测仪电子设计竞赛报告.doc》由会员分享,可在线阅读,更多相关《温湿度检测仪电子设计竞赛报告.doc(13页珍藏版)》请在金锄头文库上搜索。

1、电子设计竞赛报告 题目:温湿度测量仪专业:电子信息工程姓名学号:伍迹龙 10041213 余颖 10041201 石萌 10041202 完成日期:2013年4月 一电路设计方案论证1. 电路原理说明(1) 系统设计框图 数码管显示 单片机部分电路 温湿度读取本电路由3部分组成:单片机部分,温湿度传感器部分,显示部分.系统设计框图如下:(2) 单片机电路 单片机电路方面,我们用了单片机的定时器跟计数器,通过编程实现单片机对温湿度模块进行数据读取及处理,然后通过数码管动态显示温湿度(3) 温湿度模块DHT11 通过温湿度传感器测量温湿度(4) 数码管显示 通过段选和位选进行动态扫描显示。2. 各

2、主要元件功能分析(1)单片机电路 电路比较简单,首先是单片机需要+5V电源,所以需要接好电源跟地,连接好单片机最小系统,然后选择了P25口作为数据传输口, 从DHT11的总线上读取温湿度数据,P20和P21作为数码管的段选和位选口,连接两片74HC573(锁存器),产生扫描和显示信号。 (2)DHT11传感器型号测量范围测湿精度测温精度分辨力封装DHT112090RH 0505RH214针单排直插串行接口 (单线双向)DATA 用于微处理器与 DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数部分用于以后扩展,现读出为

3、零.操作流程如下:一次完整的数据传输为40bit,高位先出。数据格式:8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据 +8bit校验和数据传送正确时校验和数据等于“8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据”所得结果的末8位。用户MCU发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采集,用户可选择读取部分数据.从模式下,DHT11接收到开始信号触发一次温湿度采集,如果没有接收到主机发送开始信号,DHT11不会主动进行温湿

4、度采集.采集数据后转换到低速模式。1.通讯过程如图1所示图1总线空闲状态为高电平,主机把总线拉低等待DHT11响应,主机把总线拉低必须大于18毫秒,保证DHT11能检测到起始信号。DHT11接收到主机的开始信号后,等待主机开始信号结束,然后发送80us低电平响应信号.主机发送开始信号结束后,延时等待20-40us后, 读取DHT11的响应信号,主机发送开始信号后,可以切换到输入模式,或者输出高电平均可, 总线由上拉电阻拉高。图2总线为低电平,说明DHT11发送响应信号,DHT11发送响应信号后,再把总线拉高80us,准备发送数据,每一bit数据都以50us低电平时隙开始,高电平的长短定了数据位

5、是0还是1.格式见下面图示.如果读取响应信号为高电平,则DHT11没有响应,请检查线路是否连接正常.当最后一bit数据传送完毕后,DHT11拉低总线50us,随后总线由上拉电阻拉高进入空闲状态。数字0信号表示方法如图4所示 图4数字1信号表示方法.如图5所示 图5 (3)数码管显示 三程序设计语言部分1.主程序模块#include dht11.h#include /数码管位定义sbit DULA = P20;sbit WELA = P21;#define SET_DULA() (DULA = 1)#define RESET_DULA() (DULA = 0)#define SET_WELA()

6、 (WELA = 1)#define RESET_WELA() (WELA = 0)/中断计数标志static unsigned char flag;/数码管编码static unsigned char code array= 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;extern int temp_value, humi_value;static void InitTime(void);void Delay_1ms(unsigned int ms);static void SMG_Display(unsigned int value)

7、;int main(void)unsigned char mark = 0;/先等上电稳定Delay_1ms(1000);/因为读一次数据dht11 才会触发一次采集数据./即在先使用数据时采集一次数据ReadTempAndHumi();/因为在两次采集数据需一定的时间间隔,这里还可减少Delay_1ms(3000);/设定定时器InitTime();while(1)/三秒读一次温湿度if(flag = 60)flag = 0;mark+;/*/读温湿度,可检测函数调用是否失败,/函数返回OK(1)表示成功,返回ERROR(0)表示失败/OK和ERROR是在DHT11.H中定义的宏*/Read

8、TempAndHumi();if(mark % 2 = 0)/显示温度SMG_Display(temp_value);else/显示湿度SMG_Display(humi_value);return 0;/设定定时器static void InitTime(void)TH0 = (unsigned char)(65535U - 50000) 8);TL0 = (unsigned char)(65535U - 50000) ;TMOD = 0X01;TR0 = 1;ET0 = 1;EA = 1;/数码管显示函数static void SMG_Display(unsigned int value)u

9、nsigned char ge, bai, shi;ge = value % 10;shi = value % 100 / 10;bai = value % 1000 / 100;SET_WELA();P0 = 0XFD;RESET_WELA();P0 = 0XFF;SET_DULA();P0 = arraybai;RESET_DULA();Delay_1ms(2);SET_WELA();P0 = 0XFB;RESET_WELA();P0 = 0XFF;SET_DULA();P0 = arrayshi;P0 |= 0x80; /*显示小数点*/RESET_DULA();Delay_1ms(2)

10、;SET_WELA();P0 = 0XF7;RESET_WELA();P0 = 0XFF;SET_DULA();P0 = arrayge;RESET_DULA();Delay_1ms(2);/中断函数void timer(void) interrupt 1TH0 = (unsigned char)(65535 - 50000) 8);TL0 = (unsigned char)(65535 - 50000);flag+;2.读取数据子程序模块#include dht11.h#include /请根据自己的dht11 接的IO 口来改动位定义sbit dht11 = P25;/防止在与硬件通信时发

11、生死循环的计数范围#define NUMBER 20#define SIZE 5static unsigned char status;/存放五字节数据的数组static unsigned char value_arraySIZE;/*可在其他的文件引用温湿度值,实际是温度的整数的10 倍如dht11 读回的温度是26,则temp_value = 260, 湿度同理*/int temp_value, humi_value;static unsigned char ReadValue(void);extern void Delay_1ms(unsigned int ms)unsigned int

12、 x, y;for(x = ms; x 0; x-)for(y = 124; y 0; y-);static void Delay_10us(void)unsigned char i;i-;i-;i-;i-;i-;i-;/*读一个字节的数据*/static unsigned char ReadValue(void)unsigned char count, value = 0, i;status = OK; /设定标志为正常状态for(i = 8; i 0; i-)/高位在先value = 1;count = 0;/每一位数据前会有一个50us 的低电平时间.等待50us 低电平结束while(dht11 = 0 & count+ = NUMBER)status = ERROR; /设定错误标志return 0; /函数执行过程发生错误就退出函数/26-28us 的高电平表示该位是0,为70us 高电平表该位1Delay_10us();Delay_10us();Delay_10us();/延时30us 后检测数据线是否还是高电平if(dht11 != 0)/进入这里表示该位是1value+;/等待剩余(约40us)的高电平结束while(dht11 != 0 & count+ = NUMBER)sta

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号