ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:170.73KB ,
资源ID:123827      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-123827.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单点温湿度采集LCD显示.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

单点温湿度采集LCD显示.docx

1、单点温湿度采集LCD显示1、用户需求随着科技的不断发展,温湿度的测量在仓储管理、生产制造、气象观测、工农业生产、科学研究以及日常生活中被广泛应用,传统的模拟式湿度传感器一般不仅要设计信号调理电路,还要经过复杂的校准和标定过程,其测量精度难以保证,且在线性度、重复性、互换性、一致性等方面往往不尽人意。为了克服这些缺点,本设计采用了温度传感器SHT11芯片,它是一款含有已校准数字信号输出的温湿度复合传感器可以使整个系统的温度测量误差优于0.5,相对湿度测量误差优于4%。2、设计任务选择合适的数字式温湿度传感器,通过单片机读取现场温湿度,并实时送数码管显示。 3、设计目的 1学习基本理论在实践中综合

2、运用的初步经验,掌握电路设计的基本方法、设计步骤,培养综合设计与调试能力。 2学会电路设计方法和性能指标测试方法。 3培养实践技能,提高分析和解决实际问题的能力。4、原理框图及说明根据设计任务,设计如下框图:电源部分为单片机提供稳压5V电压、12MHZ晶振和按键复位功能;LCD为双行显示,第一行显示温度,第二行显示相对湿度;温湿度采集电路单点采集温湿度,在芯片内部转化成数字量后串行输入单片机并由LCD显示。5、主要元件选择及参数计算主要芯片为:RES电阻、CAP电容、CRYSTAL晶振、单片机AT89C51、按键BUTTONLCD 1602、排阻25630901RP2、温湿度传感器SHT115

3、.1电源、复位与振荡电路51单片机为高电平复位,按键按下使RST持续至少两个机器周期高电平实现复位。振荡电路选择12MHz晶体,C1、C2选择33pF瓷片电容。图2、电源、复位与振荡电路5.2 显示电路LCD1602为显示电路核心元件,其主要技术参数如下: 显示容量:162 个字符 芯片工作电压:4.55.5V 工作电流:2.0mA 模块最佳工作电压:5.0V 字符尺寸:2.954.35(WH)mm 引脚功能说明 本设计中LCD1602 采用标准的 14脚(无背光)接口,第 1 脚:VSS 为地电源。 第 2 脚:VDD接 5V正电源。 第 3 脚:VL为液晶显示器对比度调整端,接正电源时对比

4、度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个 10K 的电位器调整对比度。 第 4 脚:RS 为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。 第 5 脚:R/W 为读写信号线,高电平时进行读操作,低电平时进行写操作。当 RS和 R/W共同为低电平时可以写入指令或者显示地址,当 RS 为低电平 R/W 为高电平时可以读忙信号,当 RS 为高电平 R/W为低电平时可以写入数据。 第 6 脚:E端为使能端,当 E 端由高电平跳变成低电平时,液晶模块执行命令。 第 714脚:D0D7为 8 位双向数据线。1602字符型液晶基本指令序号指令RSR/WDB7DB

5、6DB5DB4DB3DB2DB1DB01清显示00000000012光标返回0000000013置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L6功能设置00001DLNF7设置字符发生存储器地址0001字符发生存储器地址8设置数据存储器地址001显示数据存储器地址9读忙标志或地址01BF计数器地址10写数据到RAM10要写的数据内容11从RAM读数据11读出的数据内容电路说明:LCD1602数据引脚依次与P0口相应位相接,实现控制命令、温湿度数据传输。第 3 脚为液晶显示器对比度调整端直接接地时对比度高可能会产生“鬼影”,故使其通

6、过一个 10K 的电位器接地,调整为合适的对比度。设计选用的芯片为两行显示,第一行显示:“TEMP: C”, 第二行显示:“HUMI: RH”,显示范围均为000.0999.9。图3、显示电路5.3温湿度采集电路温湿度传感器引脚说明如下:():接地端;():双向串行数据线;():串行时钟输入;()电源端:电源端;():空管脚。参数计算:()湿度值输出可通过总线直接输出数字量湿度值,其输出特性呈一定的非线性,为了补偿湿度传感器的非线性,可按如下公式修正湿度值:式中,为传感器相对湿度测量值,系数取值如下:位:,位:,()温度值输出由于温度传感器的线性非常好,故可用下列公式将温度数字输出转换成实际温

7、度值:当电源电压为,且温度传感器的分辨率为位时, ,当温度传感器的分辨率为位时, 。()露点计算空气的露点值可根据相对湿度和温度值来得出,具体的计算公式如下:()()()()传感器用户命令:命 令编 码说 明测量温度00011温度测量测量湿度00101湿度测量读寄存器状态00111“读”状态寄存器写寄存器状态00110“写”状态寄存器软启动11110重启芯片,清除状态记录器的错误记录11毫秒后进入下一个命令()传输开始初始化传输时,应首先发出“传输开始”命令,该命令可在为高时使由高电平变为低电平,并在下一个为高时将升高。接下来的命令顺序包含三个地址位(目前只支持“”)和个命令位,当脚的位处于低

8、电位时,表示正确收到命令。()连接复位顺序如果与传感器的通讯中断,下列信号顺序会使串口复位:即当线处于高电平时,触发 次以上(含次),此后应接着发一个“传输开始”命令。SHT11状态寄存器类型及说明:位类型说 明缺 省7保留06读工检限(低电压检查)X5保留04保留03只用于试验,不可以使用02读/写加热0关1读/写不从OTP重下载0重下载0读/写1=8位相对湿度,12位温度分辨率。0=12位相对湿度,14位温度分辨率012位相对湿度,14位温度电路说明:单片机上电复位后,单片机按照一定时钟频率从P1.6口发出用户命令,SHT11根据命令向P1.7口串行输出温度和湿度数据。图4、温湿度采集电路

9、6、主流程图7、体会与感想这是这次课程设计中独立完成项目,相对于前一个公共项目,独立完成的题目要求更高了。上一次只设计了硬件图没有进行仿真和实物制作,这次不仅要求程序仿真而且鼓励做出硬件图。在这次课程设计中,我对于proteus的使用更加熟练了,经过自己努力和同学的帮助顺利完成了硬件图和仿真。下面谈一下我在设计中遇到的问题。首先是元件选择。经过多方查阅资料确定了温湿度传感器型号SHT11,但是在老师给的proteus中元件库中不含有所需元件,这让我很是头疼。最后有同学说自己下载的proteus7.7版本中有所需元件,才解决了这个问题。设计中的其他部分比较好做,程序也顺利的编译通过,但是把HEX

10、文件下载到元件中仿真时却总是出现错误。查资料,问同学,最终才知道是自己把元件的更改过才出现问题的。我先是把元件的“Exclude from Simulation”选项勾上,这样仿真就不会报错了,但是却不会正常仿真,最后我把所有报错的元件删除重新连了一遍就不再会报错了,问了同学才知道元件的说明部分不可以随意改动的,它与元件功能实现有关。这次课程设计让我受益匪浅,不仅使我熟练掌握了proteus的用法,而且学到了很多知识,锻炼了动手能力和编程能力,在实践中加深了对单片机功能的认识。附1、硬件原理图附2、程序清单#include#include #define uchar unsigned char

11、#define uint unsigned int#define noACK 0 /继续传输数据,用于判断是否结束通讯#define ACK 1 /结束数据传输; /SHT11 地址 命令 读1/写0#define MEASURE_TEMP 0x03 /000 0001 1#define MEASURE_HUMI 0x05 /000 0010 1#define RESET 0x1e /000 1111 0enum TEMP,HUMI;/测量模式 :温度/湿度sbit LcdRs = P24;sbit LcdRw = P25;sbit LcdEn = P26;sfr DBPort = 0x80;

12、/P0sbit SCK = P30;sbit DATA = P31;char s_write_byte(uchar value) /SHT11写字节程序 uchar i,error=0; for (i=0x80;i0;i=1) /高位为1,循环右移 if (i&value) DATA=1; /和要发送的数相与,结果为发送的位 else DATA=0; SCK=1; _nop_();_nop_();_nop_(); /延时3us SCK=0; DATA=1; /释放数据线 SCK=1; error=DATA; /检查应答信号,确认通讯正常 _nop_();_nop_();_nop_(); SCK

13、=0; DATA=1; return error; /error=1 通讯错误char s_read_byte(uchar ack) /SHT11读字节程序 uchar i,val=0; DATA=1; /释放数据线 for(i=0x80;i0;i=1) /高位为1,循环右移 SCK=1; if(DATA) val=(val|i); /读一位数据线的值 SCK=0; DATA=!ack; /如果是校验,读取完后结束通讯; SCK=1; _nop_();_nop_();_nop_(); /延时3us SCK=0; _nop_();_nop_();_nop_(); DATA=1; /释放数据线 r

14、eturn val;void s_transstart(void) /启动传输SHT11/ generates a transmission start DATA=1; SCK=0; /准备 _nop_(); SCK=1; _nop_(); DATA=0; _nop_(); SCK=0; _nop_();_nop_();_nop_(); SCK=1; _nop_(); DATA=1; _nop_(); SCK=0; void s_connectionreset(void)/SHT11连接复位/ communication reset: DATA-line=1 and at least 9 SC

15、K cycles followed by transstart uchar i; DATA=1; SCK=0; /准备 for(i=0;i9;i+) /DATA保持高,SCK时钟触发9次,发送启动传输,通迅即复位 SCK=1; SCK=0; s_transstart(); /启动传输char s_softreset(void)/SHT11软复位程序/ resets the sensor by a softreset uchar error=0; s_connectionreset(); /启动连接复位 error+=s_write_byte(RESET); /发送复位命令 return err

16、or; /error=1 通讯错误/温湿度测量char s_measure(uchar *p_value, uchar *p_checksum, uchar mode)/ 进行温度或者湿度转换,由参数mode决定转换内容; unsigned error=0; uint i; s_transstart(); /启动传输 switch(mode) /选择发送命令 case TEMP : error+=s_write_byte(0x03); break; /测量温度 case HUMI : error+=s_write_byte(0x05); break; /测量湿度 default : break

17、; for (i=0;i100)rh_true=100; /湿度最大修正 if(rh_true0;x-) for(y=125;y0;y-);void main() uint temp,humi; uint humi_val_i,temp_val_i; /测量结果 float humi_val_f,temp_val_f;/修正结果 uchar error; /用于检验是否出现错误 uchar checksum; /CRC uchar wendu6; /用于记录温度 uchar shidu6; /用于记录湿度 LCD_Initial(); /初始化液晶 GotoXY(0,0); /选择温度显示位置

18、 Print(TEMP: %C); /5格空格 GotoXY(0,1); /选择湿度显示位置 Print(HUMI: %RH); /5格空格 s_connectionreset(); /启动连接复位 while(1) error=0; /初始化error=0,即没有错误 error+=s_measure(uchar*)&temp_val_i,&checksum,TEMP); /温度测量 error+=s_measure(uchar*)&humi_val_i,&checksum,HUMI); /湿度测量 if(error!=0) s_connectionreset(); /如果发生错误,系统复位

19、 else humi_val_f=(float)humi_val_i; /转换为浮点数 temp_val_f=(float)temp_val_i; /转换为浮点数 calc_sth10(&humi_val_f,&temp_val_f); /修正相对湿度及温度 temp=temp_val_f*10; humi=humi_val_f*10; GotoXY(5,0); /设置温度显示位置 wendu0=temp/1000+0; /温度百位 wendu1=temp%1000/100+0; /温度十位 wendu2=temp%100/10+0; /温度个位 wendu3=0x2E; /小数点 wendu4=temp%10+0; /温度小数点后第一位 Print(wendu); /输出温度 GotoXY(5,1); /设置湿度显示位置 shidu0=humi/1000+0; /湿度百位 shidu1=humi%1000/100+0; /湿度十位 shidu2=humi%100/10+0; /湿度个位 shidu3=0x2E; /小数点 shidu4=humi%10+0; /湿度小数点后第一位 Print(shidu); /输出湿度 delay(800); /等待足够长的时间,以现行下一次转换

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

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