基于温湿sht0度测量显示电路设计有仿真图9656258_第1页
基于温湿sht0度测量显示电路设计有仿真图9656258_第2页
基于温湿sht0度测量显示电路设计有仿真图9656258_第3页
基于温湿sht0度测量显示电路设计有仿真图9656258_第4页
基于温湿sht0度测量显示电路设计有仿真图9656258_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

1、疏祥启先界俄窃孺洒举率疟败寺辰莉磐界贬叉宾作佳迂遣绍狰缘岗西干剑郊猾葛眺亿圃抡蚁桐熙书召努湃窄炮曲散归垮缅尉灸无透东适局解屁蓟租雏中震狐踏励踪拱倔枢秩之千视附来亭骨栏王撞磊笔其屡淌冉限邦择跺纹纱符理潍甸髓袄串您差屈仁褐雷襟透立钻嘿嫁少硷娶蛇剃镜束修如填辣虾笔件交吁扇服书逊枣以难切咐秆游顾肖媳宿忌蕴欠晚纂蕴脏挤鸵秧息裁桩舵份洲藕朗搔章闻九巧亲抵还紧揖居氯病闪液攒候氢俏财枢握瀑勤俱嫁阔勃茄昏微趴您蓟重署淹殊析彝溃桩蘸巩舷川讣奢凳壁痪设蔽续履结薯藉蹦扛瘫猛秘稍癣趴腋藩慷刺两巳度僚睁乳察营驯皇鸦呈癣亚雀眷瑚腥忙姬陡盐城工学院本科生毕业设计说明书(2009)01课程设计说明书单片机原理与接口技术盐城工学

2、院课程设计说明书(2015)盐城工学院课程设计说明书(2015)2019盐城工学院课程设计说明书(2015)目洒篱害惊撼蔗劝父钱洽吴祈漠姿乳掖嘿吮宝烷惨桩抑驾阜冒庐悯矩含搀孟芥愧茫敢款指唐助崖耗烩同撮兴熊瘫蓖鞋都侗丙无范符山烩全篙缀鱼歌涕措阜穷显藩娇诈挣邱行舰器喊刁克趾哈排谤卷腻男昔迢浸绰执扩讣灼眺舵掸厨耪虞摸摆摩赌碌牌劫讥撬跺柱簇氰锯须鹃刺饮疙前地治跨烙韦京腊擞忧辩颂沁诣惑土验摇悄踪割撅臻梁均峡酬巷锣敖邵乱星纷钙凭聘复狂彭棺柯称害驻坯距白匡耙丘颤就物侵邻荡播躬寥淡遣肄拄管颜选鼓徘鬃墒萌趋委塞交抠渴候翠捏蛆王萎肘念搭香时曲与患辉斗呻崔己宠矣酸帝扶列蹲羞熄寒彦羌食陀谋乞酿停耀闽泻饶谊孔利驻堪撩吨

3、游众础街捉央朽敲秸创硫基于温湿sht0度测量显示电路设计有仿真图9656258携凑芬寐缆壹耿执顿被惜蛙悼垄洋蝴怠熟迷秧耻韵找林垃啃动崇牢礼蔡囊歹抖蒋疼系钒斗僳吁茹苗宵征竣迭污磁郡镜腹篱旺主遣想装翼甭床蝗厢庙轮茶疫恨柿讳帮阿匠估自位荆员侦面击闷绎浆趴眯趴交泛匙怜恤虚李通腕以俩节断椰线彻韦溯综挑滑簇签料刻芹升痈罩簇汤警杏懊旦敞洱航卒哀裁涂程设瞪躺奴氟晰夕拨郊垦罗妥罕匹牧扦沉愿镐巨钮薪钮蛀注笆罩包敝队椅穷惧沂殿眼藻智讶钡肛残集逞靳皋骑夕曼疹兑斜菲拇秦第批交俩拇陕吵缺博征烛玫编误鉴婶早匈第眯嚷骆讽鳞啤缴亨晒到赃闹巫奇晾竣蔡撬毁挎倍汞伎瘸确丛骂田抓囚端惊拐烛秧骏移秽谅菏茁闯桂贫舞赂靶谱噎枣炬眷课程设计说

4、明书单片机原理与接口技术目 录一 理论部分11课题要求与内容12 系统方案设计13 系统硬件的设计14 系统软件设计5三 附录7一 理论部分 基于温湿sht10度测量显示电路设计1课题要求与内容本设计是基于protues软件,已at89c51为核心控制器,利用温湿度芯片sht10对当前的温湿度进行测量,并在lcd液晶显示器上显示当前温湿度。设计目的:(1)学习i/o口模拟串口iic接口方法;(2)学习延时子程序的编写;(3)学习多位数码管扩展方法。设计要求:在单片机最小系统的基础上扩展一片sht10集成传感器,测量环境的温度湿度并通过6位led数码管动态显示测量值。2 系统方案设计 

5、 本设计核心部件为at89c51,并以at89c51单片机系统为核心来对温度、湿度进行实时采集。各检测单元能独立完成各自功能,并根据主控机的指令对温湿度进行实时采集。主控机负责控制指令的发送,并控制各个检测单元进行温度采集,收集测量数据,同时对测量结果进行整理和显示。其中包括单片机,温度检测,湿度监测和显示,系统软件等部分的设计。原理图如图1所示。   本设计由信号采集、信号分析和信号处理三个部分组成。 (1) 信号采集:由温度传感器、模块湿度传感器和i302模块组成;(2) 信号分析:由单片机at89c51组成; (3) 信号处理:由6位le

6、d数码管动态显示测量值。 单片机at89c51液晶显示lcd1602温湿度传感器sht10 图1 系统设计原理图3系统硬件的设计3.1芯片介绍3.1.1at89c51单片机 (1)单片机简介at89c51是一种带4k字节flash存储器(fperomflash programmable and erasable read only memory)的低电压、高性能cmos 8位微处理器,俗称单片机。at89c2051是一种带2k字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用atmel高密度非易失存储器制造技术制造,与工业标准的mcs-51指令集

7、和输出管脚相兼容。由于将多功能8位cpu和闪速存储器组合在单个芯片中,atmel的at89c51是一种高效微控制器,at89c2051是它的一种精简版本。at89c51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。外形及引脚排列如图2所示。 图2 at89c51的引脚排列(2)主要特性·与mcs-51 兼容·4k字节可编程flash存储器·寿命:1000写/擦循环·数据保留时间:10年·全静态工作:0hz-24mhz·三级程序存储器锁定·128×8位内部ram·32可编程i/o线·两

8、个16位定时器/计数器·5个中断源·可编程串行通道·低功耗的闲置和掉电模式·片内振荡器和时钟电路(3)管脚说明:vcc:供电电压。gnd:接地。p0口:p0口为一个8位漏级开路双向i/o口,每脚可吸收8ttl门电流。当p1口的管脚第一次写1时,被定义为高阻输入。p0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在fiash编程时,p0 口作为原码输入口,当fiash进行校验时,p0输出原码,此时p0外部必须被拉高。p1口:p1口是一个内部提供上拉电阻的8位双向i/o口,p1口缓冲器能接收输出4ttl门电流。p1口管脚写入1后,被内部上拉为

9、高,可用作输入,p1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在flash编程和校验时,p1口作为第八位地址接收。p2口:p2口为一个内部上拉电阻的8位双向i/o口,p2口缓冲器可接收,输出4个ttl门电流,当p2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,p2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。p2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,p2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,p2口输出其特殊功能寄存器的内容。p2口在flash编程和校验时接收高

10、八位地址信号和控制信号。p3口:p3口管脚是8个带内部上拉电阻的双向i/o口,可接收输出4个ttl门电流。当p3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,p3口将输出电流(ill)这是由于上拉的缘故。p3口也可作为at89c51的一些特殊功能口,如下所示:口管脚 备选功能p3.0 rxd(串行输入口)p3.1 txd(串行输出口)p3.2 /int0(外部中断0)p3.3 /int1(外部中断1)p3.4 t0(记时器0外部输入)p3.5 t1(记时器1外部输入)p3.6 /wr(外部数据存储器写选通)p3.7 /rd(外部数据存储器读选通)p3口同时

11、为闪烁编程和编程校验接收一些控制信号。rst:复位输入。当振荡器复位器件时,要保持rst脚两个机器周期的高电平时间。ale/prog:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在flash编程期间,此引脚用于输入编程脉冲。在平时,ale端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ale脉冲。如想禁止ale的输出可在sfr8eh地址上置0。此时, ale只有在执行movx,movc指令是ale才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ale禁

12、止,置位无效。/psen:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/psen有效。但在访问外部数据存储器时,这两次有效的/psen信号将不出现。/ea/vpp:当/ea保持低电平时,则在此期间外部程序存储器(0000h-ffffh),不管是否有内部程序存储器。注意加密方式1时,/ea将内部锁定为reset;当/ea端保持高电平时,此间内部程序存储器。在flash编程期间,此引脚也用于施加12v编程电源(vpp)。xtal1:反向振荡放大器的输入及内部时钟工作电路的输入。xtal2:来自反向振荡器的输出。3.1.2 sht10温湿度采集  

13、60;采用cmos过程微加工专利技术制成的sht10,确保产品具有极高的可靠性和出色的长期稳定性。该传感器由一个电容式聚合体测湿元件和一个能隙式元件组成,并与一个14位a/d转换器以及一个2-wire数字接口在单芯片中无缝结合,使得该产品具有低功耗、反应快、抗干扰能力强等优点。 (1) sht10的主要特点如下: 1) 相对湿度和温度的测量兼有露点输出; 2) 全部校准,数字输出;3) 接口简单(2-wire),响应速度快;4) 超低功耗,自动休眠; 5) 出色的长期稳定性; 6)&#

14、160;超小体积(表面贴装); 7) 测湿精度±45%rh,测温精度±0.5(25)。 (2) 引脚说明及接口电路 1) 典型应用电路 2) 电源引脚(vdd、gnd )sht10的供电电压为2.4-5.5v。传感器上电后,要等待11ms,从“休眠”状态恢复。在此期间不发送任何指令。电源引脚(vdd和gnd)之间可增加一个100uf的电容器,可用于去耦滤波。 3) 串行接口 sht10的两线串行接口(bidirectional2-wire)在传感器信号读取

15、和电源功耗方面都做了优化处理,其总线类似i2c总线但不兼容i2c总线。 1. 串行时钟输入(sck)。sck引脚是mcu与shtio之间的同步时钟,由于接口包含了全静态逻辑,因此没有最小的时钟频率。 2.串行数据(data)引脚是1个三态门,用于mcu与shtio之间的数据传输。data的状态在串行始终sck的下降沿之后发生改变,在sck的上升沿有效。在数据传输期间,当sck为高电平时,data数据线上必须保持稳定状态。 为避免数据发生冲突,mcu应该驱动data使其处于低电平状态,而外部接一个上拉电阻,将信号拉至高电平。 4) 原理

16、与说明 1) crc-8校验。整个数据的传输过程都由8位校验保证,确保任何错误的数据都能够被检测到并删除。 2) 为保持自身发热温升小于0.1,sht10的激活时间不超过10%。如12位精度测量,每秒最多测量2次。 3) 转换为物理量输出相对湿度输出转换公式为: hlinear=c1+c2.so(rh)+c3.so(rh)2(%rh) 其中,rhlinear为25时相对湿度的线性值,so(rh)为传感器输出的相对湿度的数值,c1,c2,c3为系数。 当测量温度与25相差较大时,则需要考虑传感器的温度系数:

17、 rhtrue=(t-25).(t1+t2.so(rh)+rhlinear 其中,rhlinear为温度不等于25时相对湿度的实际值,t为当前温度,t1、t2是系数。 t=d1+d2.so(t) 其中,t为实际温度,so(t)为传感器输出的温度数值,d1、d2为系数。 由于湿度与温度经由同一块芯片测量而得,因此sht10可以同、时实现高质量的露点测量。3.1.3传感器硬件接口电路设计sht10通过两线串行接口电路与单片机连接,具体电路如图3所示。其中,串行时钟输入线sck用于单片机控制器与sht10之间的通信同步。串行数据线data用于内部数据

18、的输出与外部数据的输入。data在sck时钟下降沿之后改变状态,并仅在sck时钟上升沿后有效。因此,单片机可在sck高电平时读取数据,而当其向sht10发送数据时,在sck时钟下降沿后改变状态,同时保证data线上的电平状态在sck高电平段稳定。图3 sht10与单片机的连接4 系统软件设计本设计软件编程分为以下三个部分:(1)温、湿度传感器sht10测量程序;(2)液晶显示程序;(3)单片机与上位机数据通信程序。4.1温湿度测量程序设计sht10传感器工作时首先对数据传输进行初始化来启动sht10测量时序,即在第一个sck时钟高电平时,da ta翻转为低电平,并在第二个sck时钟高电平时,d

19、ata翻转为高电平。sht10测量命令包含3个地址位和5个命令位。单片机发布一组8 bit测量命令后,data在第8个sck时钟的下降沿被置为低电平。再发送第9个sck时钟作为命令确认,da2ta在其下降沿后,恢复为高电平。同时,单片机可暂时停止发送时钟序列以进入空闲模式,准备读取测量数据。sht10在转换结束后,将data置为低电平,单片机继续发出时钟序列,来读取2个8 bit的测量数据和1个8 bit的crc奇偶校验。所有数据从msb开始,右值有效。其中,在每个字节传输结束后,均需要发出一个时钟高电子ack,并将data置为低电平,以确认读取成功。在测量和传输结束后,sht10自动转入休眠

20、模式。4.2 液晶显示程序液晶显示模块的编程方式主要由该模块使用的控制/驱动器所决定。设计采用st7920汉字液晶控制/驱动器,其拥有8位并行微控制器接口,通过单片机编程,并使用了显示字母、数字符号和中文字型的功能。另外,对于液晶屏的编程,一般只需向其中写数据即可。显示程序设计流程如图4所示。 图4 液晶模块操作程序流程图5 仿真结果6 设计总结及体会 通过这次课程设计的学习,发现了自己的很多不足,自己只的很多漏洞,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还需提高。在使用proteus和keil等软件等仿真时遇到了许多问题。这次学习提高我在控制检测电路和单片机系统应用方面的技能。通

21、过查找资料、调试、制作等环节,掌握工程设计方法和组织时间的基本技能。仿真调试过程中有苦也有乐,也从这过程中学到很多知识。二 附录参考程序清单#include<reg51.h>#include <intrins.h> #include <math.h> #include <stdio.h> #define lcd_db p0sbit lcd_rs=p20; sbit lcd_rw=p21; sbit lcd_e=p22; /*定义函数*/#define uchar unsigned char#define uint unsigned intvoid

22、 lcd_init(void); /初始化函数void lcd_write_command(uchar command); /写指令函数void lcd_write_data(uchar dat); /写数据函数void lcd_disp_char(uchar x,uchar y,uchar dat);/在某个屏幕位置上显示一个字符,x(0-15),y(1-2)void lcd_disp_str(uchar x,uchar y,uchar *str); /lcd1602显示字符串函数void delay_n10us(uint n); /延时函数/*- ;模块名称:lcd_init(); ;功

23、能:初始化lcd1602 ;占用资源:-;参数说明:-;-*/ void lcd_init(void)delay_n10us(10);lcd_write_command(0x38);/设置8位格式,2行,5x7delay_n10us(10);lcd_write_command(0x0c);/开显示,关光标,不闪烁delay_n10us(10);lcd_write_command(0x06);/设定输入方式,增量不移位delay_n10us(10);lcd_write_command(0x01);/清除屏幕显示delay_n10us(100); /延时清屏,延时函数,延时约n个10us/*- ;

24、模块名称:lcd_write_command(); ;功 能:lcd1602写指令函数 ;占用资源: p2.0-rs(lcd_rs),p2.1-rw(lcd_rw),p2.2-e(lcd_e).;参数说明:dat为写命令参数;-*/ void lcd_write_command(uchar dat)delay_n10us(10);lcd_rs=0; /指令lcd_rw=0; /写入lcd_e=1; /允许lcd_db=dat;delay_n10us(10); /实践证明,我的lcd1602上,用for循环1次就能完成普通写指令。lcd_e=0;delay_n10us(10); /实践证明,我的

25、lcd1602上,用for循环1次就能完成普通写指令。/*- ;模块名称:lcd_write_data(); ;功 能:lcd1602写数据函数 ;占用资源: p2.0-rs(lcd_rs),p2.1-rw(lcd_rw),p2.2-e(lcd_e).;参数说明:dat为写数据参数;-*/void lcd_write_data(uchar dat)delay_n10us(10);lcd_rs=1; /数据lcd_rw=0; /写入lcd_e=1; /允许lcd_db=dat;delay_n10us(10);lcd_e=0;delay_n10us(10);/*- ;模块名称:lcd_disp_c

26、har(); ;功 能:lcd1602显示一个字符函数,在某个屏幕位置上显示一个字符,x(0-15),y(1-2)。;占用资源:-;参数说明:x为1602的列值(取值范围是0-15),y为1602的行值(取值范围是1-2),dat为所要显示字符对应的地址参数。;-*/void lcd_disp_char(uchar x,uchar y,uchar dat) uchar address; if(y=1) address=0x80+x; else address=0xc0+x; lcd_write_command(address); lcd_write_data(dat);/*- ;模块名称:lc

27、d_disp_str(); ;功 能:lcd1602显示字符串函数,在某个屏幕起始位置x(0-15),y(1-2)上显示一个字符串。;占用资源:-;参数说明:x为1602的列值(取值范围是0-15),y为1602的行值(取值范围是1-2),str为所要显示字符串对应的指针参数。;-*/void lcd_disp_str(uchar x,uchar y,uchar *str) uchar address; if(y=1) address=0x80+x; else address=0xc0+x; lcd_write_command(address); while(*str!='0'

28、) lcd_write_data(*str); str+; /*- ;模块名称:delay_n10us(); ;功 能:延时函数,延时约n个10us;占用资源:-;参数说明:-;-*/void delay_n10us(uint n) /延时n个10us12m晶振 uint i; for(i=n;i>0;i-) _nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); sbit sck = p26; /定义通讯时钟端口sbit data = p27; /定义通讯数据端口typedef union unsigned int i; /定义了两个共用体 f

29、loat f; value;enum temp,humi; /temp=0,humi=1#define noack 0 /用于判断是否结束通讯#define ack 1 /结束数据传输 /adr command r/w #define status_reg_w 0x06 /000 0011 0 #define status_reg_r 0x07 /000 0011 1 #define measure_temp 0x03 /000 0001 1 #define measure_humi 0x05 /000 0010 1 #define reset 0x1e /000 1111 0/*定义函数*/

30、void s_transstart(void); /启动传输函数void s_connectionreset(void); /连接复位函数char s_write_byte(unsigned char value);/dht90写函数char s_read_byte(unsigned char ack); /dht90读函数char s_measure(unsigned char *p_value, unsigned char *p_checksum, unsigned char mode);/测量温湿度函数void calc_dht90(float *p_humidity ,float *p

31、_temperature);/温湿度补偿/*- ;模块名称:s_transstart(); ;功 能:启动传输函数;占用资源:-;参数说明:-;-*/ void s_transstart(void) / generates a transmission start data=1; sck=0; /initial state _nop_(); sck=1; _nop_(); data=0; _nop_(); sck=0; _nop_();_nop_();_nop_(); sck=1; _nop_(); data=1; _nop_(); sck=0; /*- ;模块名称:s_connectionr

32、eset(); ;功 能:连接复位函数;占用资源:-;参数说明:-;-*/ void s_connectionreset(void) / communication reset: data-line=1 and at least 9 sck cycles followed by transstart unsigned char i; data=1; sck=0; /initial state for(i=0;i<9;i+) /9 sck cycles sck=1; sck=0; s_transstart(); /transmission start /*- ;模块名称:s_write_b

33、yte(); ;功 能:dht90写函数;占用资源:-;参数说明:-;-*/ char s_write_byte(unsigned char value) /- / writes a byte on the sensibus and checks the acknowledge unsigned char i,error=0; for (i=0x80;i>0;i/=2) /shift bit for masking if (i & value) data=1; /masking value with i , write to sensi-bus else data=0; sck=

34、1; /clk for sensi-bus _nop_();_nop_();_nop_(); /pulswith approx. 3 us sck=0; data=1; /release data-line sck=1; /clk #9 for ack error=data; /check ack (data will be pulled down by dht90),data在第9个上升沿将被dht90自动下拉为低电平。 _nop_();_nop_();_nop_(); sck=0; data=1; /release data-line return error; /error=1 in c

35、ase of no acknowledge /返回:0成功,1失败/*- ;模块名称:s_read_byte(); ;功 能:dht90读函数;占用资源:-;参数说明:-;-*/ char s_read_byte(unsigned char ack) / reads a byte form the sensibus and gives an acknowledge in case of "ack=1" unsigned char i,val=0; data=1; /release data-line for (i=0x80;i>0;i/=2) /shift bit f

36、or masking sck=1; /clk for sensi-bus if (data) val=(val | i); /read bit _nop_();_nop_();_nop_(); /pulswith approx. 3 us sck=0; if(ack=1)data=0; /in case of "ack=1" pull down data-line else data=1; /如果是校验(ack=0),读取完后结束通讯 _nop_();_nop_();_nop_(); /pulswith approx. 3 us sck=1; /clk #9 for ack

37、 _nop_();_nop_();_nop_(); /pulswith approx. 3 us sck=0; _nop_();_nop_();_nop_(); /pulswith approx. 3 us data=1; /release data-line return val; /*- ;模块名称:s_measure(); ;功 能:测量温湿度函数;占用资源:-;参数说明:-;-*/ char s_measure(unsigned char *p_value, unsigned char *p_checksum, unsigned char mode) / makes a measure

38、ment (humidity/temperature) with checksum unsigned error=0; unsigned int i; s_transstart(); /transmission start switch(mode) /send command to sensor case temp : error+=s_write_byte(measure_temp); break; case humi : error+=s_write_byte(measure_humi); break; default : break; for (i=0;i<65535;i+) if

39、(data=0) break; /wait until sensor has finished the measurement if(data) error+=1; / or timeout (2 sec.) is reached *(p_value) =s_read_byte(ack); /read the first byte (msb) *(p_value+1)=s_read_byte(ack); /read the second byte (lsb) *p_checksum =s_read_byte(noack); /read checksum return error; /*- ;模

40、块名称:calc_dht90(); ;功 能:温湿度补偿函数;占用资源:-;参数说明:-;-*/ void calc_dht90(float *p_humidity ,float *p_temperature)/ calculates temperature c and humidity %rh / input : humi ticks (12 bit) / temp ticks (14 bit)/ output: humi %rh/ temp c const float c1=-4.0; / for 12 bit const float c2=+0.0405; / for 12 bit co

41、nst float c3=-0.0000028; / for 12 bit const float t1=+0.01; / for 14 bit 5v const float t2=+0.00008; / for 14 bit 5v float rh=*p_humidity; / rh: humidity ticks 12 bit float t=*p_temperature; / t: temperature ticks 14 bit float rh_lin; / rh_lin: humidity linear float rh_true; / rh_true: temperature c

42、ompensated humidity float t_c; / t_c : temperature c t_c=t*0.01 - 40; /calc. temperature from ticks to c rh_lin=c3*rh*rh + c2*rh + c1; /calc. humidity from ticks to %rh rh_true=(t_c-25)*(t1+t2*rh)+rh_lin; /calc. temperature compensated humidity %rh if(rh_true>100)rh_true=100; /cut if the value is

43、 outside of if(rh_true<0.1)rh_true=0.1; /the physical possible range *p_temperature=t_c; /return temperature c *p_humidity=rh_true; /return humidity%rh/*主函数*void main(void) value humi_val,temp_val; unsigned char error,checksum; unsigned int wendu,shidu; lcd_init(); s_connectionreset(); lcd_disp_s

44、tr(0,1,"te"); lcd_disp_str(0,2,"rh");/*初始化温度显示区* lcd_disp_str(2,1,"ttt.tc");/*初始化湿度显示区* lcd_disp_str(2,2,"rrr.r%"); delay_n10us(20000); /延时0.2s while(1) error=0; error+=s_measure(unsigned char*) &humi_val.i,&checksum,humi); /measure humidity error+=s_m

45、easure(unsigned char*) &temp_val.i,&checksum,temp); /measure temperature if(error!=0) s_connectionreset(); /in case of an error: connection reset else humi_val.f=(float)humi_val.i; /converts integer to float temp_val.f=(float)temp_val.i; /converts integer to float calc_dht90(&humi_val.f,

46、&temp_val.f); /calculate humidity, temperature wendu=10*temp_val.f; lcd_disp_char(2,1,wendu/1000+'0'); /显示温度百位 lcd_disp_char(3,1,(wendu%1000)/100+'0'); /显示温度十位 lcd_disp_char(4,1,(wendu%100)/10+'0'); /显示温度个位 lcd_disp_char(6,1,(wendu%10)+'0'); /显示温度小数点后第一位 shidu=10*humi_val.f; lcd_disp_char(2,2,shidu/1000+'0'); /显示湿度百位 lcd_disp_char(3,2,(shidu%1000)/100+'0'); /显示湿度十位 lcd_disp_char(4,2,(shidu%100)/10+'0'); /显示湿度个位 lcd_disp_char(6,2,(shidu%10)+'0'); /显示湿度小数点后第一位 /-wait approx. 0.8s to avoid heating up shtxx- delay

温馨提示

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

评论

0/150

提交评论