温湿度传感器实验报告_第1页
温湿度传感器实验报告_第2页
温湿度传感器实验报告_第3页
温湿度传感器实验报告_第4页
温湿度传感器实验报告_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

JUnjhr<Univ«riityiTelecamjni&ationi.小型智能系统设计——

实验项目报告实验名称:基于STC89C52单片机的温湿度变送器实验日期:2014年5月——2014年6月院系:电子科学与工程学院专业:微电子科学与工程指导老师:张熠姓名:高波学号:B13020927EDA实验室开课时间:2013/2014学年第二学期摘要随着人们生活水平的不断提高,利用单片机实现智能控制无疑是人们追求的目标之一,它给人带来的方便也是毋庸置疑的,其中温度传感器就是其中的一个典型例子,但是人们对单片机的控制要求越来越高。要为现代人工作,生活,科研,学习提供更好、更方便、更人性化的设施就要从单片机技术入手,一切向数字化、智能控制化方向发展。温湿度变送器基于STC89C52单片机,配以DHT11传感器、DS1302显示器以及RS485中继站,具有精度高、适用范围广、生产加工简单、成本低、支持远距离传送、操作简单等优点。是工农业生产和日常生活都非常实用的一种器件。TOC\o"1-5"\h\z序言3\o"CurrentDocument"第一章温度采集器总体设计方案41.0温度采集器设计方案论述41.1方案明细4\o"CurrentDocument"第二章硬件设计72.01-wire总线协议介绍71STC89C52的简单介绍8\o"CurrentDocument"2DHT11特点及电气特性9\o"CurrentDocument"MAX232特点及电气特性10\o"CurrentDocument"11.0592晶体振荡器电气特性13\o"CurrentDocument"第三章系统软件设计130主程序设计13\o"CurrentDocument"温度程序设计(DHT11模块)13\o"CurrentDocument"时间程序设计(DS1302模块)14\o"CurrentDocument"第四章总结与体会14第五章软件仿真与系统调试165.0protues软件仿真19\o"CurrentDocument"keilversion仿真25\o"CurrentDocument"5.2实物照片29\o"CurrentDocument"第六章附录296.0主程序源代码30智能温度传感器智能温度传感器(亦称数字温度传感器)是在20世纪90年代中期问世的。它是微电子技术、计算机技术和自动测试技术(ATE_)的结晶。目前,国际上已开发出多种智能温度传感器系列产品。智能温度传感器内部包含温度传感器、A/D传感器、信号处理器、存储器(或寄存器)和接口电路。有的产品还带多路选择器、中央控制器(CPU)、随机存取存储器(RAM)和只读存储器(ROM)。智能温度传感器能输出温度数据及相关的温度控制量,适配各种微控制器(MCU),并且可通过软件来实现测试功能,即智能化取决于软件的开发水平。温室能在不适宜植物生长的季节,为植物提供生育期和增加产量。影响植物生长有多种因素,其中包括温度、湿度、照度这三个重要因素。不适宜的温、湿、照度不仅会阻碍植物生长、影响植物繁殖,也会使病虫害迅速扩散繁殖。因此必须合理控制温室的温、湿、照度,促进作物健康生长,抑制病虫危害,提高作物产量,增加经济效益。目前,绝大多数的温室使用温度计、干湿球湿度计,采用人工观测的方法。这种方法的特点是简单,设备成本很低。缺点是实时性差,检测相对湿度的精度太低,人工工作量大。而此项设计与传统的数字温度计相比,具有读数方便、测温范围广、测温精度高的优点,尤其是温度采用数字显示,设计更加的人性化。设计所需元件,无论是STC89C52单片机,还是测温、湿度所需的DHT11传感器、时钟芯片DST1302、1602A液晶显示器都是市场上所常见的电子元件,设计成本低廉,精度高非常适合生产。再加以RS485作为中继站,就可以实现对温湿度的远距离传输和数据采集,大大减少了人力物力的投入,提高了工农业现代化水平。第一章温度采集器系统设计方案1.0温湿度采集器设计原理由于本设计是测温湿度电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温变化的电压或电流采集过来,进行A/D转换后,可以利用单片机进行数据处理,在显示电路上,就可以将被测温度显示出来,这种设计需要利用到A/D转换电路,感温电路比较麻烦。进而考虑到可以利用温湿度传感器,在单片机电路设计中,大多是使用传感器,所以这是非常容易想到的,所以采用DLLAS的DHT11,由此传感器,可以容易的直接读取被测温湿度值,进而进行转换就可以满足设计要求,以上两种设计思路,通过优劣比较,可以发现DHT11的设计思路比较简单,易于电路设计与焊接,故采用第二种方案。温度传感器的电路设计方框图如图1所示,控制器采用单片机STC89C52,温湿度传感器采用DHT11,用户可以通过显示器读出实时温度、湿度值,单片机与MAX232相连,可以把TTL电平转化为计算机读取的RS-232电平,然后可以通过9针串行通信口与计算机相连,把读到的数据存储在计算机内。再加以RS-485作为中继站,就可以实现对温湿度的远距离传输和数据采集。方便用户随时调阅并进行数据分析。1.1温湿度传感器的总体设计框图图1:硬件总体设计框图

第二章硬件设计2.0STC89C52的简单介绍1JT2/P1.QYCC10-3T2EK/P1.LPO.1JT2/P1.QYCC10-3T2EK/P1.LPO.393Pl.2P0,1.AD13S,_4_Pl.3PO.2/AO2_S75FL.4FO.-3/^DS36GPl.3PC'.4/AD435F7APl.6FC.AL8PL,7g6恨珑9RSTPO.7/AB73210RXD-/P3.0EA31hiTKD/P3.1ALE/?ROGL2INT0/P3.2PSEK_29_ISINTl.'PS.3FW.7/Al5L4,ro/ps.4P2.6/A14二二15TLP3.□P2.5/Al3261673./PS.€P2.4/A1225R&/P3.7P5.S/ill项18'XTAL2P2.2/A102SL9KTAL1P2.1/A922"20VSSP2.0/A821端口引脚第二功能:P1.0T2(定时器/计数器T2的外部计数输入),时钟输出P1.1T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)P1.5MOSI(在线系统编程用)P1.6MISO(在线系统编程用)P1.7SCK(在线系统编程用)P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2INTO(外中断0)P3.3INT1(外中断1)P3.4TO(定时/计数器0)P3.5T1(定时/计数器1)P3.6WR(外部数据存储器写选通)P3.7RD(外部数据存储器读选通)此外,P3口还接收一些用于FLASH闪存编程和程序校验的控制信号。图2STC89C52管脚图STC89C52的主要性能STC89C52与MCS-51单片机产品兼容、8K字节在系统可编程Flash存储器、1000次擦写周期、全静态操作:0Hz〜33Hz、三级加密程序存储器、32个可编程I/O口线、三个16位定时器/计数器八个中断源、全双工UART串行通道、低功耗空闲和掉电模式、掉电后中断可唤醒、看门狗定时器、双数据指针、掉电标识符。DHT11特点及电气特性①DHT11实物图①DHT11产品概述DHT11数字温湿度传感器是一款含有己校准数字信号输出的温湿度复合传感器,它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性和卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式存在OTP内存中,传感器内部在检测型号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,使其成为给类应用甚至最为苛刻的应用场合的最佳选择。产品为4针单排引脚封装,连接方便。②DHT11与单片机的接线图

MCUvt7CVfAJsKDATALPin2FinDHT114PinDiffri引脚说明1pin:VDD用于供电3-5.5VDC2pin:DATA串行数据,单总线3pin:NC空脚,请悬空4pin:GND接地,电源负极②DHT11技术参数供电电压:3.3~5.5VDC输出:单总线数字信号测量范围:湿度20-90%RH,温度0~50°C测量精度:湿度+-5%RH,温度+-2C分辨率:湿度1%RH,温度1C互换性:可完全互换,长期稳定性:<±1%RH/年③电气特性VDD=5V,T=25C,除非特殊标注参数条件mintypmax单位供电DC355.5V供电电流测量0.52.5mA平均0.21mA待机100150uA采样周期秒1次

④详细参数参数条件MinTypMax单位湿度分辨率111%RH8Bit重复性±1%RH精度25C±4%RH0—50°C±5%RH互换性可完全互换量程范围0C3090%RH25C2090%RH50C2080%RH响应时间1/e(63%)25C,1m/s空气61015S迟滞±1%RH长期稳定性典型值±1%RH/yr温度分辨率111C888Bit重复性±1C精度±1±2C量程范围050C响应时间1/e(63%)630S⑤DHT11主要优点能够进行相对湿度和温度测量全部校准,数字输出卓越的长期稳定性无需额外部件超长的信号传输距离超低能耗4引脚安装完全互换⑥DHT11工作原理Max232特点及电气特性C1十11,D16VCCV+GNDC1-314□outC2+4!^AX220^AX23213R1inC2-5MAX232A12R1OUTV-Sj11T1||dRoutUX110T2|n阳N1g9R20UT图6MAX232管脚图①MAX232原理MAX232芯片是专门为电脑的RS-232标准串口设计的接口电路,使用+5v单电源供电。内部结构基本可分三个部分:第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DP9插头;DP9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。第三部分是供电。15脚DNG、16脚VCC(+5v)。2.311.0592晶体振荡器电气特性在使用串口做通信时,一个很重要的参数就是波特率,只有上下位机的波特率一样时才可以进行正常的通信。波特率是指串行端口每秒内可以传输的波特位数。可以用以下的公式计算波特率:波特率=(2sMMOd/32)大定时器1溢出速率上述公式中设置了PCON寄存器中的SMOD位为1时就可以把波特率提升2倍。通常会使用定时器1工作在定时器工作模式2下,这时定时值下的TL1作为计数,TH1作为自动重装值,在这个定时模式下,定时器溢出后,TH1的值会自动重装到TL1,再次开始计数,这样可以不用软件去干预,使得定时更准确。在这个定时模式二下定时器1溢出速率计算公式如下:溢出速率=计数速率/(256-TH1)上式中的“计数速率”与所使用的晶体振荡器频率有关,在51芯片中定时器启动后会在每一个机器周期使用定时寄存器TH的值增加1,一个机器周期等于12个振荡周期,作用可以得知51芯片的技术速率为晶体振荡频率的1/12,一个12M的晶振使用在51芯片上,那么51芯片的计数速率就为1M。通常11.0592M晶体是为了得到标准无误差的波特率2.4MAX485DATASHEET,电路图内容介绍:MAX485是用于RS-485与RS-422通信的低功耗收发器,每个器件中都具有一个驱动器和一个接收器。MAX485的驱动器摆率不受限制,可以实现最高2.5Mbps的传输速率。这种收发器在驱动器禁用的空载或满载状态下,吸取的电源电流在120(A至500(A之间。驱动器具有短路电流限制,并可以通过热关断电路将驱动器输出置为高阻状态,防止过度的功率损耗。接收器输入具有失效保护特性,当输入开路时,可以确保逻辑高电平输出。MAX485引脚(管脚)图及工作电路IOPVIEWRO1DE3DIP/SODI5GND87MAX4S5b4俶"MAXi48T5BGM)RO[■I[:EUMAX4^1RO1Kt2DF34DI1.FlGbCAMX1A1观炫MAW怖口皈f[iFDI=10NOIF:PINLAPELSYiNDZONTlMlh^顽iH-rti'/FFCiRM[14GR4MSRFFER~OFihEiiHDG'^EHDFISHIGH.WICALOPEfWINGCIRCUITSHCWJ府1THDI胳0PACKAGE第三章系统软件设计3.0系统软件的主程序是调用子程序的,它是所有子程序在功能上的汇总,是整个程序的“首脑”,CPU是从从主程序开始读程序的,所以主程序的设计尤为重要。这个系统软件的主程序主要完成温度在4位8段的数码管上显示温度的功能。主程序设计如下:温度程序设计(DS18B20模块)时间程序设计(DS1302模块)4.时间程序设计模块在某些方面与温度设计模块具有很大的相似性,在这里主要介绍一下,其中的显示程序(具体详细程序参见附录后的详细程序清单)voidds1302_display(void)〃显示时分(P2=0xf7;//P2负责位选P0=tab[shi/16];//P0负责段选delay();P2=0xfb;P0=tab[shi%16];delay();P2=0xfd;P0=tab[fen/16];delay();P2=0xfe;P0=tab[fen%16];delay();}第四章总结与体会本次试验,通过设计焊接一个温度传感器,让我们对单片机的基本知识有了一个大致的了解,同时也引起了我们对单片机的兴趣。学习单片机知识是一个软硬结合的学习过程。在实际做这个试验时,我们遇到的困难有硬件连线方面的,也有软件设计方面的。比如在设计软件时,由于对单片机C语言一窍不通,所以在设计软件的时候显得分外掣肘,无从下手。这时候,通过看书和上网查阅相关的资料,我们了解了一些单片机C语言的基础知识,这时候,虽然还是写不出一个完整而准确、可运行的单片机C程序,但是,我们已经可以基本的看懂书本上和网上提供的源程序了。再比如硬件方面,试验中所使用的元器件,无论是单片机STC89C52,还是温度传感元件DHT11,我们都对它们没有任何的了解,更谈不上连线了,这时候,上网是一个很不错的方法,网上提供了很多这样的例子,尽管不完全相同,但作为参考已足够了。这次实验,我觉得收获最大的,既不是对单片机的了解,也不是对动手能力的提高,固然,这两点都是十分重要的。但是,我觉得,还有比这更加重要的,那就是解决问题的方法。一个问题可以有千万种方法解决,但是要在这千万种方法中找到最合适的,是比较困难的,因为每个人的方法都不尽相同,而且受到各种条件的约束,找到自己合适的方法就更困难了。在本次的试验中,我们面临着时间与知识的双重考验。首先由于时间原因,我们不能花大把大把的时间在这项实验上面,这是十分可惜的。其次,我们缺少单片机方面的知识。所以,我们可以依靠的最强大的力量就是图书馆和网络了,这两者都具备各自的优势,图书馆的资源更加准确,网络则更加方便,结合两种,就可以做到最好。于是,我们一方面寻求来自图书馆的图书帮助,通过翻阅单片机的相关资料,对单片机的知识有了一个大概的了解,然后通过网络上的论坛找到了一些相关的实例,通过分析实例,然后再设计自己的电路和系统软件,这样,双管齐下,事半功倍。同时,对于这次的开放性试验,我也体会到了团队合作的重要性与必要性,中国古语:众人拾柴火焰高,面对一个难题,我们固然是要具备独立思考的能力,但是也不能忽略团队合作的重要意义。通过分工协作,纵然是很大的困难,也能将它分成若干模块,分工到个人,最后再交流总结。这样,我们就能很好的解决问题了。在面对巨大难题的时候,团队合作就显得尤为重要。其次,通过这次的实验,我也感觉到了自己在动手方面的不足与欠缺。这需要我在今后的学习中努力锻炼自己的动手能力。同时,我也深刻的认识到了“谋定而后动”的重要性。我们搭完电路,仿真通过,但是这还没有结束,因为实际的硬件连线与在仿真软件上搭电路是不能相提并论的,在实际的硬件连线中,需要我们考虑的因素更多,更复杂。这需要我们在动手之前,仔细的规划好硬件布局,然后再进行焊接。唯有实践方能出真知,这次做的产品给我们上了一次很生动的课。总的来说这次实践,我们学到许多,不仅仅是书本或者是网上的资料给我们的知识,更重要的是动手实践后的体会,感悟。第五章软件仿真与系统调试5.0软件仿真protues8.0FC.1ATI■CZAZ2RP1P1IT2P11-2KPlkFiWKCPl-.TE:Fil'KTCFZVKri丐也

gHF

Fl-R未启动调试按钮之前::::::■-■.-::::::■■::::'■-J'-■||Fr-'餐R-WtrlKA宅卸PilAli底¥12SI由WJiME3maoaH3VTSK*肩F12sF53^PUR.mW司白ME盘项圜M-.lF3就§s1-C3FSms^l-规判舞AiaB网“TEMP(臂)“26・9Huni(墨)“45•祭U1_L*lF_LTLjIDtCl_L忙-!W7■:2...._£....『Y---..-二.±_4-._二.,K2A-CPi3.-\r囚如件5E=3GKR1WE弓顽FSimrK.4-1HIR5T阿疝LW13-TEHPi026.91CHU怕的奇RHE8-・•12伯一115・.nFi=i点击DHT11中的加减按钮增加温度,后选择shift,增加湿度:i=iTEMP(温度):26.9CHuni(湿度):87.6%LT=C-X?C=E.K?・=C2-A2Cr■心=C><?==C4-A34=C=-A2f=C6-X2€R="=C7-AD7FE・=2.2.A1CreEbF2HA11生ET.51三巳=2.rAi==2.=-AU=S."A1==3tRXEFJ—EXFS-TXTF.Eps.2mroP\3F-.l=2.LtP\5二在一・FGjyWHF\TF=.T^EisSTC89C52单片机工作状态,以及引脚使用情况。1■zi■r九孔通用串口模拟仿真以及引脚使用情况DHT11温湿度传感器模拟仿真图keilversion4软件仿真图Q都-仰klwi4--EkEdt质%B亦FgUH皿片6计由址Tubg直Wsbdi:m--jirflj-!LAjE£ArM...a^at.U2void卸霸J箭3£部3B壬3契攵U2void卸霸J箭3£部3B壬3契攵5J18323篡3S3S32r328veIleLunii_valrtac_vaL;floatd£K_pcint;imsipedchaierrci^eieckBOff;//iniit_uaTC();L:Mnicial();GotoXI(DrC);PriEC(nTEKP:GctaKf[OplH1Print("HUMI:sconrecticEresetwhile(L)H//convertsintegerto//convertsintegerto//calculatebumidicy^floatflcacteweratme!㈣昼湿度工.,一.//incasecfarerrcr:ccMec£ionr&aec破有舞,系曲//遮择湿璧显示婆;//%裕空恃_();”.弱睇复付eetdi=D;//初翦化mt)r=Df即没有摧误&rror+=3_neaBuze((nnsipedatiar")friiunii_val.ir£ctieck?uiifHUMI|;//r.e.3,s'LizehumidiTyerTor+=3_nea5iir£((unsignedchar")tce^val.irtcliecksini,TEMPI;//^eas'iieten^eratnreif(Error!=0)3ctHMieceioDresetd;elseIkumi_vaL.f=(float\Jiumi_val.i;tai5_vaL.f=(float!tai5_val.i;calc_3thlL|&上umi_uaL.ifEtatP-VaLfp;dewpciDt=calcdeTODiEt(humival.frt3ipval.f);//calculatedewpointtar=ceD5_vsl.f*lD?humi=huiiTai.f*10;GM皿|5丽;/谶晶字靛示强Y=tpn/innf--|_|_|1=1/□心少国温湿度缺器4sfrDBFort=0x80;//PO=0x80fPJ=0x90fP2=0xA0,P3=0iB0.数据端匚LCDWait(void)yy内函************k****************"*k*******.**********k*******K*****・■unsignedcharLcdR£=0;n°P_(;

nop(;LciR^=L;LcdEr=L;LedEr=0;returnDEPoxt;/7同二LCDWait(void)n°P_(;

nop(;/7同二CD写入命令或^^a*K.***m**a*"m*m*****v^mm・LCD_COMMAMELCD^DATALCDCLZAR_SCREEKLCD_HOMIMG^dezine^define^dezine^dezineidL2DWrite(bitstyle,0L0x0L0x02unsignedCormnandData〃清屏//光标返回原点charinpat)//HLcdEr=0;LciRs=styl=;LcdRix=0;DEPort^mp^t;LcdEr=L;LcdEr=0;LCDWait():nopnopnop0;t}:/7注意顺序t};/V注意顺序0;0x04nvnn0x04nvnn〃设置显示模式*************k*************心*n*****5******m*******AdelineLCD_SHOW0x04〃显示开Mki]=rrnttifnvnn-潟元辛』/口回此因温湿度传感裁includeincludeincludeincludeSffT110±LCD1^02C<REG52.h>//Microc-on^rollerspecificlibrary,e.g.portdefinitions<inttins.h><nm.th.h><stdio.h>yp-edefunion£misigiisdint±;floatE;}value;intternfhuiti,x,zriu;umi[TEMPfHU14I}.?bitDATAbitSCKdefinedefineP1A7;Pl";noACK□氏崩1//Keil//Keil//Keillibrary(isusedfor_nop(}_operation!librarylibrari,//adrCQncnaardr/wdefineSTATUS_REG_W0x06//0330D110dexine5TMU5_REG_RDXQ7//oaa0D111defineS-fEiSURE_TEWPOm03//doo00011define:4EASURE[hum0x05//0330D101defineRESETOxle//ooo11110defineuctiarunsianedchaicharjgh|[10]={rrOOO%cIT};■itri|—|^1~-■TTi—f-nt-T11圭旦“匚E1Zj曷,/重温湿度传感器,丈bitfcrir.asking/r.aBkingvaluewitni『writetc5ENSI-BUS//elk±orSENSI-3US//pulswithapprox.5\im/leleaseDATA-line/elk#2fcrack/checkeck(DATAixrillbepulled.dewnby5HT11}incaseq£.ncaG-Jmawledg'Edgivesanscicno'wledg已incss已cf,re.ck=l,rZieleaseDATA-linebitfcrmasking/elk±ct5EN5I-3J5Z/ieadbit同四沽r\同四沽r\DZ1TZl—T_irhff-5.2实物照片去掉显示器的内部结构整体实物图第六章附录附录:程序代码//DS1602程序(1602.C):#include<tou.h>//内部等待函数**************************************************************unsignedcharLCD_Wait(void)(LcdRs=0;LcdRw=1;_nop_();LcdEn=1;_nop_();

LcdEn=0;returnDBPort;}〃向LCD写入命令或数据********************************************************#defineLCD_COMMAND0//Command#defineLCD_DATA1//Data#defineLCD_CLEAR_SCREEN0x01//清屏#defineLCD_HOMING0x02//光标返回原点voidLCD_Write(bitstyle,unsignedcharinput)(LcdEn=0;LcdRs=style;LcdRw=0;_nop_();DBPort二input;_nop_();//注意顺序LcdEn=1;_nop_();//注意顺序LcdEn=0;_nop_();LCD_Wait();}//设置显示模式************************************************************#defineLCD_SHOW0x04//显示开#defineLCD_HIDE0x00//显示关#defineLCD_CURSOR0x02//显示光标#defineLCD_NO_CURSOR0x00//无光标#defineLCD_FLASH0x01〃光标闪动#defineLCD_NO_FLASH0x00〃光标不闪动voidLCD_SetDisplay(unsignedcharDisplayMode)(LCD_Write(LCD_COMMAND,0x08|DisplayMode);}〃设置输入模式************************************************************#defineLCD_AC_UP#defineLCD_AC_DOWN0x020x00//default#defineLCD_MOVE0x01//画面可平移#defineLCD_NO_MOVE0x00//defaultvoidLCD_SetInput(unsignedcharInputMode)(LCD_Write(LCD_COMMAND,0x04|InputMode);}//初始化LCD************************************************************voidLCD_Initial()(LcdEn=0;LCD_Write(LCD_COMMAND,0x38);//8位数据端口,2行显示,5*7点阵LCD_Write(LCD_COMMAND,0x38);LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR);//开启显示,无光标LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);//清屏LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE);//AC递增,画面不动}//液晶字符输入的位置************************voidGotoXY(unsignedcharx,unsignedchary)(if(y==0)LCD_Write(LCD_COMMAND,0x80|x);if(y==1)LCD_Write(LCD_COMMAND,0x80|(x-0x40));}〃将字符输出到液晶显示voidPrint(unsignedchar*str)(while(*str!='\0')(LCD_Write(LCD_DATA,*str);str++;}}//SHT10程序(SHT10.c):#include<tou.h>#definenoACK0//继续传输数据,用于判断是否结束通讯#defineACK1〃结束数据传输,〃地址命令读/写#defineSTATUS_REG_W0x06//00000110#defineSTATUS_REG_R0x07//00000111

#defineMEASURE_TEMP0x03//0000001#defineMEASURE_HUMI0x05//000001011#defineRESET0x1e//0001111〃写字节程序chars_write_byte(unsignedcharvalue)(unsignedchari,error=0;0for(i=0x80;i>0;i>>=1)(//高位为1,循环右移if(i&value)DATA=1;发送的位elseDATA=0;SCK=1;〃和要发送的数相与,结果为_nop_();_nop_();_nop_();SCK=0;}〃延时3usDATA=1;SCK=1;〃释放数据线error=DATA;讯正常_nop_();_nop_();_nop_();SCK=0;DATA=1;//检查应答信号,确认通returnerror;}〃读字节程序chars_read_byte(unsignedcharack)//error=1通讯错误//-

(unsignedchari,val=0;DATA=1;〃释放数据线for(i=0x80;i>0;i>>=1)〃高位为1,循环右移(SCK=1;if(DATA)val=(val|i);〃读一位数据线的值SCK=0;}DATA=!ack;〃如果是校验,读取完后结束通讯;SCK=1;_nop_();_nop_();_nop_();〃延时3usSCK=0;_nop_();_nop_();_nop_();DATA=1;//释放数据线returnval;}〃启动传输voids_transstart(void)//generatesatransmissionstart////DATA:||////SCK:||___||(DATA=1;SCK=0;〃准备_nop_();SCK=1;_nop_();DATA=0;_nop_();SCK=0;_nop_();_nop_();_nop_();SCK=1;_nop_();DATA=1;_nop_();SCK=0;}〃连接复位voids_connectionreset(void)//communicationreset:DATA-line=1andatleast9SCKcyclesfollowedbytransstart////DATA:|////SCK:__||__||__||__||__||__||__||__||__||||___||(unsignedchari;DATA=1;SCK=0;〃准备for(i=0;i<9;i++)//DATA保持高,SCK时钟触发9次,发送启动传输,通迅即复位(

SCK=1;SCK=0;}s_transstart();}〃软复位程序chars_softreset(void)//resetsthesensorbyasoftreset(unsignedcharerror=0;s_connectionreset();error+=s_write_byte(RESET);returnerror;〃启动传输//启动连接复位//发送复位命令//error=1通讯错误}/*读状态寄存器chars_read_statusreg(unsignedchar*p_value,unsignedchar*p_checksum)////readsthestatusregisterwithchecksum(8-bit)(unsignedcharerror=0;s_transstart();//transmissionstarterror=s_write_byte(STATUS_REG_R);//sendcommandtosensor*p_value=s_read_byte(ACK);//readstatusregister(8-bit)*p_checksum=s_read_byte(noACK);//readchecksum(8-bit)returnerror;//error=1incaseofnoresponseformthesensor}//写状态寄存器chars_write_statusreg(unsignedchar*p_value)//writesthestatusregisterwithchecksum(8-bit)(unsignedcharerror=0;s_transstart();//transmissionstarterror+=s_write_byte(STATUS_REG_W);//sendcommandtosensorerror+=s_write_byte(*p_value);//sendvalueofstatusregisterreturnerror;//error>=1incaseofnoresponseformthesensor}*/〃温湿度测量chars_measure(unsignedchar*p_value,unsignedchar*p_checksum,unsignedcharmode)〃进行温度或者湿度转换,由参数mode决定转换内容;(//enum{TEMP,HUMI};〃已经在头文件中定义unsignederror=0;unsignedinti;〃启动传输//启动连接复位//发送复位命令//error=1通讯错误(caseTEMP:error+=s_write_byte(MEASURE_TEMP);break;//测量温度

caseHUMI:error+=s_write_byte(MEASURE_HUMI);break;〃测量湿度default:break;default:break;for(i=0;i<65535;i++)if(DATA==0)break;//等待测量结束if(DATA)error+=1;//如果长时间数据线没有拉低,说明测量错误*(p_value)=s_read_byte(ACK);(MSB)*(p_value+1)=s_read_byte(ACK);(LSB)*p_checksum=s_read_byte(noACK)returnerror;//}〃温湿度值标度变换及温度补偿//读第一个字节,高字节〃读第二个字节,低字节;//readCRC校验码error=1通讯错误voidcalc_sth10(float*p_humidity,float*p_temperature)(constfloatC1=-4.0;//12位湿度精度修正公式constfloatC2=+0.0405;//12位湿度精度修正公式constfloatC3=-0.0000028;//12位湿度精度修正公式constfloatT1=+0.01;//14位温度精度5V条件修正公式constfloatT2=+0.00008;//14位温度精度5V条件修正公式floatrh=*p_humidity;//rh:12位湿度floatt=*p_temperature;//t:14位温度

//rh_lin:湿度linear//rh_true:湿度ture//t_C:温度°Cfloatrh_lin;值floatrh_true;值floatt_C;t_C=t*0.01-40;〃补偿温度rh_lin=C3*rh*rh+C2*rh+C1;//相对湿度非线性补偿rh_true=(t_C-25)*(T1+T2*rh)+rh_lin;〃相对湿度对于温度依赖性补偿if(rh_true>100)rh_true=100;//湿度最大修正if(rh_true<0.1)rh_true=0.1;//湿度最小修正*p_temperature=t_C;//返回温度结果*p_humidity=rh_true;〃返回湿度结果}//从相对温度和湿度计算露点/*floatcalc_dewpoint(floath,floatt)(floatlogEx,dew_point;logEx=0.66077+7.5*t/(237.3+t)+(log10(h)-2);dew_point=(logEx-0.66077)*237.3/(0.66077+7.5-logEx);}retuI~*/#include<reg52.h>externdelay(intz);voidUART_init()(//11.0592MH

温馨提示

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

评论

0/150

提交评论