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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数字温湿度计的设计文档格式.docx

1、其可在120度高温环境中稳定工作,这一点是其他高分子电容是湿度传感器不可比拟的;但是氯化锂湿敏电阻线性测湿量程较窄,约在20%RH左右,在该测量范围内,其线性误差小于2%RH。所以,在全范围湿度测量环境中要想达到高精度的湿度测量,目前普遍采用的单片湿敏元件测量方法就很难实现了。 有机高分子膜湿敏电阻的特点是在基片上覆盖一层用感湿材料制成的膜,当空气中的水蒸气吸附在感湿膜上时,元件的电阻率和电阻值都发生变化,利用这一特性即可测量湿度。此湿敏电阻的优点是线性优良,性价比高,能耗低,测量范围宽,响应速度快,抗污染能力强,性能稳定等。因此我们选择了此类湿敏电阻。型号为HR202.3.3 模数转换芯片的

2、选择温度的测量范围为0到100,精度为1,分散为100个数据,故采用8位的采样芯片即可满足要求。对湿度进行采样所需的数据宽度小于温度的数据宽度,故此次试验中的温湿度测量仪采用一个8位的采样芯片即可满足要求。在众多AD转换芯片中,ADC0809是国内应用最广泛的芯片,价格便宜,购买方便,参数与性能也满足了本实验的要求,故在此实验中,我们选择了ADC0809。ADC0808是采样分辨率为8位的、以逐次逼近原理进行模/数转换的器件。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。3.4 主控芯片的选择 此次试验所处理的数据并不复杂,对主控器

3、的要求不高,故使用我们已经用的比较熟练的C51系列单片机即可。在此,我们选用了MCS89C52单片机,89C52内置8位中央处理单元、256字节内部数据存储器RAM、8k片内程序存储器(ROM)32个双向输入/输出(I/O)口、3个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。此外,89C52还可工作于低功耗模式,可通过两种软件选择空闲和掉电模式。在空闲模式下冻结CPU而RAM定时器、串行口和中断系统维持其功能。掉电模式下,保存RAM数据,时钟振荡停止,同时停止芯片内其它功能。89C52有PDIP(40pin)和PLCC(44pin)两种封装形式。我们选用了40

4、pin的封装。3.5 显示屏的选择 市面上应用最广泛的显示屏之一就是LCD1602,价格便宜,使用方便,而且现成的资源很多,便于开发利用,最重要的是,LCD1602完全满足了本次试验的要求。1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形。1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。目前市面上字符液晶绝大多数是基

5、于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。其引脚图如下:4 硬件系统设计4.1 总体设计电路本次设计是采用AT89S52控制ADC0809对NTC热敏电阻进行采样和控制HR202来实现温湿度的测量和控制。硬件电路主要包括单片机控制模块、温度采集模块、湿度采集模块、显示模块、报警器模块和键盘输入模块。整个系统的原理图如下:4.2 温湿度的检测电路不同的温度使热敏电阻感应到了不同的阻值,其上的分压也相应作出了改变。将此电压通过ADC0809的采样,转换为数字信号,再将数字信号传输到单片机中,有单片机进行后续的处理

6、和计算。4.2.1 温度采集模块部分温度测量部分,Rt1为温敏电阻,选用的阻值较小,约为十几欧姆,和R4分压产生的电压很小,再采用集成运放放大一倍最后将放大的电压进行采样。4.2.2 湿度采集模块部分利用单片机的IO口输出1kHz的方波,通过HR200湿敏电阻对电容进行充电,当检测到IO口发生有低电平转化到高电平时,记下充电的时间,经过运算即可得到当前的湿度值。4.2 单片机控制模块送入单片机内部的数字信号经过单片机的处理,根据程序提供的公式计算出此电压下所对应的温度(湿度),再将数据通过显示屏显示出来。其处理过程主要由单片机控制程序进行控制。4.3 显示电路模块使用LCD1602液晶显示屏进

7、行显示。单片机将温湿度数据经处理后由P0.0P0.7口输出到LCD。4.4 报警器模块报警器部分由三极管和有源蜂鸣器组成。输入来的电流经过三极管的放大来驱动蜂鸣器。具体电路如下:4.5 键盘输入模块4.1电阻R4阻值的确定由温敏电阻的数据手册可知当温度为0时,RT为28.5左右,V=RT/(RT+R4),现有材料中最小电阻为51,所以取R4为51,且V2.5,所以可用运放放大2倍。4.2温敏电阻B值的计算根据数据手册,温敏电阻的B值为32505%。5 软件系统设计5.1电阻R4阻值的确定5.2温敏电阻B值的计算5.3程序部分的设计系统程序采用单片机C语言编写。程序简洁,可靠性高,可维护性好。主

8、程序流程图: 模数转化流程图6 数据测量与分析6.1 测量方案 在测量中,我们需要一个成品的温湿度计来作数据的基准比较。对这个温湿度计的要求为:能够完整的测量实验作品所测范围内的温度和湿度,所测温度和湿度的误差范围在1和1%以内。6.1.1 温度测量 由于作品的测温范围为从为0到100,正好为水所能表现出来的温度范围,所以测试中我们采用侧水温的方法来测量不同的温度。测试步骤:(1)将刚刚烧沸的水倒入容器中,并将基准温度计的感应温度的部分完全浸入水中,读取水的温度值。将所做的温湿度计的热敏电阻完全浸入水中,再读取现在两个仪器所显示出来的温度值,记录于数据记录表中。(2)然后再缓慢的,往刚才的沸水

9、中加入冷水,边加边缓慢的搅动,使水温均匀、缓慢的下降。当基准温度计显示的温度下降了5,停止加水,读取二者的具体温度,记录于数据记录表中。(3)然后再继续加水,每5测量一次。直到水的温度达到冷水的温度。(4)向其中加入冰块,做成冰水混合物,测量此时,水的温度。(5)最后测试温度报警。任意设置报警门限为60,将热敏电阻放入沸水中,验证蜂鸣器是否响起。6.1.2 湿度测量 要求中,湿度的测量范围为20%-100%,由于湿度受到空气中所含水分的多少和温度的高低的影响。所以测试时采用和温度一起测试的方法,也就是利用水温的不同来使水表面空气的温度不同,进而相对湿度值也就不同。在测试温度的同时,将标准温湿度

10、计的湿度感应部分与作品的湿敏电阻一起悬置的水的上方但不能碰触到水滴。6.2 数据测量温度测量结果记录表环境温度()51015202530354045测得温度()50556065707580859095湿度测量结果记录表环境湿度(%)测得湿度(%)1006.3 数据分析6.4 电路改进 电路改进的方向就是提高输入电压精度。而电压源是很难满足这一要求的,所以,在这应考虑用恒流源来处理。 假如给恒流源一个I=1mA的电流,然后再用1K的热敏电阻加到恒流源上,这样电压就很好控制了。V = I*RT.则,当RT为K时,其电压值就为),最大为1V,这大大提高了分辨率,使得到的温度值更加精确。7 参考文献1

11、 ADC0809用户手册2 LCD1602用户手册3 AT89S52用户手册4 LM358用户手册5 热电型红外传感器用户手册6 HC74LS74用户手册7 HR202用户手册8 XX搜索引擎附录一:代码Main.c#include#include #include LCD1602.hADC0808.hRH.hextern uchar display_buffer_116;extern uchar display_buffer_216;extern uchar Keynum;uchar Flag = 0;void main() TMOD=0x10; TH1=(65536-4000)/256;

12、TL1=(65536-4000)%256; EA=1; ET1=1; TR1=1; /unsigned int Keynum = 4; Initialize_LCD1602(); delay50us(10); Write_LCD_Command(0x80);/设置显示的初始位置 LCD_Display(display_buffer_10);/显示The Temp is: while(1) adc0808_init(); Refresh_show(); Write_LCD_Command(0xc0); LCD_Display(display_buffer_11); /显示测得的数据 keysca

13、n(); if(Keynum = 0) Keynum = 4;Flag = 1; while(Flag = 1) Write_LCD_Command(0x80); LCD_Display(display_buffer_20); keyscan(); if(Keynum = 3)Flag = 0; ADC0809.C/ADC0809 控制 & 数据采样 & 数据处理math.hunsigned long dat_adc0808;uchar display_buffer_116= Current Temp:, (T) =0.00 C ;void delay50us(uint m) uint n,k

14、; for(n=m;n0;n-) for(k=25;kk-);uint adc0808_init() / AD初始化 START=0; OE=0; START=1; while(EOC=0); OE=1; dat_adc0808=P1; return dat_adc0808;void Refresh_show() /刷新显示 uint t=dat_adc0808*500.0/255; / display_buffer_116 = t/100+0; /整数位 display_buffer_118 = t/10%10+ /两个小数位 display_buffer_119 = t%10+ displ

15、ay_buffer_1110 = 0xdf;Lcd1602.C/液晶控制与显示驱动程序string.h/-忙检查-/uchar LCD_Busy_Check() uchar LCD_Status; RS = 0; RW = 1; E = 1; delay4us(); LCD_Status = P0; E = 0; return LCD_Status;/-向LCD写入命令-/void Write_LCD_Command(uchar cmd) while(LCD_Busy_Check()& 0x80)=0x80); /忙等待 RW = 0; P0 = cmd;/-向LCD写入一个字节的数据函数-*

16、/void Write_LCD_Data(uchar dat)0x80)=0x80); RS = 1; P0 = dat;/-LCD初始化-*/void Initialize_LCD1602() /液晶初始化函数 Write_LCD_Command(0x38);delay50us(10); /功能设置,数据长度为8位,双行显示,57点阵字体 Write_LCD_Command(0x0C); / 显示开,关光标 Write_LCD_Command(0x06); /字符进入模式:屏幕不动,字符后移 Write_LCD_Command(0x01);/清屏/-在LCD上显示字符串-*/void LCD

17、_Display(uchar *str) uchar i; for(i=0;istrlen(str);i+) Write_LCD_Data(stri); delay50us(100);RH.C/湿度控制 & 键盘控制 & 报警设置sbit H1 = P24;sbit H2 = P25;sbit H3 = P26;sbit Key0 = P20;sbit Key1 = P21;sbit Key2 = P22;sbit Key3 = P23;sbit CLOCK=P36;sbit Buzzer = P27;uchar Keynum = 4;uchar display_buffer_216= Set

18、ting Temp:void keyscan() uchar Temp1,Temp2; Temp1 = P2; /读P2口数据 Temp1 = Temp1&0x0f; /提取按键相关数据P2口的低四位 if(Temp1 != 0x0f) /判断键是否有按下的 delay50us(500); /延时消抖 Temp2 = P2; /再读P0口 Temp2 = Temp2&/取P0口低四位数据 if(Temp1 = Temp2) /如果两次读取的按键数据一样,则表示有按键按下 switch(Temp2) /判断键值 case 0x0e:Keynum = 0;break; case 0x0d:Keyn

19、um = 1; case 0x0b:Keynum = 2; case 0x07:Keynum = 3; default: while(Temp2 != 0x0f) /按键释放检测 Temp2 = P2; /必须赋值 确实 必须赋值 不赋值Temp2就不变了 Temp2 = Temp2&void Setting() void t1(void) interrupt 3 using 0 CLOCK=CLOCK;ADS0809.h#ifndef _ADC0808_H_#define _ADC0808_H_#define data_port P1#define uchar unsigned char#d

20、efine uint unsigned intsbit START=P33;sbit EOC=P34;sbit OE=P35;void delay50us(uint m);/ 延时uint adc0808_init(); / AD初始化void Refresh_show();#endifLCD1602.h#ifndef _LCD1602_H_#define _LCD1602_H_#define dat_port P0#define delay4us() _nop_();_nop_();sbit RS=P32;/RS=1 数据 RS=0 命令sbit RW=P30;/RW=1 读取 RW=0 写入sbit E=P31;/E 使能信号uchar LCD_Busy_Check();/忙检查void Write_LCD_Command(uchar cmd);/向LCD写入命令void Write_LCD_Data(uchar dat); /向LCD写入一个字节的数据函数void Initialize_LCD1602(); /液晶初始化函数void LCD_Display(uchar *str);/在LCD上显示字符串RH.H#ifndef _RH_H_#define _RH_H_void keyscan();

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1