温度检测系统设计温度检测系统论文(编辑修改稿)内容摘要:

复位门限电压 ) 引起系统正常复位。 3. 电源以外的干扰引起系统复位 我们可使 89C52的 端向 IMP813L 的 WDI 端输出高和低电平维持时间小于 的短形波 (脉宽可不相等 ) , 故片内看门狗定时器不能溢出 , WDO 保持高电平 , 开关二极管截止。 当干扰信号使得系统程序飞出或进入死循环 : 89C52 的 端不能正 常输出脉宽小于 的矩形波 , 而使得 WDI 端的高或低电平的维持时间超过 , 看门狗定时器溢出 , WDO 端由高变为低电平。 由于 MR 端有一内部 250mA 的上拉电流 ,二极管 导通 , MR 端获得有效低电平 ,RST 端输出复位脉冲 , 单片机复位 , 看门狗定时器清零 , WDO 又恢复为高电平。 三、报警与控制电路设计 控制电路采用现代工业中流行的固态继电器,实现小信号控制大功率输出,弱电信号控制强电器件的功效。 本次设计预留了两个继电器,分别用来接加温设备和通风降温设备。 如果室内的温度低于设定的温度范围内时,系统将发出报警声音,此时绿色指示灯亮起并接通加温设备。 如果室内的温度高于设定的最高温度时,系统同样发出报警声音,绿灯起并断开加温设备同时接通通风降温设备进行降温。 报警电路与控制电路如图 所示。 图 报警与控制电路与单片机的连接 河南工程学院毕业设计 9 四、 LED 显示电路设计 LED 数码管是一种半导体发光器件,其基本单元是发光二极管 , 通过对其不同的管脚输入相对的电流 , 会使其发亮 , 从而显示出数字。 可以显示 : 时间 、 日期 、 温度等可以用数字代替的参数。 数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个 “8” 可分为 1位、 2 位、 4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。 共阳 极 数码管是指将所有发光二极管的阳极接到一起形 成公共阳极 (COM)的数码管。 共阳 极 数码管在应用时应将公共极 COM 接到 +5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。 当某一字段的阴极为高电平时,相应字段就不亮。 动态驱动是将所有数码管的 8 个显示笔划 a,b,c,d,e,f,g,dp的同名端连在一起,另外为每个数码管的公共极 COM增加位选通控制电路,位选通由各自独立的 I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通 COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。 通过分时轮流控制各个数码管的 COM 端,就使各个数码管轮流受控显示,这就是动态驱动。 在本设计中采用了三位七段数码管,用动态 驱动来显示温度的值,如图 所示。 图 显示电路图 河南工程学院毕业设计 10 五、温度检测电路设计 本次设计所采用的温度传感器为 Dallas 半导体公司的数字化温度传感器 DS18B20,它是世界上第一片支持 “ 一线总线 ” 接口的温度传感器。 “ 一线器件 ” 体积更小、适用电压更宽、更经济。 全部传感元件及转换电路集成在形如一只三极管的集成电路内。 DS18B20 可以程序设定 9- 12 位的分辨率,精度为 177。 ℃。 可选更小的封装方式,更宽的电压适用范围。 分辨率设定,及用户设定的报警温度存储在 EEPROM 中,掉电后依然保存。 DS18B20 与 AT89C52 单片机接口电路的设计 DSl8B20 数字温度计提供 9 位 (二进制 )温度读数 , 指示器件的温度信息经过单线接口送入 DSl8B20 或从 DSl8B20 送出,因此从主机 CPU 到 DSl8B20 仅需一条线, DS18B20 与 AT89C52单片机的接口电路如图 所示。 图 DS18B20 与 AT89C52 单片机的连接 DS18B20 支持“一线总线”接口,测量温度范围为 55176。 C+125176。 C,在 10+85176。 C范围内 ,精度为177。 176。 C。 现场 温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。 适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。 河南工程学院毕业设计 11 产品的特点 ( 1)只要求一个端口即可实现通信。 ( 2)在 DS18B20 中的每个器件上都有独一无二的序列号。 ( 3)实际应用中不需要外部任何元器件即可实现测温。 ( 4)测量温度范围在 55176。 C +125176。 C 之间。 ( 5)数字温度计的分辨率用户可以从 9位到 12位选择。 ( 6)内部有温度上、下限设置。 的引脚介绍 TO- 92 封装的 DS18B20 的引脚排列见图, 图 DSI8B20 引脚图 其引脚功能描述见表 1。 表 1 DS18B20 详细引脚功能描述 序号 名称 引脚功能描述 1 GND 地信号 2 DQ 数据输入 /输出引脚。 开漏单总线接口引脚。 当被用着在寄生电源下,也可以向器件提供电源。 3 VDD 可选择的 VDD 引脚。 当工作于寄生电源时,此引脚必须接地。 因为一线通信接口,必须在先完成 ROM 设定,否则记忆和控制功能将无法使用。 主要首先 DS18B20 提供以下功能命令之一: 读 ROM, ROM 匹配,搜索 ROM,跳过 ROM,报警检查。 若指令成功地使 DS18B20 完成温度测量,数据存储在 DS18B20 的存储器。 一个控制功能指挥指示 DS18B20 的演出测温。 测量结果将被放置在 DS18B20 内存中,并可以让阅读发出记忆功能的指挥,阅读内容的片上存储器。 温度报警触发器 TH 和 TL 都有一字节 EEPROM 的数据。 如果 DS18B20 不使用报警检查指令,这些寄存器可作为一般的用户记忆用途。 在片上还载有配置字节以理想的解决温度数字转换。 写 TH,TL 指令以及配置字节利用一个记忆功能的指令完成。 所有的 数据的读、写都是从最低位开始。 河南工程学院毕业设计 12 第四章 软件设计 第一节 主程序方案 首先要根据系统的总体功能和键盘设置选择一种最合适的监控程序结构,然后根据实时性的要求,合理地安排监控软件和各执行模块之间地调度关系。 本部分详细介绍了基于 AT89C52单片机的多路温度采集控制系统的软件设计。 根据系统功能,可以将系统设计分为若干个子程序进行设计,如温度采集子程序,数据处理子程序、显示子程序、执行子程序。 采用 Kiel uVision3集成编译环境和汇编语言来进行系统软件的设计。 本章从设计思路、软件系统框图出发,先介绍整体 的思路后,再逐一分析各模块程序算法的实现,最终编写出满足任务需求的程序。 并对温度进行实时显示。 采用 C语言编写代码 , 鉴于篇幅限制及 DS18B20 的应用已经规范和成熟 , 本文仅就主程序流程图和显示子程序流程图及其代码进行说明。 PWM脉冲波通过定时器 T0 定时来实现 , 在此不再赘述。 主程序流程图 主程序通过调用温度采集子程序完成温度数据采集 , 然后调用温度转换子程序转换读取温度数据 ,调用显示子程序进行温度显示和判断温度数据。 主程序(见附录 2)调用四个子程序,分别是温度采集程序、数码管显示程序、温 度处理程序和数据存储程序。 温度采集程序:对温度芯片送过来的数据进行处理,进行判断和显示。 数码管显示程序:向数码的显示送数,控制系统的显示部分。 温度处理程序:对采集到的温度和设置的上、下限进行比较,做出判断,向继电器输出。 数据存储程序:对键盘的设置的数据进行存储。 系统流程图如图 : 河南工程学院毕业设计 13 图 主程序系统流程图 第二节 各个模块子程序设计 一、温度采集程序 温度采集子程序流程图如下: 河南工程学院毕业设计 14 图 温度采集子程序流程图 其具体程序如下: void delay(unsigned int i)//延时函数 { while(i)。 } //初始化函数 Init_DS18B20(void) { unsigned char x=0。 DQ = 1。 //DQ 复位 delay(8)。 //稍做延时 DQ = 0。 //单片机将 DQ拉低 delay(80)。 //精确延时 大于 480us DQ = 1。 //拉高总线 delay(14)。 x=DQ。 //稍做延时后 如果 x=0 则初始化成功 x=1 则初 始化失败 delay(20)。 } //读一个字节 ReadOneChar(void) 河南工程学院毕业设计 15 { unsigned char i=0。 unsigned char dat = 0。 for (i=8。 i0。 i) { DQ = 0。 // 给脉冲信号 dat=1。 DQ = 1。 // 给脉冲信号 if(DQ) dat|=0x80。 delay(4)。 } return(dat)。 } //写一个字节 WriteOneChar(unsigned char dat) { unsigned char i=0。 for (i=8。 i0。 i) { DQ = 0。 DQ = datamp。 0x01。 delay(5)。 DQ = 1。 dat=1。 } } //读取温度 ReadTemperature(void) { unsigned char a=0。 unsigned char b=0。 unsigned int t=0。 float tt=0。 Init_DS18B20()。 WriteOneChar(0xCC)。 // 跳过读序号列号的操作 WriteOneChar(0x44)。 // 启动温度转换 Init_DS18B20()。 WriteOneChar(0xCC)。 //跳过读序号列号的操作 WriteOneChar(0xBE)。 //读取温度寄存器等(共可读 9 个寄存器) 前两个就是温度 a=ReadOneChar()。 b=。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。