SHT温湿度.doc_第1页
SHT温湿度.doc_第2页
SHT温湿度.doc_第3页
SHT温湿度.doc_第4页
SHT温湿度.doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

福州大学至诚学院单片机原理及应用(单片机实训)课程设计任务书题 目: 使用SHT11测量温湿度 姓 名: 刘东平 学 号: 211102278 系 别: 电气工程系 专 业: 电气工程及其自动化 年 级: 11级 起讫日期: 2013.12.30 指导教师: 高伟 设 计 任 务一、课程设计目的通过课程设计,要求学生掌握以下知识和技能:1单片机应用系统的总体方案的设计;2单片机应用系统的硬件设计;3单片机应用系统的软件程序设计及综合调试;4Proteus仿真软件的使用;5. 熟练使用单片机开发工具。二、课程设计要求1.能够独立地完成所选的题目,并能够实现各功能1 理解项目的需求,编写说明文档;2. 单片机应用系统的硬件原理图一份,要求用Protel绘图;3 程序流程图、程序源码(要求必要的注释);4. 调试程序,完成后烧写为脱机运行方式并测试是否正常;5 写设计报告,演示并简要说明设计要点,分析存在的问题及解决方法。三、技术要求使用SHT11测量温湿度,显示,通过按键,切换显示温湿度值(IIC接口)四、拟采用的方法(包括芯片的选型等)采用将温度和湿度一起测量,即用一个温湿度传感器SHT11实现。温湿度传感器SHT11将温度感测、湿度感测、信号变换、A/D转换和加热器等功能集合到一个芯片上,该芯片包括一个电容性聚合体湿度敏感元件和一个用能隙材料制成的温度敏感元件,这两个敏感元件分别将湿度和温度转换成电信号,该信号首先进入微弱信号放大器进行信号放大,然后进入一个14位的A/D转换器,最后经过二线串行数字接口输出数字信号,采用数码管显示所测温度和湿度。五、该同学在本设计中承担的任务本人主要进行仿真,也参与程序的编写。 福州大学至诚学院单片机原理及应用(单片机实训)课程设计报告书题 目: 使用SHT11测量温湿度 姓 名: 刘东平 学 号: 211102278 系 别: 电气工程系 专 业: 电气工程及其自动化 年 级: 11级 起讫日期: 2013.12.30 指导教师: 高伟 目 录1.设计概述42.硬件电路图53.软件设计53.1流程图53.2程序54. 结论4.1测试结果164.2遇到问题164.3如何解决165.参考文献171. 设计概述1.1、主要功能要求 温度和湿度传感器均选用模拟类型,并完成其信号放大和传递电路的设计;AD转换采用8位并行的AD89C51; 显示器件选择LED液晶显示; 温度值和湿度值间隔轮流显示; 单片机系统采用51单片机系统; 完成硬件电路的设计和制作; 完成软件程序的设计; 完成整个系统的设计、调试和制作;1.2、整机设计框图及整机概述系统整机框图: 温度采集电路湿度采集电路AD转换51单片机最小系统显示单元图1 系统整机框图整机概述本数字温湿度检测仪利用80c51单片机系统、温度传感器、湿度传感器、热敏电阻、AD转换器件和数码管显示器件。传感器采集现场温度及湿度,经过AD转换后送至单片机运算处理,并将处理后的数据送数码管显示,以此实现实时温度和湿度的检测。2硬件电路图3软件设计软件上,本设计主要分为两部分:定时器和液晶显示,两者又是同时工作。3.1 流程图3.1 主程序: 3.2 中断服务程序: 结束显示显示湿度转化温度转化P2.0=?开始结束采样通道选择初始化开始 图2 软件流程图主程序 图3 中断服务程序图2为软件设计的主程序,开始后先经过初始化再根据要求来选择对应的通道,然后结束。图五为中断服务程序,开始后看P2.0等于多少,对应的选择温度转换还是湿度转换,对应着显示,然后结束。微处理器和温湿度传感器通信采用串行二线接口SCK和DATA,其中SCK为时钟线,DATA为数据线。该二线串行通信协议和I2C协议是不兼容的。在程式开始,微处理器需要用一组启动传输时序表示数据传输的启动,如图3所示。当SCK时钟为高电平时,DATA翻转为低电平;紧接着SCK变为低电平,随后又变为高电平;在SCK时钟为高电平时,DATA再次翻转为高电平。 图4 数据传输启动程序 3.3显示原理图图5 LED显示原理图图4为软件方面的显示原理图,开始后,单片机经过初始化后接收数据,然后进行地址校验,校验不合格继续接受数据,校验合格的话取湿度给定值进而采样温湿度值,然后数码显示后上传数据,继续循环。温度和湿度值的计算(1)SHT11可通过DATA数据总线直接输出数字量湿度值。该湿度值称为相对湿度,需要进行线性补偿和温度补偿后才能得到较为准确的湿度值。由于相对湿度数字输出特性呈一定的非线性,因此为了补偿湿度传感器的非线性,可按下式修正湿度值:式中:RHlinear为经过线性补偿后的湿度值,SORH为相对湿度测量值,C1、C2、C3为线性补偿系数,取值如表2所列。 由于温度对湿度的影响十分明显,而实际温度和测试参考温度25有所不同,所以对线性补偿后的湿度值进行温度补偿非常有必要。补偿公式如下: 式中:RHtrue为经过线性补偿和温度补偿后的湿度值,T为测试湿度值时的温度(),t1和t2为温度补偿系数,取值如表3所列。 表2湿度线性补偿系数 表3湿度值温度补偿系数(2)温度值输出 由于SHT11是采用PTAT能隙材料制成的温度敏感元件,因而具有非常好的线性输出。实际温度值可由下式算得:Temperature=d1+d2SOT 式中:d1和d2为特定系数,d1的取值和SHT11工作电压有关,d2的取值则和SHT11内部AD转换器采用的分辨率有关。3.2 程序#include /头文件#include #include /#include /Keil library /*#define uchar unsigned char /定义一下方便使用#define uint unsigned int /定义一下方便使用#define ulong unsigned long /定义一下方便使用#define TEMP_ML 0x03 /000 0001 1 温度命令#define HUMI_ML 0x05 /000 0010 1 温度命令unsigned char error ;/全局错误变量unsigned char ack ;/全局应答变量unsigned char temp_h ;/全局应答变量unsigned char temp_LL ;/全局应答变量unsigned int xianzhi_t=0;/温度显值unsigned int xianzhi_h=0;/湿度显值 sbit DATA =P26;/数据 sbit SCK=P27;/时钟 sbit temp =P00;/ 温度 sbit humi =P01;/ 湿度 sbitgwei =P34;/个位 sbitswei =P33;/十位int number = 11; unsigned char code dispcode=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90;/共阳/ / /延时/void delay(int i) while(-i); char read() /读一个字节 返回应答信号/-/ reads a byte form the Sensibus and gives an acknowledge in case of ack=1 unsigned char i,val=0; temp_LL=0; temp_h=0; DATA=1; /释放数据总线 for(i=0x80;i0;i/=2) /位移8位 SCK=1; /上升沿读入 if (DATA) val=(val | i); /确定值 SCK=0; DATA=0; /读应答信号,有应答为1,为应答为0 通过CPU下拉为应答 SCK=1; /第9个脉冲 _nop_(); _nop_(); _nop_(); /pulswith approx. 5 us SCK=0; DATA=1; /释放数据总线 temp_h=val; val=0; /低8位/ DATA=1; /释放数据总线 for (i=0x80;i0;i/=2) /位移8位 SCK=1; /上升沿读入 if (DATA) val=(val | i); /确定值 SCK=0; DATA=1;/0; /不需要应答 通过CPU下拉为应答 SCK=1; /第9个脉冲 _nop_(); _nop_(); _nop_(); /pulswith approx. 5 us SCK=0; DATA=1; /释放数据总线 temp_LL=val; / char write(unsigned char value) /写一个字节 返回应答信号/- unsigned char i ; ack=0; for(i=0x80;i0;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; return ack; /error=1 表示没有应答/void start_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; /完成该脉冲 /void sht_rest(void) /复位 unsigned char i; DATA=1; SCK=0; /数据为1 时钟为0 for(i=0;i9;i+) /9 个脉冲为 复位 SCK=1; SCK=0; start_sht11(); /启动/ void display()if(temp=0)number = xianzhi_t;/if(humi=0)elsenumber = xianzhi_h;/int number = xianzhi_t;gwei = 1;swei = 1;P1 = dispcodenumber/100;swei = 0;delay(40);swei = 1;number = number%100;P1 = dispcodenumber/10;gwei = 0;delay(40);gwei = 1; /测量温度或者是温度,返回校验值void text_a(unsigned char ml) unsigned int i; start_sht11(); /启动 write(ml);/写入测温度if (ack=1) sht_rest() ;/复位 write(ml);/写入测温度 for (i=0;i55535;i+) if(DATA=0) break;else display(); read();/读温度 /温湿度处理/ /计算温度/temp = 0.01*t-40/void text_jishuan_temp() float aa=0,bb=0,temp_zi;int abcd=0; aa=(float)temp_h*256+(float)temp_LL; temp_zi=0.01*aa-40; if(temp_zi0) temp_zi=0; temp_zi=temp_zi*10; xianzhi_t=(int)temp_zi;/给显示值 /计算湿度/-2.8*10(-5)*h*h+0.405*h-40void text_jishuan_humi() float aa=0,bb=0,humi_zi;int abcd=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;void text_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心得体会通过这次课程设计的学习,发现了自己的很多不足,自己知识的很多漏洞,

温馨提示

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

评论

0/150

提交评论