资源描述
MC大学
环境温度湿度检测仪
题 目: 环境温度湿度检测仪
专 业: 电子信息工程
班 级: 电信XX班
姓 名: XXX
学 号: XX
指导老师: XXX
小组成员: XXX XXX XXX
成 绩:
27 / 27
环境温度湿度检测仪
摘要
环境温度湿度检测仪是生活乃至生产中不可或缺重要仪器生活中,人们用检测仪可以精确了解到当前空气温湿度,采用适当方法改变当前环境湿度及温度,使人体舒适,不易生病(例如:长期生活在较潮湿地方易得风湿病等)。在工业生产中,更是体现了检测仪重要性,工厂仓库是一个工厂核心,仓库货物繁多,需要做到防潮、防霉、防腐、防爆,才能保障储备物资使用寿命和工作可靠性,只有在适当温湿度下,才能做到对货物长期储存,如若温湿度不当,就会造成一系列损失甚至灾难(例如:货物堆压可能导致内部温度过高引起自燃)。故环境温湿度检测仪是科学发展道路上不可少仪器。
此次课程设计主要通过单片机及温湿度传感器硬件连接,以及对芯片内程序烧写进行实现,其中重点要使传感器所检测到直面表达给人们看,能给人一目了然。
目录
一、总体设计 4
二、课程设计任务及要求 5
2.1设计任务 5
2.2设计步骤 5
三、电路及个元器件功能介绍 5
3.1原件介绍 5
3.1.1 AT89C52 6
3.1.2 DHT11温湿度传感器 7
3.1.3 LCD1602液晶显示器(带背光) 8
3.2 系统设计 9
3.2.1结构基本框图 9
3.2.2 系统原理图及工作原理 10
3.2.3 驱动执行程序 11
四、实物图焊接以及程序烧写 16
4.1对照仿真图进行焊接并连线 16
4.2 对单片机进行程序烧写(过程) 17
4.3实物烧写进程序并进行检测 18
五、心得及体会 19
附录1:元件清单 20
附录2:参考文献 20
一、总体设计
单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据
处理能力中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成一个小而完善微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时4位、8位单片机,发展到现在32位300M高速单片机。
目前单片机渗透到我们生活各个领域,几乎很难找到哪个领域没有单片机踪迹。导弹导航装置,飞机上各种仪表控制,计算机网络通讯及数据传输,工业自动化过程实时控制和数据处理,广泛使用各种智能IC卡,民用豪华轿车安全保障系统,录像机、摄像机、全自动洗衣机控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域机器人、智能仪表、医疗器械以及各种智能机械了。因此,单片机学习、开发及应用将造就一批计算机应用及智能化控制科学家、工程师。
单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备智能化管理及过程控制等领域。
接下来就有我们从单片机角度去制作出一个环境温湿度检测仪,检测其实用性。
二、课程设计任务及要求
2.1设计任务
利用单片机原理制作环境温湿度检测仪,需具备原理图、仿真图以及实物图,需对实物有详细说明。
1.设计一个有能在LCD1602液晶显示器精确显示温湿度单片机设计(利用DHT11传感器);
2.用简明单片机电路实现。
2.2设计步骤
1.用DHT11温湿度传感器感受环境温湿度情况,并能在LCD1602液晶显示器显示出温度以及湿度值;
2正确编写程序使之能驱动芯片;
3. 正确选择各个原件,并选择其最佳值;
4.首先需要用仿真设计电路图(通过protues),通过Keil编写程序;
5.利用Keil生成Hex文件,并在Protues仿真图上进行仿真;
6.仿真设计完毕之后就通过仿真图进行实物焊接(需注意各个原件焊接情况,切勿焊接错,以防通电时烧坏芯片);
7.对实物图进行烧写程序并启动实物图进行观察。
三、电路及个元器件功能介绍
3.1原件介绍
3.1.1 AT89C52
引脚图如下所示:
AT89C52 有 40 个引脚,32 个外部双向输入/输出(I/O)端口,同时内含 2 个
外中断口,3 个 16 位可编程定时计数器,2 个全双工串行通信口,2 个读写口线,AT89C52 可以按照常规方法进行编程,但不可以在线编程(S 系列才支持在线编程)。其将通用微处理器和 Flash 存储器结合在一起,特别是可反复擦写Flash 存储器可有效地降低开发成本,采用PDIP封装(塑料双列直插式封装),
单片机复位分为上电自动复位、按键手动复位两种和看门狗强制复位三种等。上电复位通常利用电容充放电来实现。在这个例子中,我们采用按键电平复位。
3.1.2 DHT11温湿度传感器
DHT11 数字温湿度传感器是一款含有已校准数字信号输出温湿度复合传感器。它应用专用数字模块采集技术和温湿度传感技术,确保产品具有极高可靠性及卓越长期稳定性。传感器包括一个电阻式感湿元件和一个 NTC 测温元件,并及一个高性能 8 位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个 DHT11 传感器都在极为精确湿度校验室中进行校准。校准系数以程序形式储存在 OTP 内存中,传感器内部在检测信号处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小体积、极低功耗,信号传输距离可达 20 米以上,使其成为各类应用甚至最为苛刻应用场合最佳选则。产品为 4 针单排引脚封装。连接方便,特殊封装形式可根据用户需求而提供。
应用:暖通空调、测试及检测设备、汽车、数据记录器、消费品、自动控制、气象站、家电、温度调节器、医疗、除湿器等等。
3.1.3 LCD1602液晶显示器(带背光)
编号 符号 引脚说明 编号 符号 引脚说明
1 GND 电源地 9 D2 数据
2 VCC 电源正极 10 D3 数据
3 VL 液晶显示偏压 11 D4 数据
4 RS 数据/命令选择 12 D5 数据
5 R/W 读/写选择 13 D6 数据
6 E 使能信号 14 D7 数据
7 D0 数据 15 BLA 背光源正极
8 D1 数据 16 BLK 背光源负极
1602LCD 主要技术参数:
显示容量:16×2 个字符
芯片工作电压:4.5—5.5V
工作电流:2.0mA(5.0V)
模块最佳工作电压:5.0V
字符尺寸:2.95×4.35(W×H)mm
3.2 系统设计
3.2.1结构基本框图
3.2.2系统原理图及工作原理
3.2.3驱动执行程序
#include <reg52.h>
#include <intrins.h>
typedef unsigned char unint8;
typedef unsigned char unint16;
unsigned char str1[]={" "};
unsigned char str2[]={" "};
unsigned char code dis1[] = {"TEMP T: "};
unsigned char code dis2[] = {"HUMIRH: "};
sbit TRH = P1^0;//温湿度传感器DHT11数据接入
sbit ST = P1^1;//状态显示,是为了方便调试,具体使用时候可以不要
sbit LCD_RS = P2^5;
sbit LCD_RW = P2^6;
sbit LCD_EN = P2^7;
unint8 TH_data,TL_data,RH_data,RL_data,CK_data;
unint8 TH_temp,TL_temp,RH_temp,RL_temp,CK_temp;
unint8 com_data,untemp,temp;
unint8 respond;
void delayNOP()
{
_nop_();
_nop_();
_nop_();
_nop_();
}
void delay_ms(unsigned char ms)
{
unsigned char i;
while(ms--)
{
for(i = 0; i< 150; i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
void delay_us()
{
unint8 i;
i--;
i--;
i--;
i--;
i--;
i--;
}
bit lcd_busy()
{
bit result;
LCD_RS = 0;
LCD_RW = 1;
LCD_EN = 1;
delayNOP();
result = (bit)(P0&0x80);
LCD_EN = 0;
return(result);
}
void lcd_wcmd(unsigned char cmd)
{
while(lcd_busy());
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 0;
_nop_();
_nop_();
P0 = cmd;
delayNOP();
LCD_EN = 1;
delayNOP();
LCD_EN = 0;
}
void lcd_wdata(unsigned char dat)
{
while(lcd_busy());
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 0;
P0 = dat;
delayNOP();
LCD_EN = 1;
delayNOP();
LCD_EN = 0;
}
void lcd_init()
{
delay_ms(15);
lcd_wcmd(0x38); //16*2显示,5*7点阵,8位数据
delay_ms(5);
lcd_wcmd(0x38);
delay_ms(5);
lcd_wcmd(0x38);
delay_ms(5);
lcd_wcmd(0x0c); //显示开,关光标
delay_ms(5);
lcd_wcmd(0x06); //移动光标
delay_ms(5);
//lcd_wcmd(0x01); //清除LCD显示内容,如果屏幕过暗,可将这俩句删除
//delay_ms(5);
}
void lcd_dis_pos(unsigned char pos)
{
lcd_wcmd(pos | 0x80); //数据指针=80+地址变量
}
char receive()
{
unint8 i;
ST=0;
com_data=0;
for(i=0;i<=7;i++)
{
respond=2;
while((!TRH)&&respond++);
delay_us();
delay_us();
delay_us();
if(TRH)
{
temp=1;
respond=2;
while((TRH)&&respond++);
}
else
temp=0;
com_data<<=1;
com_data|=temp;
}
return(com_data);
}
void read_TRH()
{
//主机拉低18ms
TRH=0;
delay_ms(18);
TRH=1;
//DATA总线由上拉电阻拉高 主机延时20us
delay_us();
delay_us();
delay_us();
delay_us();
//delay_us();
//delay_us();delay_us();delay_us();delay_us();
//主机设为输入 判断从机响应信号
TRH=1;
//判断DHT11是否有低电平响应信号 如不响应则跳出,响应则向下运行
if(!TRH)
{
respond=2;
//判断DHT11发出 80us 低电平响应信号是否结束
while((!TRH)&& respond++);
respond=2;
//判断从机是否发出 80us 高电平,如发出则进入数据接收状态
while(TRH && respond++);
//数据接收状态
RH_temp = receive();
RL_temp = receive();
TH_temp = receive();
TL_temp = receive();
CK_temp = receive();
TRH=1;ST=1;
//数据校验
untemp=(RH_temp+RL_temp+TH_temp+TL_temp);
if(untemp==CK_temp)
{
RH_data = RH_temp;
RL_data = RL_temp;
TH_data = TH_temp;
TL_data = TL_temp;
CK_data = CK_temp;
}
}
//湿度整数部分
str1[0] = (char)(0X30+RH_data/10);
str1[1] = (char)(0X30+RH_data%10);
str1[2] = 0x2e; //小数点
//湿度小数部分
str1[3] = (char)(0X30+RL_data/10);
str1[5] = 0X25; //"%"
str1[6] = 0X52; //"R"
str1[7] = 0X48; //"H"
//温度整数部分
str2[0] = (char)(0X30+TH_data/10);
str2[1] = (char)(0X30+TH_data%10);
str2[2] = 0x2e; //小数点
//温度小数部分
str2[3] = (char)(0X30+TL_data/10);
str2[5] = 0XDF; //"'"
str2[6] = 0X43; //"C"
}
void main()
{
unsigned char i,n=0x40,m;
lcd_init();
delay_us();
while(1)
{
read_TRH();
//写字符
for(i=0;i<=7;i++)
{
lcd_dis_pos(n+i); //显示字符
lcd_wdata(dis2[i]);
lcd_dis_pos(i); //显示字符
lcd_wdata(dis1[i]);
}
//写湿度数据
m=0x48;
for(i=0;i<=7;i++)
{
lcd_dis_pos(m);
lcd_wdata(str1[i]);
m++;
}
//写温度数据
m=0x08;
for(i=0;i<=7;i++)
{
lcd_dis_pos(m);
lcd_wdata(str2[i]);
m++;
}
//延时
delay_ms(1000) ;
}
}
四、实物图焊接以及程序烧写
4.1对照仿真图进行焊接并连线
4.2 对单片机进行程序烧写(过程)
打开STC烧写软件,芯片类型选择实验所用STC89C52,选择驱动运行程序为Hex文件。如下图所示:
4.3实物烧写进程序并进行检测
从下面图中可以看到我们所做温度湿度检测仪经过烧写程序之后成功运行,1602液晶上面第一行显示“TEMP T:”为温度,可以看到当时实时温度为16℃,第二行显示是“HUMIRH”为湿度,可以看到当时实时相对湿度为26%,说明我们所做出来成品硬件部分和程序都没有问题。
五、心得及体会
附录1:元件清单
元件名称
规格
元件个数(个)
AT89C52RC
40脚双列直插
1
单片机活座
40P
1
DHT11温湿度传感器
AOSONG-DHT11
1
1602液晶显示器
1602A
1
晶振
12MHz
1
瓷片电容
10pF
2
电解电容
10μF
1
排阻
10KΩ
1
可调电阻
10KΩ
1
自锁开关
7*7MM
1
点触开关
6*6*5MM
1
电阻
10KΩ
1
电阻
1KΩ
1
排针
间距2.54MM
若干
排座
间距2.54MM
若干
杜邦线
双头1P
若干
单排圆孔插座
间距2.54MM
若干
USB电源数据下载器
USB转TTL
1
9*15电路板
2.54MM
1
附录2:参考文献
[1]
展开阅读全文