SHT温湿度.docx
《SHT温湿度.docx》由会员分享,可在线阅读,更多相关《SHT温湿度.docx(18页珍藏版)》请在冰点文库上搜索。
SHT温湿度
福州大学至诚学院
《单片机原理及应用》
(单片机实训)
课程设计
任务书
题目:
使用SHT11测量温湿度
姓名:
刘东平
学号:
211102278
系别:
电气工程系
专业:
电气工程及其自动化
年级:
11级
起讫日期:
2013.12.30
指导教师:
高伟
设计任务
一、课程设计目的
通过课程设计,要求学生掌握以下知识和技能:
1.单片机应用系统的总体方案的设计;
2.单片机应用系统的硬件设计;
3.单片机应用系统的软件程序设计及综合调试;
4.Proteus仿真软件的使用;
5.熟练使用单片机开发工具。
二、课程设计要求
1.能够独立地完成所选的题目,并能够实现各功能
1.理解项目的需求,编写说明文档;
2.单片机应用系统的硬件原理图一份,要求用Protel绘图;
3.程序流程图、程序源码(要求必要的注释);
4.调试程序,完成后烧写为脱机运行方式并测试是否正常;
5.写设计报告,演示并简要说明设计要点,分析存在的问题及解决方法。
三、技术要求
使用SHT11测量温湿度,显示,通过按键,切换显示温湿度值(IIC接口)
四、拟采用的方法(包括芯片的选型等)
采用将温度和湿度一起测量,即用一个温湿度传感器SHT11实现。
温湿度传感器SHT11将温度感测、湿度感测、信号变换、A/D转换和加热器等功能集合到一个芯片上,该芯片包括一个电容性聚合体湿度敏感元件和一个用能隙材料制成的温度敏感元件,这两个敏感元件分别将湿度和温度转换成电信号,该信号首先进入微弱信号放大器进行信号放大,然后进入一个14位的A/D转换器,最后经过二线串行数字接口输出数字信号,采用数码管显示所测温度和湿度。
五、该同学在本设计中承担的任务
本人主要进行仿真,也参与程序的编写。
福州大学至诚学院
《单片机原理及应用》
(单片机实训)
课程设计报告书
题目:
使用SHT11测量温湿度
姓名:
刘东平
学号:
211102278
系别:
电气工程系
专业:
电气工程及其自动化
年级:
11级
起讫日期:
2013.12.30
指导教师:
高伟
1.设计概述…………………………………………………………4
2.硬件电路图………………………………………………………5
3.软件设计…………………………………………………………5
3.1流程图…………………………………………………………5
3.2程序……………………………………………………………5
4.结论
4.1测试结果………………………………………………………16
4.2遇到问题………………………………………………………16
4.3如何解决………………………………………………………16
5.参考文献…………………………………………………………17
1.设计概述
1.1、主要功能要求
温度和湿度传感器均选用模拟类型,并完成其信号放大和传
递电路的设计;
AD转换采用8位并行的AD89C51;
显示器件选择LED液晶显示;
温度值和湿度值间隔轮流显示;
单片机系统采用51单片机系统;
完成硬件电路的设计和制作;
完成软件程序的设计;
完成整个系统的设计、调试和制作;
1.2、整机设计框图及整机概述
系统整机框图:
图1系统整机框图
整机概述
本数字温湿度检测仪利用80c51单片机系统、温度传感器、湿度传感器、热敏电阻、AD转换器件和数码管显示器件。
传感器采集现场温度及湿度,经过AD转换后送至单片机运算处理,并将处理后的数据送数码管显示,以此实现实时温度和湿度的检测。
2.硬件电路图
3.软件设计
软件上,本设计主要分为两部分:
定时器和液晶显示,两者又是同时工作。
3.1流程图
3.1主程序:
3.2中断服务程序:
图2软件流程图主程序图3中断服务程序
图2为软件设计的主程序,开始后先经过初始化再根据要求来选择对应的通道,然后结束。
图五为中断服务程序,开始后看P2.0等于多少,对应的选择温度转换还是湿度转换,对应着显示,然后结束。
微处理器和温湿度传感器通信采用串行二线接口SCK和DATA,其中SCK为时钟线,DATA为数据线。
该二线串行通信协议和I2C协议是不兼容的。
在程式开始,微处理器需要用一组"启动传输"时序表示数据传输的启动,如图3所示。
当SCK时钟为高电平时,DATA翻转为低电平;紧接着SCK变为低电平,随后又变为高电平;在SCK时钟为高电平时,DATA再次翻转为高电平。
图4数据传输启动程序
3.3显示原理图
图5LED显示原理图
图4为软件方面的显示原理图,开始后,单片机经过初始化后接收数据,然后进行地址校验,校验不合格继续接受数据,校验合格的话取湿度给定值进而采样温湿度值,然后数码显示后上传数据,继续循环。
温度和湿度值的计算
(1)SHT11可通过DATA数据总线直接输出数字量湿度值。
该湿度值称为"相对湿度",需要进行线性补偿和温度补偿后才能得到较为准确的湿度值。
由于相对湿度数字输出特性呈一定的非线性,因此为了补偿湿度传感器的非线性,可按下式修正湿度值:
式中:
RHlinear为经过线性补偿后的湿度值,SORH为相对湿度测量值,C1、C2、C3为线性补偿系数,取值如表2所列。
由于温度对湿度的影响十分明显,而实际温度和测试参考温度25℃有所不同,所以对线性补偿后的湿度值进行温度补偿非常有必要。
补偿公式如下:
式中:
RHtrue为经过线性补偿和温度补偿后的湿度值,T为测试湿度值时的温度(℃),t1和t2为温度补偿系数,取值如表3所列。
表2湿度线性补偿系数表3湿度值温度补偿系数
(2)温度值输出
由于SHT11是采用PTAT能隙材料制成的温度敏感元件,因而具有非常好的线性输出。
实际温度值可由下式算得:
Temperature=d1+d2×SOT
式中:
d1和d2为特定系数,d1的取值和SHT11工作电压有关,d2的取值则和SHT11内部A/D转换器采用的分辨率有关。
3.2程序
#include//头文件
#include
#include//
#include//Keillibrary
//**************************************
#defineucharunsignedchar//定义一下方便使用
#defineuintunsignedint//定义一下方便使用
#defineulongunsignedlong//定义一下方便使用
#defineTEMP_ML0x03//00000011温度命令
#defineHUMI_ML0x05//00000101温度命令
unsignedcharerror;//全局错误变量
unsignedcharack;//全局应答变量
unsignedchartemp_h;//全局应答变量
unsignedchartemp_LL;//全局应答变量
unsignedintxianzhi_t=0;//温度显值
unsignedintxianzhi_h=0;//湿度显值
sbitDATA=P2^6;//数据
sbitSCK=P2^7;//时钟
sbittemp=P0^0;//温度
sbithumi=P0^1;//湿度
sbitgwei=P3^4;//个位
sbitswei=P3^3;//十位
intnumber=11;
unsignedcharcodedispcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//共阳
/////////////////
//////////////////////
///////延时///////
voiddelay(inti)
{
while(--i);
}
charread()//读一个字节返回应答信号
//----------------------------------------------------------------------------------
//readsabyteformtheSensibusandgivesanacknowledgeincaseof"ack=1"
{
unsignedchari,val=0;
temp_LL=0;
temp_h=0;
DATA=1;//释放数据总线
for(i=0x80;i>0;i/=2)//位移8位
{
SCK=1;//上升沿读入
if(DATA)val=(val|i);//确定值
SCK=0;
}
DATA=0;//读应答信号,有应答为1,为应答为0通过CPU下拉为应答
SCK=1;//第9个脉冲
_nop_();_nop_();_nop_();//pulswithapprox.5us
SCK=0;
DATA=1;//释放数据总线
temp_h=val;
val=0;
////低8位/////////////////////////////
DATA=1;//释放数据总线
for(i=0x80;i>0;i/=2)//位移8位
{
SCK=1;//上升沿读入
if(DATA)val=(val|i);//确定值
SCK=0;
}
DATA=1;//0;//不需要应答通过CPU下拉为应答
SCK=1;//第9个脉冲
_nop_();_nop_();_nop_();//pulswithapprox.5us
SCK=0;
DATA=1;//释放数据总线
temp_LL=val;
}
////////////
charwrite(unsignedcharvalue)//写一个字节返回应答信号
//---------------------------------------------------------
{
unsignedchari;
ack=0;
for(i=0x80;i>0;i/=2)//释放数据总线
{
if(i&value)
DATA=1;//写入值
else
DATA=0;
SCK=1;//上升沿写入
_nop_();_nop_();_nop_();//延时
SCK=0;
}
DATA=1;//释放数据总线
SCK=1;//第9个脉冲
if(DATA==1)
ack=1;//读应答信号
SCK=0;
returnack;//error=1表示没有应答
}
////////
voidstart_sht11(void)//启动
//--------------------------------------------------------
{
DATA=1;SCK=0;//数据为1,SCK=0
_nop_();
SCK=1;//第一个脉冲
_nop_();
DATA=0;//数据跌落
_nop_();
SCK=0;//完成一个脉冲
_nop_();_nop_();_nop_();
SCK=1;//再一个脉冲
_nop_();
DATA=1;//数据变为1
_nop_();
SCK=0;//完成该脉冲
}
//////////////////////////////////
voidsht_rest(void)//复位
{
unsignedchari;
DATA=1;SCK=0;//数据为1时钟为0
for(i=0;i<9;i++)//9个脉冲为复位
{
SCK=1;
SCK=0;
}
start_sht11();//启动
}
////////////////////////////////
voiddisplay()
{
if(temp==0)
number=xianzhi_t;
//if(humi==0)
else
number=xianzhi_h;
{
//intnumber=xianzhi_t;
gwei=1;
swei=1;
P1=dispcode[number/100];
swei=0;
delay(40);
swei=1;
number=number%100;
P1=dispcode[number/10];
gwei=0;
delay(40);
gwei=1;
}
}
//测量温度或者是温度,返回校验值
voidtext_a(unsignedcharml)
{
unsignedinti;
start_sht11();//启动
write(ml);//写入测温度
if(ack==1)
{
sht_rest();//复位
write(ml);//写入测温度
}
for(i=0;i<55535;i++)
{
if(DATA==0)
break;
else
{
display();
}
}
read();//读温度
}
/////////温湿度处理//////
//////////计算温度////
//temp=0.01*t-40//
voidtext_jishuan_temp()
{
floataa=0,bb=0,temp_zi;
intabcd=0;
aa=(float)temp_h*256+(float)temp_LL;
temp_zi=0.01*aa-40;
if(temp_zi<0)
{
temp_zi=0;
}
temp_zi=temp_zi*10;
xianzhi_t=(int)temp_zi;//给显示值
}
///////计算湿度//////
//-2.8*10^(-5)*h*h+0.405*h-40
voidtext_jishuan_humi()
{
floataa=0,bb=0,humi_zi;
intabcd=0;
aa=(float)temp_h*256+(float)temp_LL;
bb=aa*aa*2.8/1000000;
aa=0.0405*aa;
aa=aa-4-bb;
humi_zi=aa;
humi_zi=humi_zi*10;
xianzhi_h=(int)humi_zi;
}
voidtext_jishuan_temp11()
{
error=0;
ack=0;
text_a(TEMP_ML);
text_jishuan_temp();
text_a(HUMI_ML);
text_jishuan_humi();
main()
{
csh();//系统初始化
while
(1)
{
text_jishuan_temp11();//测温湿度
display();
}
}
4.结论
4.1测试结果
温湿度正常显示,通过按键切换显示温湿度值及其数值。
4.2遇到问题
1,程序编译问题一大堆。
2,对PROTEUS软件不熟悉,元件找起来相当困难
3、仿真成功了,硬件不行
4.3如何解决
1.把程序分模块,一部分一部分调试,可以轻松找到症结所在,所有模块都通过之后,再组合在一起,一般就没什么问题了,可以节省很多工作量
2.经验很重要,Proteus用多了,画起来就很的心应手
3.实验室的单片机和液晶、LED灯等都已经内部连接好了,端口也是固定的,与我们的程序有很大出入。
通过查找内部接线图,更改部分程序之后,硬件也可以实现。
4.4.心得体会
通过这次课程设计的学习,发现了自己的很多不足,自己知识的很多漏洞,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还急需提高。
这次学习提高我在控制检测电路和单片机系统应用方面的实践技能,通过查找资料、调试、制作、等环节,掌握工程设计方法和组织实践的基本技能,熟悉使用单片机及其外围电路完成科学实践的程序和方法。
调试过程中有苦也有乐,也从这过程中学到很多知识,为以后打下坚实的基础
5.参考文献
1李朝青.单片机原理及接口技术(第三版).北京航空航天大学出版社,2005
2童诗白,华成英.模拟电子技术基础(第三版).高等教育出版社,2006
3徐爱钧.5051单片机实践教程.电子工业出版社,2005.3
4王宗和.单片机实验与综合实验.高等教育出版社,2005.12
(注:
专业文档是经验性极强的领域,无法思考和涵盖全面,素材和资料部分来自网络,供参考。
可复制、编制,期待你的好评与关注)