温湿度检测.docx

上传人:b****0 文档编号:8941933 上传时间:2023-05-16 格式:DOCX 页数:21 大小:164.35KB
下载 相关 举报
温湿度检测.docx_第1页
第1页 / 共21页
温湿度检测.docx_第2页
第2页 / 共21页
温湿度检测.docx_第3页
第3页 / 共21页
温湿度检测.docx_第4页
第4页 / 共21页
温湿度检测.docx_第5页
第5页 / 共21页
温湿度检测.docx_第6页
第6页 / 共21页
温湿度检测.docx_第7页
第7页 / 共21页
温湿度检测.docx_第8页
第8页 / 共21页
温湿度检测.docx_第9页
第9页 / 共21页
温湿度检测.docx_第10页
第10页 / 共21页
温湿度检测.docx_第11页
第11页 / 共21页
温湿度检测.docx_第12页
第12页 / 共21页
温湿度检测.docx_第13页
第13页 / 共21页
温湿度检测.docx_第14页
第14页 / 共21页
温湿度检测.docx_第15页
第15页 / 共21页
温湿度检测.docx_第16页
第16页 / 共21页
温湿度检测.docx_第17页
第17页 / 共21页
温湿度检测.docx_第18页
第18页 / 共21页
温湿度检测.docx_第19页
第19页 / 共21页
温湿度检测.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

温湿度检测.docx

《温湿度检测.docx》由会员分享,可在线阅读,更多相关《温湿度检测.docx(21页珍藏版)》请在冰点文库上搜索。

温湿度检测.docx

温湿度检测

设计题目:

基于单片机的整点温湿度记录仪

学生姓名

课程名称

专业班级

地点

\

起止时间

设计内容及要求

设计基于单片机的整点温度记录仪。

温度记录仪是测温仪器类型的其中之一,广泛应用于医药、食品、电子、农业等领域。

本课题的主要任务是基于单片机技术设计一种整点温度记录仪,能够实现精准测温、整点存储、温度显示、温度查询等功能。

要求完成以下功能:

1.检测的温度范围:

0-70℃,检测分辨率±1℃;湿度范围60%-80%RH;

2.可整点存储温度值、湿度值;

3.通过键盘查询、显示温度值、湿度值;

4能够存储、显示、查询温度.

RH设计

参数

 

进度

要求

1.布置仪表设计任务、方案设计(1天)

2.硬件设计、制作、调试(1.5天)

3.软件设计、调试(4.5天)

4.综合调试(1天)

5.成果展示、答辩(1天)

详见进度安排表

参考资料

1.程德福.智能仪器.机械工业出版社.2009.9

2.胡文金.单片机系统实训教程.重庆:

重庆大学出版社,2005

3.梁森.自动检测技术及应用.北京:

机械工业出版社,2012

其它

说明

1.本表应在每次实施前一周由负责教师填写二份,院系审批后交院系办备案,一份由负责教师留用。

2.若填写内容较多可另纸附后。

3.一题多名学生共用的,在设计内容、参数、要求等方面应有所区别。

目录

一系统总体方案设计5

1.1系统设计方案总体思路5

1.2系统总体方案框图5

二硬件设计5

2.1STC89C52简介5

2.2晶振电路6

2.3复位电路7

2.4共阴极数码管显示电路7

2.5键盘电路8

2.6DHT11传感器电路9

三软件设计与说明10

3.1主程序设计10

3.2显示程序设计10

第4章调试结果与说明12

4.1系统调试说明12

4.2调试结果12

五总结12

参考文献13

附录B系统程序清单16

 

一系统总体方案设计

1.1系统设计方案总体思路

根据课题,设计整点温湿度检测记录电路,采用单片机STC89C52为控制芯片。

根据设计要求所需的实现要求,电路分为单片机时钟电路、复位电路、数码管显示电路、DHT11传感器电路、DS1302时钟电路、AT24C02储存电路、LED闪烁报警电路几个模块。

在本系统中复位电路中给给RST引脚连续输入2个机器周期(即24个时钟振荡周期)以上高电平,就可完成初始化操作;显示电路与单片机I/O相连,采用4段7位共阴极LED显示管显示温湿度。

1.2系统总体方案框图

根据设计思路确定的总体方案如图1-2所示。

 

 

图1-2系统总体框图

二硬件设计

2.1STC89C52简介

STC89C52是STC公司生产的一种低功耗高性能CMOS8位微控制器,具有8K在系统可编程FLASH存储器。

STC89C52使用经典的MCS-51内核,但做了很多改进使得芯片具有传统51单片机不具备的功能。

拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

图2-1STC89C52

2.2晶振电路

单片机工作的时间基准是由时钟电路所控制的。

在单片机的XTAL1和XTAL2两个管脚,接一只晶振及两只电容就构成了单片机的时钟电路。

电路中,电容器C1和C2对振荡频率有微调作用,均选用20pF,石英晶体选择12MHZ。

晶振电路如图.

图2-2晶振电路

2.3复位电路

复位电路是保证单片机正常运行的关键因素,所以可靠地复位电路设计是必要的。

将RST引脚连续输入2个机器周期(即24个时钟振荡期间)以上高电平,即可以完成单片机的初始化操作。

本设计采用按钮复位方式。

复位电路如图:

图2-3复位电路

2.4共阴极数码管显示电路

LED数码管采用共阴数码管,采用动态显示方式,减少硬件资源。

动态扫描显示接口是单片机中应用最广泛的一种显示方式。

数码管的dp段以及g-a段依序与P0口的P0.7-P0.0连接。

4位LED的位选线分别由相对应的P2.4-P2.7控制。

显示电路如图:

 

图2-4显示电路

2.5键盘电路

单片机板子上自带有四个按键,为MODE键.UP键.DOWN键和ENT键,分别与单片机的P20.P21.P22和P32相连。

本次课程设计使用了三个按键,用来设置温湿度的上下限及显示工作

键盘电路如图:

图2-5显示电路

2.6DHT11传感器电路

DHT11是一种能对环境的温湿度参数进行采样的传感器,用于微处理器与DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数部分用于以后扩展,现读出为零.操作流程如下:

一次完整的数据传输为40bit,高位先出。

数据格式:

8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据+8bit校验和

数据传送正确时校验和数据等于“8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据”所得结果的末8位。

用户MCU发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采集,用户可选择读取部分数据.从模式下,DHT11接收到开始信号触发一次温湿度采集,如果没有接收到主机发送开始信号,DHT11不会主动进行温湿度采集.采集数据后转换到低速模式。

1.通讯过程如图所示

总线空闲状态为高电平,主机把总线拉低等待DHT11响应,主机把总线拉低必须大于18毫秒,保证DHT11能检测到起始信号。

DHT11接收到主机的开始信号后,等待主机开始信号结束,然后发送80us低电平响应信号.主机发送开始信号结束后,延时等待20-40us后,读取DHT11的响应信号,主机发送开始信号后,可以切换到输入模式,或者输出高电平均可,总线由上拉电阻拉高。

DHT11的测量分辨率分别为8bit(温度)、8bit(湿度)。

DHT11传感器电路如下:

图2-6DHT11传感器电路

三软件设计与说明

此次系统设计是通过C语言编程,其中包括数码管显示部分、时钟电路、传感器采样温湿度部分,总线部分。

3.1主程序设计

主程序初始化,显示温湿度值,循环扫描是否有键按下,如有键按下则做出相应的功能处理,若无键按下则继续执行显示函数。

3.2显示程序设计

显示采用4位共阴极数码管,段码在程序数据区定义,根据需要查表取得,再送往P0口,以控制数码管显示不同字符数字。

位码由P2.4—P2.7口分别控制晶体数码管的位控位W4—W1,以控制各个数码管显示。

N

Y

图3-4显示程序流程图

四调试结果与说明

4.1系统调试说明

本系统调试过程中采用直接硬件调试的方法,对整体的系统程序进行分解排故,首先对四位八段显像管进行数字显示测试,然后对键盘进行按键响应测试,当测试都得到正确结果时,将键盘与显示结合起来,并给予恰当的字型码,最后加入中断程序,给出正确的脉冲信号和频率。

按键出现按下一键响应多次的情况,后查出由于键位抬起子程序书写不当,造成键盘多次响应,并加上了松手去抖程序后问题得以顺利解决。

4.2调试结果

接上温湿度传感器DHT11后和电源后,将程序下载到板子上,按下按键启动,执行程序,数码管上显示了温湿度整数部分的参数。

由于程序编写的不是很成功,虽然显示了温湿度,但是数值不是很准确,而且不能储存温湿度,只能实时显示,有一定的缺陷.

五总结

经过两周的单片机课程设计,终于完成了单片机环境温湿度检测系统的设计,虽然遇到了很多问题,最后也不是很成功,但是也收获许多,但是付出了许多精力和时间,所以实践能力的到了一定的提高。

虽然学习单片机已经不短时间,我对单片机还有不少的问题,透过此次课程设计,我又学到了很多知识与技巧。

这次设计让我有了长足的进步,使我对单片机硬件与软件的兼顾与融会贯通有了更进一步。

参考文献

[1]王迎旭.单片机原理与应用[M].北京:

机械工业出版社,2004.

[2]陈海宴.51单片机原理及应用[M].北京:

北京航空航天大学出版社,2010.

[3]胡汉才.单片机原理及其接口技术[M].北京:

清华大学出版社,2010.

[4]李全利.单片机原理及应用技术[M].北京:

高等教育出版社,2004.

[5]陈光东.单片微型计算机原理及接口技术[M].华中科技大学出版社,2001.

[6]何立民.51系列单片机应用与实践教程[M].北航出版社,.

 

附录B系统程序清单

#include"I2C.h"

#include"I2C_2.h"

#include"Temperature.h"

#include"DS1302_2.h"

#definePCF85910x90//PCF8591地址

#defineTHCO0xF8//11.0592MHZ晶振

#defineTLCO0xCD//定时2ms时间

#defineTHC10xB8//定时20ms时间

#defineTLC10x00

floatt,t1,ave;

bitDisPlay;//按键刷新显示标志位

intRoom_Temperature=0;//室温

unsignedintAin3_Voltage=0;//通道3电压

unsignedintcount1S=0;

unsignedcharMenu=0;

unsignedcharKey_Add_Flag=0;

unsignedcharKey_Sub_Flag=0;

unsignedcharmin=0x0,sec=0x0,hour=0x0;

ucharDataBufW[]={2,0,0,0};

bitsave_flag;//保存标志位

unsignedcharTemperature_Param[5]={28,29,30,31,32};//存储5个温度值

unsignedcharHumidity_Param[5]={50,60,70,80,90};//存储5个湿度值

unsignedchardat[6]={0};//五次计算值

unsignedcharData_Buffer[4]={1,2,3,4};//数码管显示缓冲区

unsignedcharcodeDuan[]={

0x3f,0x06,0x5b,0x4f,0x66,

0x6d,0x7d,0x07,0x7f,0x6f,

0x40};//0~9,'-'

voidInit(void);//定时器配置初始化

voidTemperature(void);//采集温度

voidHumidity(void);//采集湿度

voidDisp_Update(void);//数据更新

voidKey_Deal(void);//按键处理,主要是模式,加键,减键标志位的加减运算

voidmain(void)

{

unsignedchari=0;

Init();//定时器配置初始化

Temperature();//温度采集初始化

Humidity();//湿度采集初始化

Disp_Update();

while

(1)

{

if(DisPlay==1)//按键按下或者1S时间到刷新数据

{

DisPlay=0;

if(Menu==0)//1S刷新温度**Timer1

{

Temperature();

}

if(Menu==1)//1S一次刷新湿度**Timer0

{

Humidity();

LED1=!

LED1;

}

if(Menu==2)//DS1302

{

min=ReadMin();

sec=ReadSec();

LED2=!

LED2;

}

Disp_Update();

}

if(save_flag==1)//存储

{

for(i=5;i>0;i--)//存储5次温度值

{

Temperature_Param[i]=Room_Temperature;

WrToROM(Temperature_Param,1,4);//把5个温度参数写进EPROM

}

for(i=5;i>0;i--)//存储5次湿度值

{

Humidity_Param[i]=Ain3_Voltage;

WrToROM(Humidity_Param,1,4);//把5个湿度参数写进EPROM

}

save_flag=0;

}

}

}

voidTimer0()interrupt1using1

{

staticunsignedcharBit=0;//数码管位选

staticunsignedcharKey_Delay;//按键延时消抖

TH0=THCO;//定时2ms

TL0=TLCO;

count1S++;

if(count1S==500)//1S到,

{

count1S=0;//清零

DisPlay=1;//刷新标志位置

}

/**按键扫描**/

if(Key_Mode==0||Key_Add==0||Key_Sub==0)//按键扫描

{

if(++Key_Delay>40)//此处延时80ms

{

Key_Delay=0;

Key_Deal();//按键处理

DisPlay=1;

}

elseDisPlay=0;//不显示

}

else//不显示

{

Key_Delay=0;

}

/**数码管扫描**/

Bit++;

Bit&=0x03;

P2|=0xf0;//先关位码

P0=Duan[Data_Buffer[Bit]];//开段码,段码送数据

if(Menu==2&&Bit==1)//时间显示小数点

P0|=0x80;

switch(Bit)//送位码

{

case0:

P24=0;break;

case1:

P25=0;break;

case2:

P26=0;break;

case3:

P27=0;break;

default:

break;

}

}

/**定时20ms;刷新温湿度;**/

voidTimer1()interrupt3using3

{

TH1=THC1;//重装初值

TL1=TLC1;

}

voidInit(void)

{

TMOD=0x11;//设置定时器0工作模式,16位计数模式

TH0=THCO;

TL0=TLCO;

TH1=THC1;

TL1=TLC1;

TR0=1;//启动定时器0

ET0=1;//使能定时器中断0

EA=1;//开总中断

DisableWP();//禁止写保护

WriteControl(0xa6);//向慢速充电控制寄存器写入控制字节

WriteSec(sec);//向DS1302中写入秒字节

WriteMin(min);//向DS1302中写入分字节

}

voidTemperature(void)//室温采集模块,2s采集一次

{

unsignedinti;

floatmax1,min1,sum;

unsignedintmax,min,mid;

unsignedintv;

ISendByte(PCF8591,0x40);

dat[0]=IRcvByte(PCF8591);//得到第一次NTC的电

max1=min1=dat[0];

sum=0;

for(i=0;i<5;i++)//数据处理

{

ISendByte(PCF8591,0x40);

dat[i+1]=IRcvByte(PCF8591);//得到NTC的电压,连续采集5次

if(dat[i]>max1)max1=dat[i];//搜寻最大值

elseif(dat[i]

sum=sum+dat[i];

}

ave=(float)((sum-max1-min1)/3.0);//算3次平均值

t=ave*19.6;//255*5000;//5/256

t1=t/1000;//t1为电压值

t1=(5000-t)/t1;

v=(unsignedint)t1*10;//计算得电阻值

Room_Temperature=v;

max=97;

min=0;

while

(1)//查表,得到温度值

{

mid=(max+min)/2;

if(Table[mid]

max=mid;

else

min=mid;

if((max-min)<=1)

break;

}

Room_Temperature=max;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2