毕业设计基于STC12C5A60S2单片机的数字温湿度计设计_第1页
毕业设计基于STC12C5A60S2单片机的数字温湿度计设计_第2页
毕业设计基于STC12C5A60S2单片机的数字温湿度计设计_第3页
毕业设计基于STC12C5A60S2单片机的数字温湿度计设计_第4页
毕业设计基于STC12C5A60S2单片机的数字温湿度计设计_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

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

文档简介

1、 东东 莞莞 理理 工工 学学 院院本 科 毕 业 设 计毕业设计题目:温湿度控制器毕业设计题目:温湿度控制器学生姓名:学生姓名:学学 号:号:系系 别:别:专业班级:专业班级:指导教师姓名及职称:刘华珠指导教师姓名及职称:刘华珠 高级工程师高级工程师起止时间:起止时间:20112011 年年 1111 月月 20122012 年年 6 6 月月摘摘 要要本论文介绍了一种以单片机 stc12c5a60s2 为主要控制器件,以pt100,sht15 分别为温,湿度传感器。本设计主要包括硬件电路的设计和系统软件的设计。硬件电路主要包括控制器,测温湿控制电路和显示电路等。控制器用带有 ad 转换的单

2、片机,温度传感器 pt100,湿度传感器采用 sht15,显示电路采用 1 个 8 位共阴极 led 数码管,用锁存器是显示效果更好。测温湿控制电路由温湿度传感器和预置温湿度值比较报警电路组成,当实际测量温湿度值大于预置温湿度值时,发出报警信号(发光二极管点亮)而且使外电路驱动(继电器动作) 。软件部分主要包括主程序,测温湿度子程序,显示子程序和按键子程序等。本次设计采用的 sht15 湿度传感器包括一个电容式聚合体测湿元件和一个能隙式测温元件,并与一个 14 位的 a/d 器以及串行接口电路在同一芯片上实现无缝链接,从而具有超快响应,抗干扰能力强,性价比高等优点。而且 pt100 在要求的范

3、围内线性度很好。关键词关键词:温度测量, 湿度测量,温度算法,pt100,sht15abstractthis paper presents a new design of digital thermometers and hygrometer. it includes a main control device-microcontroller stc12c5a60s2 and a temperature and humidity sensor. this design includes hardware and system software .the hardware design incl

4、udes a main controller circuit, temperature and humidity measurement and control circuits and show circuit. main controller uses scm stc12c5a60s2,temperature sensor uses pt100,and humidity sensor uses sht15,show circuit is a total of eight circuits using digital led of the altogether. driver show ci

5、rcuit uses atches (74573). temperature and humidity control circuit includes the temperature and humidity sensor and preset temperature and humidity values compared alarm circuit. when the actual measurement of temperature or humidity values is greater than the preset temperature or humidity values,

6、 the alarm signal (light emitting diode is lit) is sent. and output circuit will be sent(relay action) .the major software includes the main routines, temperature and humidity routines, show routines and digital-to-analog routines. the humidity sensor (sht15) in this design includes a capacitive pol

7、ymer sensing element for power consumption makes it the ultimate choice for even relative humidity and a band gap temperature sensor. both the most demanding applications are seamlessly coupled to a 14bit analog to digital converter with a 14 and the a / d, as well as serial interface circuits in th

8、e same chip on the realization of a gap link to a super-fast response, anti-interference capability and cost-effective advantages.and pt100 within the required range linearity is very good.the design of digital thermometers and hygrometer with stc12c5a60s2 and pt100 and sht15, not only has a simple

9、external circuit, but also has a high-precision measurement. key words: temperature measurement, humidity measurements, pt100,sht15目目 录录前前 言言1 1一一 设计任务要求和温湿度计的发展史设计任务要求和温湿度计的发展史1 11.11.1 设计任务及要求设计任务及要求.1.11.21.2 设计温湿度计的依据和意义设计温湿度计的依据和意义.1.11.31.3 温度计的发展史温度计的发展史2 21.41.4 湿度计的由来湿度计的由来3 31.51.5 露点意义露点意

10、义.3.3二二 设计任务分析及方案论证设计任务分析及方案论证4 42.12.1 设计总体方案及方案论证设计总体方案及方案论证4 42.22.2 元器件的选择元器件的选择5 52.2.12.2.1 主控制器芯片主控制器芯片5 52.2.22.2.2 温湿度传感器温湿度传感器. .7 72.2.32.2.3 驱动显示电路驱动显示电路. .8 82.32.3 温湿度测量的方法及分析温湿度测量的方法及分析9 9三三 硬件电路的设计硬件电路的设计. .10103.13.1 主控制电路和测温湿控制电路主控制电路和测温湿控制电路.10.103.23.2 驱动显示电路驱动显示电路1212四四 软件设计及分析软

11、件设计及分析. .13134.14.1 sht15sht15 传输时序和指令集传输时序和指令集与测温模块与测温模块.13.1374.1.14.1.1 通讯复位时序通讯复位时序. .13134.1.24.1.2 启动传输时序启动传输时序. .14144.1.34.1.3 数据传输和指令集数据传输和指令集. .14144.1.44.1.4 湿度的测量时序湿度的测量时序. .15154.1.54.1.5 输出转换为物理量输出转换为物理量. .15154.1.64.1.6 sht15sht15 的的 dcdc 特性特性17174.24.2 程序流程图程序流程图19194.34.3 程序的设计程序的设计

12、20204.3.14.3.1 sht15sht15 的初始化程序的初始化程序. .20204.3.24.3.2 毕业设计毕业设计.c.c 是主函数,做了温度的算法是主函数,做了温度的算法. .26264.3.34.3.3 adad 转换子程序转换子程序35354.3.44.3.4 ledled 显示子程序显示子程序. .36364.3.54.3.5 软件在硬件上的调试分析软件在硬件上的调试分析4545结结 论论4646参考文献参考文献4747致致 谢谢4848附附 录录4848引 言温度与湿度与人们的生活息息相关。在工农业生产、气象、环保、国防、科研等部门,经常需要对环境温度与湿度进行测量及控

13、制。准确测量温湿度在生物制药、食品加工、造纸等行业更是至关重要的。传统的温度计是用水银柱来显示的,虽然结构简单、价格便宜,但是它的精确度不高,不易读数。传统湿度计采用干湿球显示法,不仅复杂而且测量精度不高。而采用单片机对温湿度进行测量控制,不仅具有控制方便,简单和灵活等优点,而且可以大幅度提高温度控制的技术指标。用 led 数码管来显示温湿度的数值,看起来更加直观。采用 sht15 作为湿度传感器,可以同时测温,测湿,但是,为了能更广的范围,温度传感器我们采用了 pt100。其实,sht15 这种传感器不易焊接,但是里面有一个 14 位 a/d 以及串行接口电路在同一芯片上,从而具有超快的响应

14、,抗干扰能力强,性价比高等优点。用单片机来控制温湿度可以完成温湿度的制动控制,通过单片机的串口与外部电路相连,把采集到的参数跟以设定的比较,最后由单片机向外部电路指示具体的行动。总之,无论在日常生活,还是工业,农业都离不开周围环境的温湿度的测量,因此,研究温湿度的控制和测量具有非常重要的意义第一章 设计任务要求和温湿度计的发展史1.1 设计任务及要求设计一个以单片机为核心的温湿度测量系统,可实现的功能为:(1)系统可由用户预设温度值和湿度值,测温范围100200, 测湿范围 0 100%且误差小于 5; (2)超出预设值时系统会自动报警,即发光二极管亮,且要求要用继电器启动外电路显示;1.2

15、设计温湿度计的依据和意义温度与湿度与人们的生活息息相关。在工农业生产、气象、环保、国防、科研等部门,经常需要对环境温度与湿度进行测量及控制。准确测量温湿度在生物制药、食品加工、造纸等行业更是至关重要的。传统的温度计是用水银柱来显示的,虽然结构简单、价格便宜,但是它的精确度不高,不易读数。传统的湿度计采用干湿球显示法,不仅复杂而且测量精度不高。而采用单片机对温湿度进行控制,不仅具有控制方便,简单和灵活等优点,而且可以大幅度提高温度控制的技术指标。用 led 来显示温湿度的数字看起来更加直观。采用 sht15 作为湿度传感器,可以同时测温,测湿,但是,为了能更广的范围,温度传感器我们采用了 pt1

16、00。其实,sht15 这种传感器不易焊接,但是里面有一个 14 位 a/d 以及串行接口电路在同一芯片上,从而具有超快的响应,抗干扰能力强,性价比高等优点。用单片机来控制温湿度可以完成温湿度的制动控制,通过单片机的串口与外部电路相连,把采集到的参数跟以设定的比较,最后由单片机向外部电路指示具体的行动。总之,无论在日常生活中还是在工业、农业方面都离不开对周围环境进行温湿度的测量。因此,研究温湿度的控制和测量具有非常重要的意义。1.3 温度计的发展史 温度计是测温仪器的总称。根据所用测温物质的不同和测温范围的不同,有煤油温度计、酒精温度计、水银温度计、气体温度计、电阻温度计、温差电偶温度计、辐射

17、温度计和光测温度计等。 最早的温度计是在 1593 年由意大利科学家伽利略(15641642)发明的。他的第一只温度计是一根一端敞口的玻璃管,另一端带有核桃大的玻璃泡。使用时先给玻璃泡加热,然后把玻璃管插入水中。随着温度的变化,玻璃管中的水面就会上下移动,根据移动的多少就可以判定温度的变化和温度的高低。这种温度计,受外界大气压强等环境因素的影响较大,所以测量误差大。 后来伽利略的学生和其他科学家,在这个基础上反复改进,如把玻璃管倒过来,把液体放在管内,把玻璃管封闭等。比较突出的是法国人布利奥在 1659 年制造的温度计,他把玻璃泡的体积缩小,并把测温物质改为水银,这样的温度计已具备了现在温度计

18、的雏形。以后荷兰人华伦海特在 1709 年利用酒精,在 1714年又利用水银作为测量物质,制造了更精确的温度计。他观察了水的沸腾温度、水和冰混合时的温度、盐水和冰混合时的温度;经过反复实验与核准,最后把一定浓度的盐水凝固时的温度定为 0,把纯水凝固时的温度定为 32,把标准大气压下水沸腾的温度定为 212,用代表华氏温度,这就是华氏温度计。 在华氏温度计出现的同时,法国人列缪尔(16831757)也设计制造了一种温度计。他认为水银的膨胀系数太小,不宜做测温物质。他专心研究用酒精作为测温物质的优点。他反复实践发现,含有 1/5 水的酒精,在水的结冰温度和沸腾温度之间,其体积的膨胀是从 1000

19、个体积单位增大到 1080 个体积单位。因此他把冰点和沸点之间分成 80 份,定为自己温度计的温度分度,这就是列氏温度计。华氏温度计制成后又经过 30 多年,瑞典人摄尔修斯于 1742 年改进了华伦海特温度计的刻度,他把水的沸点定为零度,把水的冰点定为 100 度。后来他的同事施勒默尔把两个温度点的数值又倒过来,就成了现在的百分温度,即摄氏温度,用表示。华氏温度与摄氏温度的关系为: 9/5+32,或59(-32)。现在英、美国家多用华氏温度,德国多用列氏温度,而世界科技界和工农业生产中,以及我国、法国等大多数国家则多用摄氏温度。随着科学技术的发展和现代工业技术的需要,测温技术也不断地改进和提高

20、。由于测温范围越来越广,根据不同的要求,又制造出不同需要的测温仪器。1.4 湿度计的由来湿度计是测量空气内含水分多少的仪器。 史记天官书中即有测湿的记载。我国汉朝初年就已出现湿度计,它是利用天平来测量空气干燥或潮湿的。天平湿度计的使用方法,是把两个重量相等而吸湿性不同的物体,例如灰和铁,分别挂在天平两端。当空气湿度发生变化时,由于两个物体吸入的分水不同,重量也就起了变化,于是天平发生偏差,从而指示出空气潮湿的程度。 这就是湿度计的由来。1.5 露点意义气温愈低,饱和水气压就愈小。所以对于含有一定量水汽的空气,在气压不变的情况下降低温度,使饱和水汽压降至与当时实际的水汽压相等时的温度,称为露点(

21、dew point) 。露点温度是指空气在水汽含量和气压都不改变的条件下,冷却到饱和时的温度。形象地说,就是空气中的水蒸气变为露珠时候的温度叫露点温度。露点温度本是个温度值,可为什么用它来表示湿度呢?这是因为,当空气中水汽已达到饱和时,气温与露点温度相同;当水汽未达到饱和时,气温一定高于露点温度。所以露点与气温的差值可以表示空气中的水汽距离饱和的程度。在 100%的相对湿度时,周围环境的温度就是露点温度。露点温度越小于周围环境的温度,结露的可能性就越小,也就意味着空气越干燥,露点不受温度影响,但受压力影响。 湿球温度的定义是在定压绝热的情况下,空气与水直接接触,达到稳定热湿平衡时的绝热饱和温度

22、。第二章 设计任务分析及方案论证2.1 设计总体方案及方案论证 按照系统设计功能的要求,确定系统由 5 个模块组成:主控制器,温湿度传感器,报警电路,按键电路及显示电路。显示模块模块报警电路按键电路温湿度传感器主控制器图 2-1 总体电路框图主控制器的功能有单片机来完成,主要负责处理由温湿度传感器送来数据,并把处理好的数据送向显示模块。温湿传感器主要用来采集周围环境参数,并把所采集来的参数送向主控制器。按键电路主要用来完成单片机的复位操作和温湿度初始值的设定。这里需要四个按键,一个用来温度设定的累加,一个是用来温度设定的递减,一个用来设定湿度的累加,一个用来设定湿度的递减。报警电路就是用一个发

23、光二极管显示,而且外加一个继电器来驱动外电路,用来判断周围环境的温度或者湿度是否超出设定值了,任何一个超出设定值发光二极管就会被点亮。而且继电器会发出声响,锁存器用来驱动显示电路主要用来驱动 4 位数码管发光的。由于单片机的输出电流太小(只有几 ma)不能驱动继电器,所以这里必须增加一个驱动显示模块。2.2 元器件的选择2.2.1 主控制器芯片stc12c5a60s2/ad/pwm 系列单片机是宏晶科技生产的单时钟/机器周期(1t)的单片机,是高速/低功耗/超强抗干扰的新一代 8051 单片机,指令代码完全兼容传统8051,但速度快 8-12 倍。内部集成 max810 专用复位电路,2 路

24、pwm,8 路高速10 位 a/d 转换(250k/s),针对电机控制,强干扰场合。1. 增强型 8051 cpu,1t,单时钟 / 机器周期,指令代码完全兼容传统 80512. 工作电压:stc12c5a60s2 系列工作电压: 5.5v - 3.3v(5v 单片机)stc12le5a60s2 系列工作电压:3.6v - 2.2v(3v 单片机)3. 工作频率范围:0 - 35mhz,相当于普通 8051 的 0420mhz4. 用户应用程序空间 8k /16k / 20k / 32k / 40k / 48k / 52k / 60k / 62k 字节.5. 片上集成 1280 字节 ram6

25、. 通用 i/o 口(36/40/44 个) , 复位后为: 准双向口/ 弱上拉(普通 8051传统 i/o 口) 可设置成四种模式:准双向口 / 弱上拉,推挽 / 强上拉,仅为输入 / 高阻,开漏 每个 i/o 口驱动能力均可达到 20ma,但整个芯片最大不要超过 55ma7. isp(在系统可编程)/iap(在应用可编程) , 无需专用编程器,无需专用仿真器可通过串口(p3.0/p3.1)直接下载用户程序,数秒即可完成一片8. 有 eeprom 功能(stc12c5a62s2/ad/pwm 无内部 eeprom)9. 看门狗10.内部集成 max810 专用复位电路(外部晶体 12m 以下

26、时,复位脚可直接 1k 电阻到地)11. 外部掉电检测电路: 在 p4.6 口有一个低压门槛比较器 5v 单片机为 1.32v,误差为+/-5%,3.3v 单片机为 1.30v,误差为 +/-3%12.时钟源:外部高精度晶体/ 时钟,内部 r/c 振荡器(温漂为+/-5%到 +/-10%以内)用户在下载用户程序时,可选择是使用内部 r/c 振荡器还是外部晶体/ 时钟常温下内部 r/c 振荡器频率为:5.0v 单片机为:11mhz 15.5mhz 3.3v 单片机为:8mhz 12mhz精度要求不高时,可选择使用内部时钟,但因为有制造误差和温漂,以实际测试为准。13. 共 4 个 16 位定时器

27、 两个与传统 8051 兼容的定时器 / 计数器,16 位定时器 t0 和 t1,没有定时器 2,但有独立波特率发生器做串行通讯的波特率发生器,再加上 2 路 pca模块可再实现 2 个 16 位定时器。14. 2 个时钟输出口,可由 t0 的溢出在 p3.4/t0 输出时钟,可由 t1 的溢出在p3.5/t1 输出时钟。15. 外部中断 i/o 口 7 路,传统的下降沿中断或低电平触发中断,并新增支持上升沿中断的 pca 模块, power down 模式可由外部中断唤醒, int0/p3.2, int1/p3.3, t0/p3.4, t1/p3.5, rxd/p3.0, ccp0/p1.3

28、(也可通过寄存器设置到 p4.2 ), ccp1/p1.4 (也可通过寄存器设置到 p4.3)16. pwm(2 路)/pca(可编程计数器阵列,2 路) - 也可用来当 2 路 d/a 使用 - 也可用来再实现 2 个定时器 -也可用来再实现 2 个外部中断(上升沿中断 / 下降沿中断均可分别或同时支持)17. a/d 转换, 10 位精度 adc,共 8 路,转换速度可达 250k/s(每秒钟 25 万次)18. 通用全双工异步串行口(uart),由于 stc12 系列是高速的 8051,可再用定时器或 pca 软件实现多串口。19. stc12c5a60s2 系列有双串口,后缀有 s2

29、标志的才有双串口,rxd2/p1.2(可通过寄存器设置到 p4.2),txd2/p1.3(可通过寄存器设置到 p4.3)20. 工作温度范围: -40 - +85(工业级) / 0 - 75(商业级)21. 封装:pdip-40,lqfp-44,lqfp-48 i/o 口不够时,可用 2 到 3 根普通 i/o 口线外接 74hc164/165/595(均可级联)来扩展 i/o 口,还可用 a/d 做按键扫描来节省 i/o 口,或用双 cpu,三线通信,还多了串口。2.2.2 温湿度传感器测湿模块选用湿度传感器 sht15。而温度传感器则用 pt100,本来 sht15 也有测温的功能,但是它

30、不能满足设计的要求,且他的线性度没有 pt100 好,因此测温传感器就用 pt100,测湿的传感器用 sht15。下面图说明它的线性度好。shtxx 系列单芯片传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专利的工业 coms 过程微加工技术(cmosens),具有极高的可靠性与卓越的长期稳定性。传感器包括一个电容式聚合体测湿元件和一个能隙式测温元件,并与一个 14 位的 a/d 器以及串行接口电路在同一芯片上实现无缝链接,从而具有超快响应,抗干扰能力强,性价比高等优点。其内部机构图如下图 2-2 所示。图 2-2 sht15 结构图72.2.3 驱动显示电路驱动显示模块选用 2

31、 个 4 位共阴极数码管和 3 个锁存器 74573。由于单片机的端口输出电流太小,这里必须加锁存器来使数码管显示,使显示的效果更好。led 数码管也称半导体数码管,是目前数字电路中最常用的显示器件。它是以发光二极管作段并按共阴极方式或共阳极方式连接后封装而成的。图 2-2 所示是两种 led 数码管的外形与内部结构,、分别表示公共阳极和公共阴极,ag 是 7 个段电极,dp 为小数点。led 数码管型号较多,规格尺寸也各异,显示颜色有红、绿、橙等。led 数码管的主要特点如下:(1)能在低电压、小电流条件下驱动发光,能与 cmos、itl 电路兼容。(2)发光响应时间极短(小于 01s),高

32、频特性好,单色性好,亮度高。 (3)体积小,重量轻,抗冲击性能好。 (4)寿命长,使用寿命在 10 万小时以上,甚至可达 100 万小时。成本低。 因此它被广泛用作数字仪器仪表、数控装置、计算机的数显器件。图 2-3 led 数码管外形和内部结构图锁存器的功能下表显示2.3 温湿度测量的方法及分析 sht15 是一个两线串行接口的数字温湿度传感器,一个接口是时钟线,一个接口是数据线(支持双向传输) 。它是四针单排封装,一个接电源,一个接地线,另两个直接和单片机的 p2_5 和 p2_6 相连。 、单片机通过 p2_5 和 p2_6 向 sht15发送命令,sht15 接收到命令后做出相应的应答

33、。由于 sht15 内部包含一个 14位 a/d 转换器,所以单片机接收到就是数字信号,只需要做相应的处理就能得到所需要的数据。这里减少了很多外部的电路的连接,用起来比较方便。第三章 硬件电路的设计3.1 主控制电路和测温湿控制电路本次硬件设计的核心就是 stc12c5a60s2,其他部件都是围绕它设计的。湿度传感器 sht15 的 data 口和 sck 口分别与 stc12c5a60s2 的 p2_5 口和 p2_6 口相连。测温的 pt100 则在电桥的微弱的变化产生的信号放到运放中放大等处理再接到p1_0。预置数电路就是 4 个按键,进行行列扫描,分别与 stc12c5a60s2 的p

34、1_1,p1_2 p1_3 和 p1_4 口相连。当有按键按下时单片机收到有效的信号,s1 键是用来设置温度的加 1,s2 键是用来设置温度减 1,s3 键用来设置湿度的加0.1%,s4 键是用来设置湿度减 0.1%。报警电路就是把两个发光二极管和stc12c5a60s2 的 p2_3,p2_4 口相连,因为要更好的显示出控制外电路工作,所以要大点的电流驱动外电路,那么在电路中要显示出来,那么要加一个继电器才能显示有足够大的电流。如下图显示同样湿度也一样,只是把 p23 改为 p24.单片机复位有两种:一种是上电复位,一种是按键复位。这次用的就是按键复位,当按键按下时单片机的 rst 口从低电

35、平变为高电平,从而进入复位状态。当按键松开后,vcc 给 10uf 电容充电,从而把 rst 口拉至电平,单片机进入工作状态。stc12c5a60s2 中有一个用于构成内部振荡器的高增益反相放大器,引脚xtal1 和 xtal2 分别是该放大器的输入端和输出端。这个放大器与作为反馈元件的片外石英晶体或陶瓷谐振器构成自激振荡器。外接石英晶体(或陶瓷谐振器)及电容 c1、c2 接在放大器的反馈回路中构成并联振荡电路,对外接电容 c1、c2虽然没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程度及温度稳定性,如果使用石英晶体,我们推荐电容使用 30pf 士

36、 10pf,而如果使用陶瓷谐振器,建议选择 40pf 士 l0pf。这里用到的是 11.0592m 的石英晶体振荡器和两个 30pf 的电容。具体原理图如下图3-1 所示。图 3-1 主控制电路和测温湿电路原理图3.2 驱动显示电路数码管的显示有两种方法:一种是静态显示,一种是动态扫描显示。静态显示就是数码管的段选端一对一与单片机的 i/o 相连,位选端则根据数码管的极型来接地(gnd)或者是高电平(vcc) 。静态显示实现起来比较简单,但是浪费了单片机的 i/o 口资源。动态扫描显示就是几个数码管的段选端可以同时接到单片机的 i/o 口,位选端一对一的接到单片机的其它 i/o 口,当位选信号

37、选中某个数码管时,那个数码管就被点亮,而其它数码管不亮。动态扫描显示节省了单片机的 i/o 资源。采用动态显示方案,设计中使用八个共阴极数码管作为显示载体,通过八路并口传输,共使用了 8 个 i/o 口。显示时采用循环移位法,即八位数码管依次循环点亮,利用人眼睛的视觉暂留效果达到连续显示,主程序每运行一遍便调用一次显示子程序,将数据显示出来。stc12c5a60s2 的 p0 口与 3 个锁存器相连,其中一个锁存器与四个四位数码管的数码管的 a,b,c,d,e,f,g 和 dp,顺序可以根据硬件接线方便而定。而其他两个从锁存器出来的则连到数码管的位选端上,一个数码管有 4 个位选端,4*4=1

38、6 正好连在剩下的锁存器上。具体原理图如下图3-2 所示。图 3-2 显示电路原理图第四章软件设计及分析4.1 sht15 传输时序和指令集与测温模块74.1.1 通讯复位时序串行时钟输入 (sck)用于微处理器与 dth91 之间的通讯同步。由于接口包含了完全静态逻辑,因而不存在最小 sck 频率。串行数据 (data) 三态门用于数据的读取。data 在 sck 时钟下降沿到来之后改变状态,并仅在 sck 时钟上升沿有效。数据传输期间,在 sck 时钟高电平时,data 必须保持稳定。为避免信号冲突,微处理器应驱动 data 在低电平。需要一个外部的上拉电阻(例如:10k)将信号提拉至高电

39、平。如果与 dth91 通讯中断,下列信号时序可以复位串口:当 data 保持高电平时,触发 sck 时钟 9 次或更多。这些时序只复位串口,状态寄存器内容仍然保留。图 4-1 通讯复位时序4.1.2 启动传输时序用一组“启动传输”时序,来表示数据传输的初始化。它包括:当 sck 时钟高电平时 data 翻转为低电平,紧接着 sck 变为低电平,随后是在 sck 时钟高电平时 data 翻转为高电平。在下一次指令前,发送一个“传输启动”时序。启动传输时序如下图 4-2 所示。图 4-2 启动传输时序4.1.3 数据传输和指令集后续命令包含三个地址位(目前只支持“000” ) ,和五个命令位。d

40、th 91 会以下述方式表示已正确地接收到指令:在第 8 个 sck 时钟的下降沿之后,将data 下拉为低电平(ack 位) 。在第 9 个 sck 时钟的下降之后,释放 data(恢复高电平) 。发布一组测量命令(00000101 表示相对湿度 rh, 00000011 表示温度 t)后,控制器要等待测量结束。这个过程需要大约 20/80/320ms ,分别对应 8/12/14bit 测量。确切时间随内部晶振速度的变化而变化,最多可能有-30%的变化。dth91 通过下拉 data 至低电平并进入空闲模式,表示测量的结束。控制器在再次触发 sck 时钟前,必须等待这个“数据备妥”信号来读出

41、数据。检测数据可以先被存储,这样控制器可以继续执行其它任务在需要时再读出数据。接着传输 2 个字节的测量数据和 1 个字节的 crc 奇偶校验。uc 需要通过下拉data 为低电平,以确认每个字节。所有的数据从 msb 开始,右值有效(例如:对于 12bit 数据,从第 5 个 sck 时钟起算作 msb;而对于 8bit 数据,首字节则无意义) 。用 crc 数据的确认位,表明通讯结束。如果不使用 crc-8 校验,控制器可以在测量值 lsb 后,通过保持确认位 ack 高电平,来中止通讯。在测量和通讯结束后,sht15 自动转入休眠模式。sht15 的指令集如下表 4-1 所示。表 4-1

42、 命令集4.1.4 湿度的测量时序图 4-3 测量湿度的时序4.1.5 输出转换为物理量由能隙材料 ptat (正比于绝对温度) 研发的温度传感器具有极好的线性。可用如下公式将数字输出转换为温度值:temperature = d1 +d2 .sotd1 和 d2 的值如下表 4-2 所示。表 4-2 温度转换系数为了补偿湿度传感器的非线性以获取准确数据,建议使用如下公式 1 修正输出数值:rhlinear = c1 + c2 .sorh + c3 .sorh2c1,c2 和 c3 值如下表 4-3 所示。表 4-3 湿度转换系数湿度传感器相对湿度的温度补偿实际测量温度与 25 (77)相差较大

43、时,应考虑湿度传感器的温度修正系数:rhtrue = (tc -25).(t1 + t2 .sorh) + rhlineart1 和 t2 的值如下表 4-4 所示。表 4-4 温度补偿系数rhtrue 就是测量的湿度值。4.1.6 sht15 的 dc 特性。sht15 的 dc 特性如下表 4-5 所示。表 4-5 dht91 的 dc 特性pt100 在桥式电路的变化的信号传到仪用中放大, (大概放大 60 倍左右,一度输出的电压大概为 23 豪伏,因为设计要求中有负的-100 度,即输出电压为-2.3 伏,因为 ad 转换中不能转换 0 伏以下的电压以及大于 5 伏的电压,所以加了一个

44、加法器,又要加一个 1/2 比例电路。 ( 2.3 伏叠加之后输出的范围为 06.9 伏)加了 1/2 比例电路后输出的电压是反向的,所以应该要求再加一个反向电路使输出的电压在 0-5v 之间,再接入 ad 转换之中。具体电路如下。4.2 程序流程图图 4-4 程序流程图因为温度的只有一个 ad 转换,所以就不列流程图了。4.3 程序的设计4.3.1 sht15 的初始化程序#include/#include /microcontroller specific library, e.g. port definitions#include /keil library (is used for _

45、nop()_ operation)#include /keil library#include /keil librarytypedef union unsigned int i;float f; value;enum temp,humi;/bit flag=0;#define uchar unsigned char#define uint unsigned int#define noack 0#define ack 1#define status_reg_w 0 x06 #define status_reg_r 0 x07 #define measure_temp 0 x03 #define

46、 measure_humi 0 x05 #define reset 0 x1e sbit data=p23;sbit sck=p24;/uchar table3;/-void send_byte(uchar x);void send_two(uint y);/*以下为读写 sht15 湿度程序*/char s_write_byte(unsigned char value)unsigned char i,error=0;for (i=0 x80;i0;i/=2) /shift bit for masking if (i & value) data=1; /masking value wi

47、th i , write to sensi-buselse data=0;_nop_(); /observe setup timesck=1; /clk for sensi-bus_nop_();_nop_();_nop_(); /pulswith approx. 5 ussck=0;_nop_(); /observe hold timedata=1; /release data-line_nop_(); /observe setup timesck=1; /clk #9 for ackerror=data; /check ack (data will be pulled down by sh

48、t11)sck=0;return error; /error=1 in case of no acknowledge/-char s_read_byte(unsigned char ack)unsigned char i,val=0;data=1; /release data-linefor (i=0 x80;i0;i/=2) /shift bit for masking sck=1; /clk for sensi-busif (data) val=(val | i); /read bit sck=0;data=!ack; /in case of ack=1 pull down data-li

49、ne_nop_(); /observe setup timesck=1; /clk #9 for ack_nop_();_nop_();_nop_(); /pulswith approx. 5 ussck=0;_nop_(); /observe hold timedata=1; /release data-linereturn val; /返回读命令的值/-void s_transstart(void) /transmission startdata=1; sck=0; /initial state_nop_();sck=1;_nop_();data=0;_nop_();sck=0;_nop_

50、();_nop_();_nop_();sck=1;_nop_();data=1;_nop_();sck=0;/-void s_connectionreset(void)unsigned char i;data=1; sck=0; /initial statefor(i=0;i9;i+) /9 sck cycles sck=1;sck=0; /九个脉冲以重置数据时钟线s_transstart(); char s_measure(unsigned char *p_value, unsigned char *p_checksum, unsigned char mode)unsigned char e

51、rror=0;unsigned int i;s_transstart(); /transmission startswitch(mode) /send command to sensorcase temp : error+=s_write_byte(measure_temp); break;case humi : error+=s_write_byte(measure_humi); break;default : break;for (i=0;i100) rh_true=100; /cut if the value is outside ofif(rh_true0.1) rh_true=0.1

52、; /the physical possible range*p_temperature=t_c; /return temperature *p_humidity=rh_true; /return humidity%rh/-float calc_dewpoint(float h,float t) /计算露点 float k,dew_point ;k = (log10(h)-2)/0.4343 + (17.62*t)/(243.12+t);dew_point = 243.12*k/(17.62-k);return dew_point; /返回露点void init_uart(void)tmod=

53、0 x20; /t1 工作于方式 1th1=0 xfd; /设置波特率为 9600tl1=0 xfd; tr1=1;/允许串行口接收sm0=0; /串口工作方式 1sm1=1; 4.3.2 毕业设计.c 是主函数,做了温度的算法#include /状态寄存器默认温度 14bit,湿度 12bit#include /刚开始要复位寄存器,且转换时 12bit 为80ms#define uint unsigned int /80ms 可不理会,主机处于检测状态#define uchar unsigned charsbit du_choice=p20;sbit we_choice=p21;sbit w

54、e_choice1=p22;/第二个位选信号sbit data=p23;sbit sck=p24;sbit tem_inc=p11;/温度加sbit tem_dec=p12;/温度减sbit hum_inc=p13; /湿度加sbit hum_dec=p14;/湿度减 sbit tem_led=p25;sbit hum_led=p26; extern uchar code table;extern uchar code table1;uchar key=0;/按键全局变量uint idata tem_dault=25,hum_dault=500;/温度、湿度赋初值 温度:25 湿度:50%uc

55、har idata aj_fuhao=0,aj_bai=0,aj_shi=0,aj_ge=0; uchar idata aj_qian_hum=0,aj_bai_hum=0,aj_shi_hum=0,aj_ge_hum=0; / typedef union unsigned int i;float f; value;uint aa2=0;/定时中断 1 中的加数用uchar idata bai=0,shi=0,ge=0,fuhao=0,qian_hum=0,bai_hum=0,shi_hum=0,ge_hum=0;unsigned long get_ad1=0,get_ad3=0;float

56、get_ad2=0;uint get_ad=0;uint humidity_dat=0;void display(uchar fuhao,uchar bai,uchar shi,uchar ge);void display_hum(uchar qian,uchar bai,uchar shi,uchar ge);/void adjust_display(uchar fuhao,uchar bai,uchar shi,uchar ge);void adjust_display( uchar aj_fuhao, uchar aj_bai, uchar aj_shi, uchar aj_ge);vo

57、id aj_display_hum(uchar aj_qian_hum, uchar aj_bai_hum, uchar aj_shi_hum, uchar aj_ge_hum);/void aj_display_hum(uchar qian_hum,uchar bai_hum,uchar shi_hum,uchar ge_hum);/void serial_initial();void init();void send_byte(uchar x);void send_two(uint y);unsigned int get_ad_result(unsigned char channel);v

58、oid delay1ms(uint z); /1ms 延时void delayms(unsigned int n) /延时 10n 毫秒程序 unsigned int i,j; for(i=0;in;i+) for(j=0;j2000;j+); void delay(unsigned int m) /延时程序 unsigned int i,j; for(i=0;im;i+) for(j=0;j10;j+); value humi_val,temp_val; /定义两个共用体变量 enum temp,humi; char s_measure(unsigned char *p_value, uns

59、igned char *p_checksum, unsigned char mode); void calc_sth11(float*p_humidity ,float *p_temperature); void s_connectionreset(void); void s_transstart(void); char s_read_byte(unsigned char ack); char s_write_byte(unsigned char value);void main() float dew_point;unsigned int humi_val2=0;unsigned char

60、error,checksum;unsigned int i;uchar a=0;/init_uart();init();hum_inc=0;hum_dec=0;tem_inc=1;tem_dec=1;s_connectionreset();we_choice1=0; tem_led=0;hum_led=0; while(1) error=0; error+=s_measure(unsigned char*) &humi_val.i,&checksum,humi); /measure humidity error+=s_measure(unsigned char*) &temp_val.i,&checksum,temp); /measure temperature if(error!=0) s_conne

温馨提示

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

评论

0/150

提交评论