温湿度检测仪电子设计竞赛报告_第1页
温湿度检测仪电子设计竞赛报告_第2页
温湿度检测仪电子设计竞赛报告_第3页
温湿度检测仪电子设计竞赛报告_第4页
温湿度检测仪电子设计竞赛报告_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

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

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

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

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

5、则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() (WELA = 1)#define RESET_WE

6、LA() (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);int main(void)unsigned cha

7、r 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中定义的宏*/ReadTempAndHumi();if(mark % 2 =

8、 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)unsigned char ge, bai, shi;g

9、e = 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);SET_WELA();P0 = 0XF7;RESET

10、_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;/防止在与硬件通信时发生死循环的计数范围#define NUMBER 20#

11、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 x, y;for(x = ms; x 0; x-)f

12、or(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

13、)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)status = ERROR; /设定错误标志return 0;return (value);/读一次的数据,共五字节extern unsign

14、ed char ReadTempAndHumi(void)unsigned char i = 0, check_value = 0,count = 0;EA = 0;dht11 = 0; /拉低数据线大于18ms 发送开始信号Delay_1ms(20); /需大于18 毫秒dht11 = 1; /释放数据线,用于检测低电平的应答信号/延时20-40us,等待一段时间后检测应答信号,应答信号是从机拉低数据线80usDelay_10us();Delay_10us();Delay_10us();Delay_10us();if(dht11 != 0) /检测应答信号,应答信号是低电平/没应答信号EA

15、= 1;return ERROR;else/有应答信号while(dht11 = 0 & count+ = NUMBER) /检测计数器是否超过了设定的范围dht11 = 1;EA = 1;return ERROR; /读数据出错,退出函数count = 0;dht11 = 1;/释放数据线/应答信号后会有一个80us 的高电平,等待高电平结束while(dht11 != 0 & count+ = NUMBER)dht11 = 1;EA = 1;return ERROR; /退出函数/读出湿.温度值for(i = 0; i SIZE; i+)value_arrayi = ReadValue();if(status = ERROR)/调用ReadValue()读数据出错会设定status 为ERRORdht11 = 1;EA = 1;return ERROR;/读出的最后一个值是校验值不需加上去if(i != SIZE - 1)/读出的五字节数据中的前四字节数据和等于第五字节数据表示成功check_value += value_arrayi;/end for/在没用发生函数调用失败时

温馨提示

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

评论

0/150

提交评论