毕业设计(论文)-基于AT89C2051单片机的温度测控器.doc_第1页
毕业设计(论文)-基于AT89C2051单片机的温度测控器.doc_第2页
毕业设计(论文)-基于AT89C2051单片机的温度测控器.doc_第3页
毕业设计(论文)-基于AT89C2051单片机的温度测控器.doc_第4页
毕业设计(论文)-基于AT89C2051单片机的温度测控器.doc_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

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

文档简介

郑州科技学院郑州科技学院 单片机原理及应用课程设 计 2 摘 要.3 引言.3 1. 方案论证.5 1.1 系统功能定义.5 1.2 总体方案.5 2. 系统硬件电路设计.6 2.1 系统硬件框图.6 2.2 测温模块.7 2.2.1 DS18B20 的主要特征有以下几点.7 2.2.2 DS18B20 的工作原理.9 2.3 主控模块.12 2.3.1 主控模块功能分析.12 2.3.2 AT89C2051 芯片的功能特性.12 2.4 显示模块.14 2.5 报警模块.15 2.6 电路原理图的绘制和电路的焊接.17 2.6.1 PROTEL 简介.17 2.6.2 电路的焊接.18 3. 系统软件设计.18 3.1 主控程序设计.18 3.2 温度信息的采集.19 3.3 温度的显示操作.20 4调试与总结.21 致 谢.22 参考文献.24 附 录.24 附录一 电路原理图.24 附录二 实物图.26 附录三 系统主程序.27 3 摘摘 要要: 本次实习中选择了单片机 89C2051 并和 DS18B20 传感器搭建硬件电路,最终实现了基于 89C2051 的单 片机温度控制器的设计。DS18B20 是新型数字温度传感器,采用 它与单片机连接测量温度可简化温度控制器的电路,提高可靠性。 关键词: 89C2051 单片机;DS18B20 温度控制器 引言 计算机的发展日新月异,其技术也突飞猛进,而嵌入式计 算机这种专用计算机在当今科学的发展过程中更是不可或缺的。 嵌入式系统是近年来发展很快的计算机方面的学科方向,并迅 速渗透到控制、自动化、仪器仪表等学科。 嵌入式方向包括了软硬件协同设计、嵌入式体系结构、 实时操作系统、嵌入式产品设计等方面的知识,需要掌握嵌入 式系统设计的典型开发工具,培训学生具备嵌入式系统软、硬 件的开发能力,对于特定行业领域(如移动终端、数字家庭、 信息家电以及对传统产业信息化改造)已经逐步形成了特定的 嵌入式开发方法与手段。 随着现代化信息技术的飞速发展,能独立工作的温度检 测系统已广泛应用与诸多的领域。传统的温度检测大多以热敏 电阻为传感器,但热敏电阻可靠性差、测量温度准确率低,且 必须经过专门的接口电路转换成数字信号后才能进行处理。它 具有微型化、低功耗、高性能、抗干扰能力强等优点,特别适 合于构成温度检测系统,可直接将温度转化成串行数字信号进 行处理。DS18B20 的单片机温度控制器具有电路简单、可靠性 4 高的优点。 本温度控制器对温度进行实时测量并显示,用户可设定最 高限报警温度值和最低限报警温度值,有一定的温度控制功能。 温度是农业生产中常见的工艺参数之一,任何物理变化和 化学反应过程都与温度密切相关,因此温度 控制是工业现代化 的重要任务。对于不同生产情况和工艺要求下的温度控制,所采 用的加热方式、燃料、控制方案也有所不同。单片机又称单片 微控制器,是把一个计算机系统集成到一个芯片上,它的体积小、 质量轻、价格便宜,应用和开发十分便利。本文选用 AT89C2051 芯片做为控制器,并采用 ds18b20 数码管显示及 12M 晶振产生时钟信号,分析了系统硬件各组成之间的通讯协议。 5 1. . 方案论证方案论证 1.1 系统功能定义系统功能定义 根据设计要求,可以先大致勾勒出要完成设计,需要几个 模块具有如下图所示的的功能, 图 1.1 功能模块框图 1.2 总体方案总体方案 通过对系统功能的定义,可以将基于单片机的数字温度计采 用温度传感器 DS18B20 作为测温元件用来满足温度测量,并将温 度信号经由其本身所具有的 A/D 转换功能,转换成数字信号经单 片机处理显示于数码管显示器,从而完成温度的测量和显示。 6 整个系统控制将由 AT89C2051 单片机芯片为核心构成。选 用 DS18B20 作为测温元件,数码管作为显示器件,各个检测信号、 显示信号可由单片机的 I/O 口进行。 设计任务:用单片机设计一个测温范围在55125的数 字温度计。 设计要求:完成该系统的软硬件设计,学习掌握单片机采集 温度的设计方法提高学习新知识、新技能的能力,培养独立设 计的能力 2. 系统硬件电路设计系统硬件电路设计 2.1 系统硬件框图系统硬件框图 根据系统功能要求,可以先大致勾勒出完成任务所需的系统 硬件框图如下: 图 2.1 硬件结构框图 7 主控模块采用性价比较高的单片机芯片,在其内部将预设好 的程序储存,可通过程序的运行控制测温模块进行测温,测温 模块主要是由 DS18B20 构成,将其与所测对象进行接触即可获 取被测对象的温度数据,报警模块只有当温度超出预定值时才 会工作,而所测得的温度将通过显示模块的液晶显示器以数字 形式显示。 2.2 测温模块测温模块 本设计的测温元件采用的是 DS18B20 测温元件,DS18B20 是由 DALLAS(达拉斯)公司生产的一种温度传感器。超小的体积,超 低的硬件开消,抗干扰能力强,精度高,附加功能强,使得 DS18B20 很受欢迎。这是世界上第一片支持“一线总线”接口的 温度传感器。DS18B20 数字温度计提供 9 位(二进制)温度读数, 指示器件的温度。信息经过单线接口送入 DS18B20 或从 DS18B20 送出,因此从单片机到 DS18B20 仅需一条线连接即可。它可在 1 秒钟(典型值)内把温度变换成数字。 2.2.1 DS18B20DS18B20 的主要特征有以下几点的主要特征有以下几点 全数字温度转换及输出; 先进的单总线数据通信; 最高12位分辨率,精度可达土0.5; 12位分辨率时的最大工作周期为750毫秒; 可选择寄生工作方式; 检测温度范围为55+125; 内置EEPROM,限温报警功能; 8 64位光刻ROM,内置产品序列号,方便多机挂接; 多样封装形式,适应不同硬件系统。 图 2.2 DS18B20 管脚排列及封装结构图 图 2.3 DS18B20 实物图 由其引脚可看出,其 3 个引脚: GND 为电压地直接接地; 9 DQ 为单数据总线用来与单片机相连接,本系统中 DQ 与单片机 P3.5 接口连接,仅此一个连接就能保证 DS18B20 与单片机之间的 数据交换;VDD 引脚接电源电压12。 图 2.4 DS18B20 寄生电源工作方式 图 2.5 DS18B20 外接电源工作方式 2.2.22.2.2 DS18B20DS18B20 的工作原理的工作原理 DS18B20 的温度检测与数字数据输出全集成于一个芯片之上, 从而抗干扰力更强。一个工作周期可分为两个部分,即温度检 测和数据处理。18B20 共有三种形态的存储器资源,分别是: ROM 只读存储器,用于存放 DS18B20ID 编码 ,其前 8 位是单 线系列编码(DS18B20 的编码是 19H) ,后面 48 位是芯片唯一 的序列号,最后 8 位是以上 56 的位的 CRC 码(冗余校验) 。数 据在出产时设置不由用户更改。DS18B20 共 64 位 ROM, RAM 数据暂存器,用于内部计算和数据存取,数据在掉电后丢 失,DS18B20 共 9 个字节 RAM,每个字节为 8 位。第 1、2 个 10 字节是温度转换后的数据值信息,第 3、4 个字节是用户 EEPROM(常用于温度报警值储存)的镜像。在上电复位时其 值将被刷新。第 5 个字节则是用户第 3 个 EEPROM 的镜像。第 6、7、8 个字节为计数寄存器,是为了让用户得到更高的温度分 辨率而设计的,同样也是内部温度转换、计算的暂存单元。第 9 个字节为前 8 个字节的 CRC 码。EEPROM 非易失性记忆体, 用于存放长期需要保存的数据,上下限温度报警值和校验数据, DS18B20 共 3 位 EEPROM,并在 RAM 都存在镜像,以方便用 户操作。我们在每一次读温度之前都必须进行复杂的且精准时 序的处理,因为 DS18B20 的硬件简单结果就会导致软件的巨大 开消。 图 2.6 DS18B20 的内部结构框图 低温度系数晶振的振荡频率受温度的影响很小,用于产生固 定频率的脉冲信号送给减法计数器 1 ,为计数器提供一频率稳 定的计数脉冲。高温度系数晶振随温度变化其震荡频率明显改 11 变,很敏感的振荡器,所产生的信号作为减法计数器 2 的脉冲 输入,为计数器 2 提供一个频率随温度变化的计数脉冲。图中 还隐含着计数门,当计数门打开时, DS18B20 就对低温度系 数振荡器产生的时钟脉冲后进行计数,进而完成温度测量。计 数门的开启时间由高温度系数振荡器来决定,每次测量前,首 先将 -55 所对应的基数分别置入减法计数器 1 和温度寄存 器中,减法计数器 1 和温度寄存器被预置在 -55 所对应的 一个基数值。减法计数器 1 对低温度系数晶振产生的脉冲信号 进行减法计数,当减法计数器 1 的预置值减到 0 时温度寄存 器的值将加 1 ,减法计数器 1 的预置将重新被装入,减法计 数器 1 重新开始对低温度系数晶振产生的脉冲信号进行计数, 如此循环直到减法计数器 2 计数到 0 时,停止温度寄存器值 的累加,此时温度寄存器中的数值即为所测温度。斜率累加器 用于补偿和修正测温过程中的非线性,其输出用于修正减法计 数器的预置值,只要计数门仍未关闭就重复上述过程,直至温 度寄存器值达到被测温度值。 12 图 2.7 DS18B20 的内部测温电路框图 2.3 主控模块主控模块 2.3.12.3.1 主控模块功能分析主控模块功能分析 在本系统中,主控模块居于非常重要的地位。它是整个系统 的中枢,系统运行所需的每个操作指令都要由其发出。它一方 面控制着测温模块进行温度信息的采集,另一方面也控制着显 示模块的工作。最重要的是,由测温模块所采集到的温度信息 必须经由主控模块的处理才能在显示模块上显示,从而使整个 系统进行正常的运转和工作。针对以上分析本系统主控模块中 的单片机芯片采用了 AT89C2051 芯片,此芯片功能强大,能够 完全满足系统运行的需求。 2.3.22.3.2 AT89C2051AT89C2051 芯片的功能特性芯片的功能特性 AT89C2051 是美国 Atmel 公司生产的低电压、高性能 CMOS 8 位单片机6-7,片内含有 2 KB 的反复擦写的只读程序存储器 和 128 B 的随机存取数据存储器(RAM)。美国 DALLAS 半导体 公司生产的 DS18B20 型单线智能温度传感器,属于新一代适配 13 微处理器的智能传感器。数字温度计是以 DS18B20 为检测元 件, 由 AT89C2051 作为主控制器的温度计,具有功耗低、结构简 单、读数方便、测温范围广、测温准确的特点。 AT89C2051 是 MCS-51 产品的兼容型,它具有 2k 的 FLASH ROM、128 字 ROM,15 根 I/O 引线、两个 16 位定时/计数器、 一个五向量两级中断结构、一个全双工串行口、一个精密模拟 比较器以及片内振荡电路和时钟电路。它的 P1 口和 P3 口是双 向 I/O 口,其中 P1.2P1.7、P3.0P3.5 和 P3.7 带有内部上拉电 阻。在 AT89C2051 用作输入端时,将首先向引脚写“1”而使内 部 MOS 管截止以便引脚处于悬浮状态,从而可获得高阻抗输入。 其主要性能如下: 与MCS-51单片机产品兼容 2K字节在系统可编程Flash存储器 1000次擦写周期 全静态操作:0Hz24Hz 两级加密程序存储器 15个可编程I/O口线 两个16位定时器/计数器 六个中断源 可编串行UART通道 1288位内部RAM 直接LED驱动输出 低功耗空载和掉电方式 14 片内模拟比较器 2.7V6V的操作范围 图2.8 AT89C2051的引脚结构 2.4 显示模块显示模块 本系统最突出的特点就是能方便直观地对所测温度进行读取, 因此显示模块的选取极为重要,由三位共阳数码管(温度值显 示)作为显示模块。采用动态扫描的方法,其中 P3.0,P3.1,P3.2,P3.3 控制位选,P1 控制段选。由 P3.0,P3.1,P3.2,P3.3 向各位轮流输出扫描信号,使每一瞬间只 有一个数码管被选通,然后由 P1 送入该位所要显示的字形码,点 亮该位字形段显示的字形。在 P1 送出的码段和 P3.0,P3.1,P3.2,P3.3 送出的位段的配合控制下,使各个数码管 轮流点亮显示各自的字形。 注:下为三位共阳数码管图,显示摄氏度符号的一位共阳数 15 码管倒置焊接即可。 图2.9 三位共阳数码管图 图2.10 七段数码管引脚图 2.5 报警模块报警模块 16 本系统采用 3 mm 的发光二极管作为报警装置,发光二极管简 称为 LED。由镓(Ga)与砷(AS) 、磷(P)的化合物制成的二 极管,当电子与空穴复合时能辐射出可见光,因而可以用来制 成发光二极管。在电路及仪器中作为指示灯,或者组成文字或 数字显示。磷砷化镓二极管发红光,磷化镓二极管发绿光,碳 化硅二极管发黄光。 发光二极管的核心部分是由 P 型半导体和 N 型半导体组成 的晶片,在 P 型半导体和 N 型半导体之间有一个过渡层,称 为 PN 结。在某些半导体材料的 PN 结中,注入的少数 载流 子与多数载流子复合时会把多余的能量以光的形式释放出来, 从而把电能直接转换为光能。 PN 结加反向电压,少数载流 子难以注入,故不发光。这种利用 注入式电致发光 原理制作 的二极管 叫发光二极管,通称 LED 。 当它处于正向 工作 状态时(即两端加上正向电压),电流从 LED 阳极流向阴极 时,半导体晶体就发出从紫外到红外不同颜色的光线,光的 强弱与电流有关。 17 图 2.11 发光二极管的构造图 选用发光二极管的好处: 1.效能: 消耗能量较同光效的白炽灯减少 80% 2.适用性: 体积很小,每个单元 LED 小片是 3-5mm 的正方形, 所以可以制备成各种形状的器件,并且适合于易变的环境 3.稳定性: 10 万小时,光衰为初始的 50% 4.响应时间: 其白炽灯的响应时间为毫秒级,LED 灯的响应 时间为纳秒级对环境污染 无有害金属汞 2.6 电路原理图的绘制和电路的焊接电路原理图的绘制和电路的焊接 在硬件的设计前期,根据框图对电路中可能出现的电路,进 行了模拟实验,并根据实验结果对后期的硬件设计进行了合理 化的修改完善。在第一章中已分析了系统并绘制了框图,并根 据框图分别设计了各部分电路。由于温度传感器 DS18B20 集成 18 度较高,所以在硬件电路设计时不需要太多其他元件即可实现预 期功能。因此在 PROTEL 上对原理图进行了绘制,从而得出了最 终的完整电路原理图附录一。 2.6.12.6.1 PROTELPROTEL 简介简介 PROTEL 是 PORTEL 公司在 80 年代末推出的 EDA 软件,在 电子行业的 CAD 软件中,它当之无愧地排在众多 EDA 软件的 前面,是电子设计者的首选软件,它包含了电原理图绘制、 模拟电路与数字电路混合信号仿真、多层印制电路板设计 (包含印制电路板自动布线)、可编程逻辑器件设计、图表生 成、电子表格生成、支持宏操作等功能,并具有 Client/Server (客户/服务器)体系结构,同时还兼容一些 其它设计软件的文件格式,如 ORCAD,PSPICE,EXCEL 等, 其多层印制线路板的自动布线可实现高密度PCB 的 100布 通率。Protel 99SE 采用数据库的管理方式。该软件沿袭了 Protel 以前版本方便易学的特点,内部界面与 Protel 99 大体 相同,新增加了一些功能模块,功能更加强大。新增的层堆栈 管理功能,可以设计 32 个信号层,16 个地电层,16 个机械层。 新增的 3D 功能在加工印制版之前可以看到板的三维效果。其具 有的打印功能,可以轻松修改打印设置控制打印结果。Protel 99SE 容易使用的特性还体现在其帮助功能,按下右上角的小问 号,然后输入你所要的信息,可以很快地看到特性的功能,然 后用到设计中,按下状态栏末端的按钮,使用帮助顾问。 2.6.22.6.2 电路的焊接电路的焊接 当通过 PROTEL 绘制出完整的电路原理图后,就可以按照绘制 好的原理图进行电路的焊接,焊接时要注意虚焊和短路情况出 19 现。焊接是要先焊单片机的主电路,以便于对各部分电路的测 试。当焊完一部分子电路后,要先输入子程序进行检测,看是 否有输入或输出。焊完后,就可以进行电路总体性能测试了。 在测试之前,一定要先对电路检测,看是否有短路情况出现, 以免芯片损坏。电源输入电压也是关键因素,在供电之前先量 量。 3. 系统软件设计系统软件设计 3.1 主控程序设计主控程序设计 通过对系统工作原理的了解,我们可以大致知道系统软件运 行工作的流程图如下: 图 3.1 系统运行流程图 当接通电源开始工作后,单片机中的程序开始运行,将对 DS18B20 进行初始化,以便单片机芯片和 DS18B20 达成通信协 议。完成初始化后,由于本系统只有一个测温元件,单片机会 20 向其发出跳过 ROM 指令,接下来便可向其发送操作指令,设定 温度上下限,启动测温程序。测温过程完成后,发出温度转换 指令,从而便可将温度转化成数字模式进行显示读取。 3.2 温度信息的采集温度信息的采集 通过DS18B20单线总线的所有执行处理都从一个初始化序列开 始。初始化序列包括一个由总线控制器发出的复位脉冲和随后 由从机发出的存在脉冲: 1、复位:首先我们必须对DS18B20芯片进行复位,复位就是 由控制器(单片机)给DS18B20单总线至少480uS的低电平信号。 当18B20接到此复位信号后则会在1560uS后回发一个芯片的存 在脉冲。 2、存在脉冲:在复位电平结束之后,控制器应该将数据单总 线拉高,以便于在1560uS后接收存在脉冲,存在脉冲为一个 60240uS的低电平信号。至此,通信双方已经达成了基本的协 议,接下来将会是控制器与18B20间的数据通信。 3、控制器发送ROM指令:双方打完了招呼之后最要将进行交 流了,ROM指令共有5条,每一个工作周期只能发一条,ROM指令 分别是读ROM数据、指定匹配芯片、跳跃ROM、芯片搜索、报警 芯片搜索。 4、控制器发送存储器操作指令:在ROM指令发送给18B20之后, 紧接着(不间断)就是发送存储器操作指令了。操作指令同样 为8位,共6条,存储器操作指令分别是写RAM数据、读RAM数据、 将RAM数据复制到EEPROM、温度转换、将EEPROM中的报警值复制 到RAM、工作方式切换。 21 5、执行或数据读写:一个存储器操作指令结束后则将进行指 令执行或数据的读写,这个操作要视存储器操作指令而定。 3.3 温度的显示操作温度的显示操作 如电路正常,接通电源后,只显示“C”符号,无温度值; 按下 AN3,先显示上次存贮下来的设定温度(报警控制)值, 然后再显示环境温度值,并随环境温度的变化而变化; 再按一下 AN3,温度数字闪烁,待调节; 接着按 AN1 或 AN2: 按 AN1 为报警温度值变大,最大为 125C;按 AN2 为报警温度值变小 ,最小为-55C; 调好后再按一下 AN3,调好的报警温度值被存贮,数码管又显 示环境温度。当温度达到存贮的报警值时,电路发出报警信号 和动作。 4调试与总结调试与总结 在硬件电路焊接和软件程序设计分别完成的基础之上,进行 软硬件的结合与调试。通过下载将在电脑上已完成的程序下载 到单片机芯片中。在调试中发现软件中存在的问题,及时解决 问题,确保系统能正常工作并达到设计要求。通过反复的调试 与实验,可以证明该系统能够较好地完成设计所需的基本要求。 即能够方便准确的对被测对象进行温度测量。同时在完成设计 要求的前提下,充分考虑到了外观,成本等问题,在性能和价 格之间作了比较好的平衡。虽然整体性能良好,但尚存在些许 不足,系统稳定性不够,需要增强自己的焊接水平以便以后避 免出现类似问题。 22 本温度采集系统实用性强,结构较为简单,成本低,外接 元件少。在实际应用中工作性能稳定,测量温度准确,精度较 高。系统在硬件设计上充分考虑到了可扩展性,经过一定的添 加或改造,很容易增加功能。本系统适用范围广泛,可以单独 使用作为监控仪,应用于农业温室大棚监测植物生长的环境变 化,工业厂房测量各部分的工作温度等等。也可以作为智能控 制系统的一部分,与其它设备协同工作。系统移植性强,只需 改变前端测量用的传感器类型,可在此基础上修改为其 他非电 量参数的测量系统。 致致 谢谢 通过此次毕业设计,我学到了很多知识。在实物的设计和论文 的写作过程中,通过查资料和搜集有关的文献,培养了自学能力。 通过对硬件电路的设计和焊接,增强了自己的动手能力。并且 由原来的被动接受知识转换为主动的寻求知识,学会了更好地 让所学知识与实践相结合,让书本上的知识与实际生活中的具 体应用相结合。让自己切实感觉到了学有所用。并在此期间巩 固复习了在大学 4 年内学过的知识,尤其是单片机和模电,数 电方面的知识。同时通过这次毕业设计提高了自己的单片机编 23 程的能力,尤其是获得的软件调试经验,同时也让自己知道了 自己不足和缺陷,从而为自己能更好的改进提供了帮助。 在此,首先感谢我的老师,感谢各位老师这四年中在学习中、 生活上的关心和照顾;其次感谢各位同学,同学们在生活中给 予很大的帮助,在学习上也给极大的鼓舞。指导老师项仕标教 授和葛明涛讲师治学严谨,学识渊博,平易近人,在我做设计 和论文期间对我的教诲和指导将使我终生受益。无论是在平时 的阶段,还是在论文的选题、资料查询、开题、研究、设计和 撰写的每一个环节,都得到导师的悉心指导和帮助。借此机会 向项仕标教授和葛明涛讲师表示衷心的感谢!在毕业设计的这 段时间里,其他老师们也都言传身教,以他们广博的知识,敏 锐的洞察力,多年的教学和实际工作经验,在毕业设计上给予 我很大的帮助。在本次设计中我学到的不仅是科学知识和工作 方法,更学到了作为一个研究人员应有的治学态度以及为人处 世的道理,这一切都将使我终身受益。谨在此向各位老师致以 崇高的敬意和衷心的感谢! 感谢几年来传授我知识的老师们,更要感谢我的家人对我学 业上的支持和鼓励,感谢所有关心帮助过我的人。 24 参考文献参考文献 1 谭浩强 C 程序设计 清华大学出版社 1999.12 2 李群芳 肖看 单片机原理,接口及应用 清华大学出版社 2005.3 3 张义和 王敏男 例说 51 单片机 人民邮电出版社 2008.4 4 蔡美琴 张为民 MCS-51 系列单片机系统及其应用 高等教育出版 社 1992 5 高峰 单片微机应用系统设计及实用技术 机械工程出版社 2004 6 杨全胜 现代微机原理与接口技术 电子工业出版社 2004 7 全国大学生电子设计竞赛组委会 全国大学生电子设计竞赛获 奖 25 作品精选 (19941999) 北京理工大学出版社 2003. 8 谢淑如 郑光钦 杨渝生 Protel PCB 99SE 电路版设计 清华大学 出版社 9 何立民 单片机应用技术选编 北京航空航天大学出版社, 1993.2 10 段九洲 放大电路实用设计手册 辽宁科学技术出版社,2002.5 11 李炎清 毕业论文写作与范例 厦门大学出版社 2006.10 附附 录录 附录一附录一 电路原理图电路原理图 26 27 附录二附录二 实物图实物图 28 附录三附录三 系统主程序系统主程序 /*- 温度控制器 V1.5 显示为三个共阳极 LED 温度传感器用单总线 DS18B20 CPU 为 2051,三个按键,分别为 UP,DOWN,SET 温度调节上限为 125 度,下限为-55 度 只能用于单只 18B20 -*/ #include #include #define Key_UP P3_0 /上调温度 #define Key_DOWN P3_1 /下调温度 #define Key_SET P1_7 /设定键(温度设定, 长按开电源) #define RelayOutPort P3_5 /继电器输出 #define LEDPort P1 /LED控制口 #define LEDOneC P3_2 /LED DS1控制(百位) #define LEDTwoC P3_3 /LED DS2控制(十位) 29 #define LEDThreeC P3_4 /LED DS3控制(个位) #define TMPortP3_7/DS1820 DataPort unsigned char code LEDDis=0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x82,0 xF8,0 x80, 0 x90,0 xFF,0 xBF; /0-9的LED笔划,0 xFF为空,0 xF7为负号 static unsigned char bdata StateREG;/可位寻址的状态 寄存器 sbit DS1820ON = StateREG0; /DS1820是否存在 sbit SetTF = StateREG1; /是否是在温度设 置状态 sbit KeySETDown = StateREG2; /是否已按过SET键 标识 sbit PowTF = StateREG3; /电源电源标识 sbit KeyTF = StateREG4;/键盘是否 允许 /sbit KeySETDowning = StateREG5;/SET是否正在 按下 static unsigned char bdata TLV _at_ 0 x0029; / 30 温度变量高低位 static unsigned char bdata THV _at_ 0 x0028; static signed char TMV; /转换后的温度值 static unsigned char KeyV,TempKeyV; /键值 static signed char TMRomV _at_ 0 x0027; /高温限制 static signed char TMSetV _at_ 0 x0026; /温度设定值 static unsigned char KSDNum; /SET键连按时的采集次数 static unsigned char IntNum,IntNum2,IntNum3; /中断 发生次数,IntNum用于SET长按检测,IntNum2用于设定状态时 LED闪烁 static signed char LED_One,LED_Two,LED_Three; /LED的 显示位 LED_One为十位,LED_Two为个位 static unsigned char Sign; /负号标识 void main(void) void InitDS1820(void); /定义函数 31 void ROMDS1820(void); void TMVDS1820(void); void TMRDS1820(void); void TMWDS1820(void); void TMREDS1820(void); void TMERDS1820(void); void ReadDS1820(void); void WriteDS1820(void); void Delay_510(void); void Delay_110(void); void Delay_10ms(void); void Delay_4s(void); void V2ToV(void); StateREG = 0; /初始化变量 SetTF = 1; 32 PowTF = 1;/关电源 THV = 0; TLV = 0; TMV = 0; KeyV = 0; TempKeyV = 0; KSDNum = 0; IntNum = 0; IntNum2 = 0; IntNum3 = 0; LED_One = 0; LED_Two= 0; InitDS1820(); /初始化 ROMDS1820(); /跳过ROM TMERDS1820(); /E2PRAM中温度上限值调入RAM 33 InitDS1820(); /初始化 ROMDS1820(); /跳过ROM TMRDS1820(); /读出温度指令 ReadDS1820(); /读出温度值和上限值 TMSetV = TMRomV; /拷贝保存在DS18B20ROM里的上限值到 TMSetV EA = 1;/允许CPU中断 ET0 = 1; /定时器0中断打开 TMOD = 0 x1;/设定时器0为模式1,16位模式 TH0=0 xB1; TL0=0 xDF;/设定时值为20000us(20ms) TR0 = 1;/开始定时 while(1); 34 /定时器0中断外理中键扫描和显示 void KeyAndDis_Time0(void) interrupt 1 using 2 TH0=0 xB1; TL0=0 xDF;/设定时值为20000us(20ms) LEDPort = 0 xFF; if (!Key_UP) KeyV = 1; if (!Key_DOWN) KeyV = 2; if (!Key_SET) KeyV = 3; /KeySETDowning = 0; /清除 if (KeyV != 0) /有键按下 35 Delay_10ms(); /延时防抖 按下10ms再测 if (!Key_UP) TempKeyV = 1; if (!Key_DOWN) TempKeyV = 2; if (!Key_SET) TempKeyV = 3; if (KeyV = TempKeyV) /两次值相等为确定接下了 键 if (KeyV = 3) /按下SET键,如在SET状态 就退出,否则进入 /KeySETDowning = 1; /表明SET 正在按下 PowTF = 0; /电源标识开 if (!KeyTF) 36 if (SetTF) SetTF = 0; /标识位标识退出设定 InitDS1820(); /初始 化 ROMDS1820(); /跳过ROM TMWDS1820(); /写温度上 限指令 WriteDS1820(); / 写温度上限到DS18B20ROM WriteDS1820(); / 写温度上限到DS18B20ROM WriteDS1820(); / 写温度上限到DS18B20ROM InitDS1820(); /初始 化 ROMDS1820(); /跳过ROM TMREDS1820(); /温度 37 上限值COPY回E2PRAM else SetTF = 1; if (!KeySETDown) /没有第一次按下SET时, KeySETDown标识置1 KeySETDown = 1; else KSDNum = KSDNum + 1; /前一秒内有按过 SET则开始计数 if (SetTF) /在SET状态下 if (KeyV = 1) /上调温度 if (KeyV = 2) /下调温度 if (TMSetV = 125) TMSetV = 125; if (!KeyTF) /当 键盘处于可用时,锁定 if (KeySETDown) /在2秒内按下了SET则计中 断发生次数用于长按SET时计时用 IntNum = IntNum + 1; if (IntNum 55) /中断发生了55次时(大约1.2 秒)75为1.5秒左右 39 IntNum = 0; KeySETDown = 0; if (KSDNum = 55) /如一直长按了SET1.2秒 左右 RelayOutPort = 1; /关闭继电器输出 PowTF = 1; /电源标识关 LEDOneC = 0; LEDTwoC = 0; LEDThreeC = 0; LEDPort = 0 xBF; /显示- Delay_4s(); /延时 LEDOneC = 1; LEDTwoC = 1; /关显示 LEDThreeC = 1; Delay_4s(); 40 IntNum = 0; IntNum2 = 0; IntNum3 = 0; KSDNum = 0; KeyV = 0; TempKeyV = 0; /清空变量准备下次键扫描 if (!PowTF) InitDS1820();/初始化 ROMDS1820(); /跳过ROM TMVDS1820(); /温度转换指令 41 Delay_510(); Delay_510(); /延时等待转换完成 InitDS1820(); /初始化 ROMDS1820(); /跳过ROM TMRDS1820(); /读出温度指令 ReadDS1820(); /读出温度值 V2ToV(); /转换显示值 if (TMV TMSetV) /根据采集到的温度值控制继电 器 RelayOutPort = 0; else 42 RelayOutPort = 1; if (SetTF) IntNum2 = IntNum2 + 1; /用于闪烁计数 if (IntNum2 50 ) IntNum2 = 0; if (KeyTF) IntNum3 = IntNum3 + 1; /用于防止 按键连按 if (IntNum3 25) IntNum3 = 0; KeyTF = 0; if (SetTF) THV = THV 7; /取符号 else Sign = TMV 7; if (Sign) if (SetTF | !Key_SET) LED_One = (TMSetV-1) / 100; /SET状态下显示设定值 45 LED_Two = (TMSetV-1) - LED_One * 100)/10; LED_Three = (TMSetV-1) - LED_One * 100 - LED_Two * 10; else LED_One = (TMV) / 100; /转换百位值 LED_Two = (TMV) - LED_One * 100)/10; LED_Three = (TMV) - LED_One * 100 - LED_Two * 10; else if (SetTF | !Key_SET) 46 LED_One = (TMSetV) / 100; /SET 状态下显示设定值 LED_Two = (TMSetV - LED_One * 100)/10; LED_Three = TMSetV - LED_One * 100 - LED_Two * 10; else LED_One = (TMV) / 100; /转换百位值 LED_Two = (TMV - LED_One * 100)/10; LED_Three = TMV - LED_One * 100 - LED_Two * 10; 47 /转LED字段 if (LED_One) /超过百时十位的处理 LED_Two = LEDDisLED_Two; else if (LED_Two = 0) LED_Two = LEDDis10; else LED_Two = LEDDisLED_Two; if (Sign) LED_One = LEDDis11; else if (LED_One = 0) LED_One = LEDDis10; 48 else LED_One = LEDDisLED_One; LED_Three = LEDDisLED_Three; void InitDS1820(void)/初始化DS1820 TMPort = 1;/拉高TMPort _nop_(); /保持一个周期 TMPort = 0;/拉低TMPort Delay_510(); /延时 DS1820复位时间要500us的低电平 TMPort = 1; /拉高TMPort _nop_(); /保持 _nop_(); _nop_(); 49 Delay_110(); /延时110us 等待DS1820回应 if (!TMPort) /回应信号

温馨提示

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

评论

0/150

提交评论