基于单片机最小系统的温度控制系统.doc_第1页
基于单片机最小系统的温度控制系统.doc_第2页
基于单片机最小系统的温度控制系统.doc_第3页
基于单片机最小系统的温度控制系统.doc_第4页
基于单片机最小系统的温度控制系统.doc_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

设 计 报 告 基于 51 单片机的温度控制系统及应用 学 校 湘南学院 专 业 电气工程及其自动化 姓 名 张云燕 曾琳琳 许治豹 马立强 指导教师 曾晓华 日 期 2013 年 5 月 9 日 摘要摘要 在现代工业的生产生活中 温度是常用的测量机被控参数 随着微机测量和控制技 术的迅速发展与广泛应用 以单片机为核心的温度采集与控制系统的研发与应用在很大程 度上提高了生产生活中对温度的控制水平 本水温控制系统采用美国 ATMEL 公司生产的 AT89S51 单片机为核心控制器件 实现水温 30 度到 100 度的自动控制 以 DS18B20 为温度 传感器的温度控制系统 光电耦合器 MOC3041 和双向可控硅构成主控制电路 该系统可以 实时存储相关的温度数据并记录显示温度 硬件控制电路主要包括 AT89S51 单片机最小系 统 测温点路 时钟电路 8 段数码晶体管显示电路 系统程序主要包括主程序 读出温 度子程序 计算温度子程序 按键处理程序 8 段数码晶体管显示程序以及数据存储程序 等等 关键词关键词 AT89C52 单片机 DS18B20 温度传感器 BTA16 600B 双向晶闸管 8 段数码晶体 管显示电路 水温自动控制 Abstract in modern industrial production and life temperature is a common measuring machine was accused of parameters With the rapid development of microcomputer measurement and control technology and widely used with the single chip processor as the core temperature gathering and control system of research and application to a large extent improve the production control of the temperature level in the life The water temperature control system adopts the ATMEL company produces the AT89S51 as the core control device to achieve the automatic control water temperature 30 degrees to 100 degrees the temperature control system based on DS18B20 temperature sensor photoelectric coupler MOC3041 and bidirectional thyristor constitute the main control circuit The system can real time temperature data storage and record according to temperature Hardware control circuit mainly includes the AT89S51 minimum system temperature measuring points the clock circuit section 8 of digital transistor display circuit System program mainly includes the main program read temperature subroutine calculating temperature subroutine button handler section 8 of digital transistor display program and data storage and so on Key words single chip microcomputer AT89C52 DS18B20 temperature sensor two way thyristor BTA16 600 b 8 period of digital display circuit transistor water temperature automatic control 一 引言 1 在现代的各种工业生产中 很多地方都需要用到温度控制系统 而智能化的控制系统是 一种发展的趋势 本文所阐述的基于 AT89S51 单片机的温度控制系统 本温度控制系统适 用于温度 55 度到 125 度之间 传感器的测温范围 可以调整不同液体的温度自动控制范 围为其常温到沸点之间 可以根据需求通过搭配不同配件实现不同的功能 既可以实现只 加热和只制冷 或者即可以加热又可以制冷 广泛应用于生产生活中等 且该控制系统可 移植性好 成本低 电路简单 方便使用 2 应用领域 家电 生产 化工 人工智能 食品加工 电力系统 3 设计要求 1 利用数字温度传感器检测温度 要求线路尽可能简单 2 无竞争冒险 无抖动 3 实时显示温度和实时可调 4 温度可调 5 可移植性好 通用性强 性价比高 4 技术指标 温度显示误差不超过 1 度 5 优点 结构简单 低成本 实用性强 可移植性好 可方便的用于家电生产生活化工食 品加工等等 具体应用 1 温度可调且保温的热得快 可与目前市面上的电热得快兼容 2 简易热水器 控制模块可用于目前电热水器的控制模块的维修与替换 3 电冰箱 主电路接压缩机实现制冷 5 冷冻 6 化工产品的恒温水浴加热 30 度到 110 度 之间 7 蒸馏分离沸点在 30 度 110 度之间的多种液体 如分离酒精和水 用于作坊 式谷物酒精生产等 8 电气设备和工作平台的散热 主电路接风扇 9 通过修改程序和增加一个输出引脚可以同时实现加热和制冷 如用于饮水机的加热和 制冷 成本较目前市场上的饮水机的控制电路的制造成本要低且结构简单 易于维护功能 更强大 二 系统总体方案设计二 系统总体方案设计 1 工作原理 以单片机为核心 通过温度传感器 DS18B20 对当前温度的检测送到单片机进 行处理与系统设定温度的比较控制主电路双向晶闸管的导通与关断 同时送显示电路显示 当前温度 通过按键输入电路复位控制电路和设定要达到的温度并且送显示电路显示 电 源电路提供控制电路所需要的工作电压 图 1 系统方框图 2 2 硬件选型 硬件选型 2 12 1 单片机单片机 AT89c52 和 AT89S51 无引脚和功能的区别 方便起见 后文中用 AT89S51 代替 AT89c52 图 2 单片机的引脚图 2 2 2 2 温度传感器温度传感器 1 DS18B20 的性能特点 1 单线结构 只需一根信号线和 CPU 相连 2 不需要外部元件 直接输出串行数据 3 可不需要外部电源 直接通过信号线供电 电源电压范围为 3 3V 5V 4 测温精度高 测温范围为 一 55 125 在 10 85 范围内 精度为 O 5 5 测温分辨率高 当选用 12 位转换位数时 温度分辨率可达 0 0625 6 数字量的转换精度及转换时间可通过简单的编程来控制 9 位精度的转换时间为 93 75 ms 10 位精度的转换时间 187 5ms 12 位精度的转换时间 750ms 7 具有非易失性上 下限报警设定的功能 用户可方便地通过编程修改上 下限的数 值 8 可通过报警搜索命令识别哪片 DS18820 采集的温度超越上 下限 2 DS18B20 引脚图和简介 1 各脚功能描述如下 DQ 数字信号输入 输出端 GND 电源地端 VDD 外接供电电源输入端 在寄生电源接线时此脚应接地 2 DS18820 中的温度传感器完成对温度的测量 输出格式为 16 位符号扩展的二进制 补码 当测温精度设置为 12 位时 分辨率为 O 0625 即 O 0625 LSB 其二进制补 码格式 表 1 其中 S 为符号位 S 1 表示温度 为负值 S 0 表示温度为正值 例如 125 的数字 输出为 07D0H 55 的数字输出为 FC90H 一些温度值对应的数字输出如图 7 所示 DS18820 中的低温触发器 TL 高温触发器 TH 用于设置低温 高温的报警数值 DS18820 完成一个周期的温度测量后 将测得的温度值和 TL TH 相比较 如果小于 TL 或 大于 TH 则表示温度越限 将该器件内的告警标志位置位 并对主机发出的告警搜索命令 作出响应 需要修改上 下限温度值时 只需使用一个功能命令即可对 TL TH 写入 十分 方便 2 32 3 双向晶闸管双向晶闸管 功能特性功能特性 高之突波电流能力变换 dV dt c 10 V ms 双向可控硅家庭 类别 离散半导体产品 Triac 类型 标准 配置 单 电压 关闭状态 600 V 目前国家 最高 16 触发电压 门 Vgt 从根本上 最高 1 3 V 当前 门触发耐量减低 Igt 最高 50个地图 目前持有 Ih 最高 50个地图 当前 非代表增兵50 60赫兹 Itsm 160 A 168 A 装式 通过洞 包装 箱 220 3 垂直领导 参数特性参数特性 控制方式 双向 极数 三极 封装材料 金属封装 封装外形 平板形 温度值得低字 节 D7D6D5D4D3D2D1D0 温度值的高字 节 SSSSSD10D9D8 关断速度 高频 快速 散热功能 带散热片 频率特性 高频 功率特性 中功率 图 3 TO 202AB BTA16 图 4 三 硬件模块设计三 硬件模块设计 1 电源电路 电源电路 51 单片机的供电电压为 4 0 5 5V 温度传感器的供电电压为 3 5V 双向晶闸管的供电电压 为 3 5V 所以选用 5V 电压供电 主电路用 220V 家用电压供电 2 2 单片机电路单片机电路 2 1 AT89C51 为 40 脚双列直插封装的 8 位通用微处理器 采用工业标准的C51 内 核 在内部功能及管脚排布上与通用的8xc52 相同 其主要用于会聚调整时的功能控 制 功能包括对会聚主 IC 内部寄存器 数据 RAM 及外部接口等功能部件的初始化 会聚调整控制 会聚测试图控制 红外遥控信号IR 的接收解码及与主板 CPU 通信等 主要管脚有 XTAL1 19 脚 和 XTAL2 18 脚 为振荡器输入输出端口 外接12 MHz 晶振 RST Vpd 9 脚 为复位输入端口 外接电阻电容组成的复位电路 VCC 40 脚 和 VSS 20 脚 为供电端口 分别接 5V 电源的正负端 P0 P3 为可编程 通用 I O 脚 其功能用途由软件定义 在本设计中 P0 端口 32 39 脚 被定义为 N1 功能控制端口 分别与 N1 的相应功能管脚相连接 13 脚定义为 IR 输入端 10 脚和 11 脚定义为 I2C 总线控制端口 分别连接 N1 的 SDAS 18 脚 和 SCLS 19 脚 端口 12 脚 27 脚及 28 脚定义为握手信号功能端口 连接主板CPU 的相应功 能端 用于当前制式的检测及会聚调整状态进入的控制功能 2 2 P0 口口 P0 口是一组 8 位漏极开路型双向 I O 口 也即地址 数据总线复用口 作为输出口 用时 每位能吸收电流的 方式驱动 8 个 TTL 逻辑门电路 对端口 P0 写 1 时 可作为高阻抗输入端用 在访问外部数据存储器或程序存储器时 这组口线分时转换地址 低8 位 和数据 总线复用 在访问期间激活内部上拉电阻 在 Flash 编程时 P0 口接收指令字节 而在程序校验时 输出指令字节 校验时 要求外接上拉电阻 2 3 P1 口口 P1 是一个带内部上拉电阻的 8 位双向 I O 口 P1 的输出缓冲级可驱动 吸收或输 出电流 4 个 TTL 逻辑 电阻 某个引脚被外部信号拉低时会输出一个电流 IIL 与 AT89C51 不同之处是 P1 0 和 P1 1 还可分别作为定时 计数器 2 的外部计 数输入 P1 0 T2 和输入 P1 1 T2EX 2 4 P2 口口 P2 是一个带有内部上拉电阻的 8 位双向 I O 口 P2 的输出缓冲级可驱动 吸收或 输出电流 4 个 TTL 逻辑 门电路 对端口 P2 写 1 通过内部的上拉电阻把端口拉到高电平 此时可作输 入口 作输入口使用时 因为内部存在上拉电阻 某个引脚被外部信号拉低时会输出一 个电流 IIL 在访问外部程序存储器或 16 位地址的外部数据存储器 例如执行MOVX DPTR 指令 时 P2 口送出高 8 位地址数据 在访问 8 位地址的外部数据存储器 如执行MO VX RI 指令 时 P2 口输出 P2 锁存器的内容 Flash 编程或校验时 P2 亦接收高位地址和一些控制信号 2 2 5 5 P P3 3 口口 P3 口是一组带有内部上拉电阻的8 位双向 I O 口 P3 口输出缓冲级可驱动 吸收或输出电流 4 个 TTL 逻辑门电路 对 P3 口写入 1 时 它们被内部上拉电 阻拉高并可作为输入端口 此时 被外部拉低的P3 口将用上拉电阻输出电流 IIL P3 口还接收一些用于 Flash 闪速存储器编程和程序校验的控制信号 2 2 6 6 R RS ST T 复位输入 当振荡器工作时 RST 引脚出现两个机器周期以上高电平将使单片机复位 2 2 7 7 A AL LE E P PR RO OG G 当访问外部程序存储器或数据存储器时 ALE 地址锁存允许 输出脉冲用于锁存地 址的低 8 位字节 一般情况下 ALE 仍以时钟振荡频率的 1 6 输出固定的脉冲信号 因此它可对外输出时钟或用于定时目的 要注意的是 每当访问外部数据存储器时将 跳过一个 ALE 脉冲 对 Flash 存储器编程期间 该引脚还用于输入编程脉冲 PROG 如有必要 可通过对特殊功能寄存器 SFR 区中的 8EH 单元的 D0 位置位 可 禁止 ALE 操作 该位置位后 只有一条MOVX 和 MOVC 指令才能将 ALE 激活 此外 该引脚会被微弱拉高 单片机执行外部程序时 应设置ALE 禁止位无效 2 2 8 8 P PS SE EN N 程序储存允许 PSEN 输出是外部程序存储器的读选通信号 当AT89C52 由外部程 序存储器取指令 或数据 时 每个机器周期两次PSEN 有效 即输出两个脉冲 在 此期间 当访问外部数据存储器 将跳过两次PSEN 信号 2 2 9 9 E EA A V VP PP P 外部访问允许 欲使 CPU 仅访问外部程序存储器 地址为0000H FFFFH EA 端 必须保持低电平 接地 需注意的是 如果加密位LB1 被编程 复位时内部会锁 存 EA 端状态 如 EA 端为高电平 接 Vcc 端 CPU 则执行内部程序存储器中的指令 Flash 存储器编程时 该引脚加上 12V 的编程允许电源 Vpp 当然这必须是该器 件是使用 12V 编程电压 Vpp 2 2 1 10 0 X XT TA AL L1 1 振荡器反相放大器的及内部时钟发生器的输入端 2 2 1 11 1 X XT TA AL L2 2 振荡器反相放大器的输出端 图图 5 5 3 3 温度采集电路温度采集电路 DS18B20工作原理 低温度系数晶振的振荡频率受温度的影响很小 1 用于产生固定频率的脉冲信号送给减 法计数器1 高温度系数晶振随温度变化其震荡频率明显改变 所产生的信号作为减法计数 器2的脉冲输入 图中还隐含着计数门 当计数门打开时 DS18B20就对低温度系数振荡器 产生的时钟脉冲后进行计数 进而完成温度测量 计数门的开启时间由高温度系数振荡器 来决定 每次测量前 首先将 55 所对应的基数分别置入减法计数器1和温度寄存器中 减法计数器1和温度寄存器被预置在 55 所对应的一个基数值 减法计数器1对低温度 系数晶振产生的脉冲信号进行减法计数 当减法计数器1的预置值减到0时温度寄存器的值 将加1 减法计数器1的预置将重新被装入 减法计数器1重新开始对低温度系数晶振产生的 脉冲信号进行计数 如此循环直到减法计数器2计数到0时 停止温度寄存器值的累加 此 时温度寄存器中的数值即为所测温度 图2中的斜率累加器用于补偿和修正测温过程中的非 线性 其输出用于修正减法计数器的预置值 只要计数门仍未关闭就重复上述过程 直至 温度寄存器值达到被测温度值 表2 温度值输入输出关系 图6 DS18B20硬件连接 4 4 显示电路元件选择显示电路元件选择 1 数码管的选择 图 7 CL5461AS a b c d e f g 为四位 7 段数码管的段选线 dp 为数码管的小数点显示位 A1 A2 A3 A4 为四位 7 段数码管的位选线 5 5 按键输入按键输入 设置独立式按键 其功能分别是 设置 负 图 8 按键电路 6 蜂鸣电路蜂鸣电路 接通电源后 当温度超过系统设定温度的上限值或者系统出现故障时 单片机给三极管发 周期性的方波信号 振荡器产生的音频信号电流通过电磁线圈 使电磁线圈产生磁场 振 动膜片在电磁线圈和磁铁的相互作用下 周期性振动发生 图 9 报警电路 7 主电路主电路 当温度低于设定温度是 单片机给主电路发高电平通过光电隔离开关控制双向晶阐管的导 通 是主电路接通或关断市电 220V 50HZ 从而控制加热元件的加热 制冷元件的制冷 图 10 主电路图 四 系统软件设计四 系统软件设计 1 1 程序流程图程序流程图 图 11 温度采样流程 开始 初始化 DS18B20是否存在 ROM操作命令 存储操作命令 读温度值 计算整数位温度BCD值 并进行存储 错误提示显示8888 N Y 结束返回 图 图 12 中断 中断 判断有键按下 调用10ms延时子程 序 判断是否有键按下 检测当前温度 假设为 R2 调用显示子程序显示当前温 度 P1 4 1 是否为加 P1 5 1 是否为 P1 6 1 确定键按下没有 默认温度 R2 中断结束返回 Y Y N N Y N N R2 R2 1 延时10ms Y R2 R2 1 Y N 图 13 主流程 设置默认温度和温 度上限值 初始化 中断和定 时 开始 调用温度检测子程 序 温度显示子程序 当前温度 温度上限制 温度 默认温度 P1 0发高电平 延时10ms P1 0发低电平 P1 0发低电平 报警和错误显示 8888 N Y Y N 五 系统调试仿真五 系统调试仿真 图 14 实时温度显示 图 15 六 结束语六 结束语 经过这次单片机的课程设计 我们接触到了更多平时没有接触到的仪器设备 元器件 以及相关的使用高度经验 发现了自身许多不足之处 使我深刻体会到了所学理论知识的 重要性 另外在这次设计中 我体会到了 51 单片机的种种优势 体积小 重量轻 抗干扰 能力强 对环境要求不高 价格低廉 可靠性高 灵活性好等特点 即使是非电子计算机 专业人员 通过学习一些专业基础知识以后也能依靠自己的技术力量 来开发所希望的单 片机应用系统 本文的温度控制系统 只是单片机广泛的应用更加广泛化 首先 通过这次应用系统设计 在很大程度上提高了自己的独立思考能力和单片机的 专业知识 也深刻了解写一篇应用系统的步骤和格式 以及不可少的几个阶段 课程设计 能够从理论设计和工程实践相结合 巩固基础知识与培养创新意识相结合 个人作用和集 体协作结合等方面全方位的培养我们学生的素质 我经过这次设计 熟悉了对一项课题进 行研究 设计和实验的详细过程 这些在我将来的工作和学习当中都会有很大的帮助 有 过这样的一次训练 相信在接下来的日子我们都会了 而且会做得更多 其次 我学会了怎么样查阅资料和利用工具书 平时课堂上所学习的只是大多数比 较陈旧 这就要求我们更加积极地查阅当前最近的电子信息资料 一个人所学所了解的总 是有限 因此 当我在设计过程中需要一些我不曾学习过的知识时 我就有针对性地去查 找了相关材料 并加以理解和利用 这大大有助于我们提高自身的应用能力 而且增长了 自己的见识 最新的专业知识 而且 课程设计对我以前学过的知识起到了回顾作用 并对其加以进一步的消化和巩 固 更进一步的 课程设计培养了我严肃认真 实事求是的科学态度 也让我明白了吃苦 耐相对应的工程意识的重要 参考文献 参考文献 1 罗印升 单片微机原理与应用 北京 机械工业出版社 2012 1 2 谭浩强 C 程序设计 北京 清华大学出版社 2010 6 3 康华光 电子技术基础模拟部分 高等教育出版社 2011 11 4 康华光 电子技术基础数字部分 高等教育出版社 2011 11 5 赵月飞 郭会平 胡仁喜 Protel 99se 北京 机械工业出版社 2009 12 6 陶红艳 余成波 传感器与现代检测技术 北京 清华大学出版社 2009 3 附录附录 1 程序 程序名 基于 DS18B20 的测温系统 功 能 实时测量温度 超过上下限报警 报警温度可手动调整 K1 是用来 进入上下限调节模式的 当按一下 K1 进入上限调节模式 再按一下进入下限 调节模式 在正常模式下 按一下 K2 进入查看上限温度模式 显示 1s 左右自动 退出 按一下 K3 进入查看下限温度模式 显示 1s 左右自动退出 按一下 K4 消除 按键音 再按一下启动按键音 在调节上下限温度模式下 K2 是实现加 1 功能 K1 是实现减 1 功能 K3 是用来设定上下限温度正负的 include 将 AT89X52 h 头文件包含到主程序 include 将 intrins h 头文件包含到主程序 调用其中的 nop 空操作函数延时 define uint unsigned int 变量类型宏定义 用 uint 表示无符号整形 16 位 define uchar unsigned char 变量类型宏定义 用 uchar 表示无符号字符型 8 位 uchar max 0 x00 min 0 x00 max 是上限报警温度 min 是下限报警温度 bit s 0 s 是调整上下限温度时温度闪烁的标志位 s 0 不显示 200ms s 1 显示 1s 左右 bit s1 0 s1 标志位用于上下限查看时的显示 void display1 uint z 声明 display1 函数 display h 头文件中的函数 ds18b20 h 要用应先声明 include ds18b20 h 将 ds18b20 h 头文件包含到主程序 include keyscan h 将 keyscan h 头文件包含到主程序 include display h 将 display h 头文件包含到主程序 主函数 void main beer 0 关闭蜂鸣器 led 1 关闭 LED 灯 timer1 init 0 初始化定时器 1 未启动定时器 1 get temperature 1 首次启动 DS18B20 获取温度 DS18B20 上点后自动将 EEPROM 中 的上下限温度复制到 TH 和 TL 寄存器 while 1 主循环 keyscan 按键扫面函数 get temperature 0 获取温度函数 keyscan 按键扫面函数 display temp temp d 0 625 显示函数 alarm 报警函数 keyscan 按键扫面函数 程序名 ds18b20 h 功 能 DS18B20 的 c51 编程头文件 include ifndef ds18b20 h 定义头文件 define ds18b20 h define uint unsigned int 变量类型宏定义 用 uint 表示无符号整形 16 位 define uchar unsigned char 变量类型宏定义 用 uchar 表示无符号字符型 8 位 sbit DQ P2 3 可位寻址变量定义 用 DQ 表示 P2 3 口 sbit beer P1 7 用 beer 表示 P1 0 sbit led P1 1 用 led 表示 P1 1 uchar temp 0 测量温度的整数部分 uchar temp d 0 测量温度的小数部 bit f 0 测量温度的标志位 0 表示 正温度 1 表示 负温度 bit f max 0 上限温度的标志位 0 表示 正温度 1 表示 负温度 bit f min 0 下限温度的标志位 0 表示 正温度 1 表示 负温 度 bit w 0 报警标志位 1 启动报警 0 关闭报警 sbit check P1 0 延时子函数 void ds18b20 delayus uint t 延时几 s while t void ds18b20 delayms uint t 延时 1ms 左右 uint i j for i t i 0 i for j 120 j 0 j ds18b20 初始化函数 void ds18b20 init DS18B20 初始化 uchar c 0 DQ 1 DQ 0 控制器向 DS18B20 发低电平脉冲 ds18b20 delayus 80 延时 15 80 s DQ 1 控制器拉高总线 while DQ 等待 DS18B20 拉低总线 在 60 240 s 之间 ds18b20 delayus 150 延时 等待上拉电阻拉高总线 DQ 1 拉高数据线 准备数据传输 ds18b20 字节读函数 uchar ds18b20 read DS18B20 字节读取 uchar i uchar d 0 DQ 1 准备读 for i 8 i 0 i d 1 低位先发 DQ 0 nop nop DQ 1 必须写 1 否则读出来的将是不预期的数据 if DQ 在 12us 处读取数据 d 0 x80 ds18b20 delayus 10 return d 返回读取的值 ds18b20 字节写函数 void ds18b20 write uchar d ds18b20 字节写 uchar i for i 8 i 0 i DQ 0 DQ d ds18b20 delayus 5 DQ 1 d 1 获取温度函数 void get temperature bit flag uchar a 0 b 0 c 0 d 0 uint i ds18b20 init DS18B20 初始化 ds18b20 write 0 xcc 向 DS18B20 发跳过读 ROM 命令 ds18b20 write 0 x44 写启动 DS18B20 进行温度转换命令 转换结果存入内部 RAM if flag 1 首次启动 DS18B20 进行温度转换需要 500ms 若转换时 间不够就出错 读出的是 85 度的错误值 display1 1 用开机动画耗时 else ds18b20 delayms 1 ds18b20 init DS18B20 初始化 ds18b20 write 0 xcc 向 DS18B20 发跳过读 ROM 命令 ds18b20 write 0 xbe 写读内部 RAM 中 9 字节的内容命令 a ds18b20 read 读内部 RAM LSB b ds18b20 read 读内部 RAM MSB if flag 1 局部位变量 f 1 时读上下线报警温度 max ds18b20 read 读内部 RAM TH min ds18b20 read 读内部 RAM Tl if maxmax max 0 x80 将上限温度符号标志位置 1 表示负温度 将上限温度装换成 无符号数 if minmin min 0 x80 将下限温度符号标志位置 1 表示负温度 将下限温度装换成 无符号数 i b i 4 if i 0 f 0 i 为 0 正温度 设立正温度标记 temp a 4 b 4 b 4 整数部分 a a 小数部分 temp d a 存储极限温度函数 void store t if f max 1 若上限温度为负 将上限温度转换成有符号数 最高位为 1 是负 为 0 是正 max max 0 x80 if f min 1 若下限温度为负 将上限温度转换成有符号数 min min 0 x80 ds18b20 init DS18B20 初始化 ds18b20 write 0 xcc 向 DS18B20 发跳过读 ROM 命令 ds18b20 write 0 x4e 向 DS18B20 发写字节至暂存器 2 和 3 TH 和 TL 命令 ds18b20 write max 向暂存器 TH 上限温度暂存器 写温度 ds18b20 write min 向暂存器 TL 下限温度暂存器 写温度 ds18b20 write 0 xff 向配置寄存器写命令 进行温度值分辨率设置 ds18b20 init DS18B20 初始化 ds18b20 write 0 xcc 向 DS18B20 发跳过读 ROM 命令 ds18b20 write 0 x48 向 DS18B20 发将 RAM 中 2 3 字节的内容写入 EEPROM DS18B20 上电后会自动将 EEPROM 中的上下限温度拷 贝到 TH TL 暂存器 温度超限报警函数 void alarm 若上限值是正值 if f max 0 if f min 0 若下限值是正值 if f 0 若测量值是正值 if temp max w 1 TR1 1 当测量值小于最小值或大于最大值时报警 if tempmin w 0 if temp max check 0 if f 1 w 1 TR1 1 若测量值是负值时报警 if f min 1 若下限值是负值 if f 0 若测量值是正值 if temp max 当测量值大于最大值时报警 w 1 TR1 1 if temp min 当测量值大于最小值时报警 w 1 TR1 1 if temp min 当测量值小于最小值时不报警 w 0 if f max 1 若下限值是负值 if f min 1 若下限值是负值 if f 1 若测量值是负值 if temp min w 1 TR1 1 当测量值小于最大值或大于最小值时报警 if tempmax w 0 当测量值小于最小值且大于最大值时不报警 if f 0 w 1 TR1 1 若测量值是正值时报警 endif 程序名 ds18b20 键盘头文件 功 能 通过键盘设定设定上下限报警温度 include ifndef keyscan H 定义头文件 define keyscan H sbit key1 P1 4 可位寻址变量定义 用 key1 表示 P2 2 口 sbit key2 P1 5 用 key2 表示 P2 1 口 sbit key3 P1 6 用 key3 表示 P2 0 口 sbit key4 P3 3 用 key4 表示 P3 3 口 uchar i 0 定义全局变量 i 用于不同功能模式的选择 0 正常模式 1 上限调节模式 2 下限调节模式 uchar a 0 定义全局变量 a 用于不同模式下数码管显示的选择 bit k4 0 K4 按键双功能选择位 k4 0 时 K4 按键选择消按键音的 功能 k4 1 时 K4 按键选择正负温度设定功能 bit v 0 K2 K3 按键双功能选择位 v 0 时选择上下限查看功能 v 1 时选择上下限温度加减功能 bit v1 0 v1 1 时定时 1250ms 时间到自动关闭报警上下限查看功 能 bit v2 0 消按键音功能调整位 为 0 时开按键音 为 1 时关 按键音 读键盘延时子函数 void keyscan delay uint z 延时 1ms 左右 uint i j for i z i 0 i for j 120 j 0 j 温度调节函数 int temp change int count bit f 上下限温度调整 if key2 0 判断 K2 是否按下 if v2 0 beer 0 v2 0 开按键音 否则消按键音 keyscan delay 10 延时 10ms if key2 0 再次判断 K2 是否按下 实现按按键时消抖 beer 1 K2 按下关按键音 if f 0 若温度为正 count 每按一下 K2 温度上调 1 if a 1 if count 125 count 125 当温度值大于 125 时不上调 if a 2 if count 125 count 125 if f 0 若温度为负 count 每按一下 K2 温度下调 1 if a 1 if count 55 count 55 当温度值小于 55 时不再下调 if a 2 if count 55 count 55 while key2 0 K2 松开按键时消抖 keyscan delay 10 if key3 0 if v2 0 beer 0 keyscan delay 10 if key3 0 K3 按按键时消抖 beer 1 count 每按一下 K3 温度为正时下调 1 为负时上调 1 if a 1 if count 0 count 0 当温度值达到 0 时不再调 if a 2 if count2 K1 按下三次后退出调节模式 i 0 进入正常模式 TR1 0 关定时器 1 k4 0 在正常模式下选择 K4 的消按键音功能 v 0 在正常模式下选择 K2 K3 的查看上下限报警温度功能 store t 存储调整后的上下限报警温度 switch i 显示选择 case 0 a 0 break a 0 选择显示测得的温度 case 1 a 1 break a 1 选择显示上限温度 case 2 a 2 break a 2 选择显示下限温度 default break while key1 0 K1 松按键时消抖 keyscan delay 10 if a 1max temp change max f max 显示上限温度 else if a 2min temp change min f min else if k4 1 k4 1 时 K4 按键选择正负温度设定功能 if key4 0 if v2 0 beer 0 keyscan delay 5 if key4 0 beer 1 if a 1 if max 55 f max 0 else f max f max 当温度大于 55 度时 只能设定为正温度 if a 2 if min 55 f max 0 else f min f min 当温度大于 55 度时 只能设定为正温度 while key4 0 keyscan delay 10 if v 0 v 0 时选择上下限查看功能 if key2 0 if v2 0 beer 0 keyscan delay 10 if key2 0 beer 1 a 1 选择上限显示 TR1 1 开定时器 1 开始定时一分钟左右 s1 1 上限显示不闪烁 显示一分钟左右自动退出 while key2 0 keyscan delay 10 if key3 0 if v2 0 beer 0 keyscan delay 10 if key3 0 beer 1 a 2 选择下限显示 TR1 1 开定时器 1 开始定时 1s s1 1 下限显示不闪烁 显示 1s 自动退出 while key3 0 keyscan delay 10 if v1 1 v1 1 时定时 1s 时间到自动关闭报警上下限查看功能 a 0 v1 0 TR1 0 a 0 显示实测温度 v1 清零 关定时器 1 if k4 0 k4 0 时 K4 按键选择消按键音的功能 if key4 0 if v2 0 beer 0 keyscan delay 10 if key4 0 beer 1 v2 v2 为 0 时开按键音 为 1 时关按键音 while key4 0 keyscan delay 10 endif 程序名 ds18b20 数码管动态显示头文件 功 能 通过定时器 0 延时是数码管动态显示 include ifndef ds18b20 display H 定义头文件 define ds18b20 display H define uint unsigned int 变量类型宏定义 用 uint 表示无符号整形 16 位 define uchar unsigned char 变量类型宏定义 用 uchar 表示无符号字符型 8 位 sbit wei1 P2 4 可位寻址变量定义 用 wei1 表示 P2 4 口 sbit wei2 P2 5 用 wei2 表示 P2 5 口 sbit wei3 P2 6 用 wei3 表示 P2 6 口 sbit wei4 P2 7 用 wei4 表示 P2 7 口 uchar num 0 定义 num 为全局无符号字符型变量 赋初值为 uchar code temperature1 0 xc0 0 xf9 0 xa4 0 xb0 0 x99 0 x92 0 x82 0 xf8 0 x80 0 x90 定义显示码表 0 9 uchar code temperature2 0 x40 0 x79 0 x24 0 x30 0 x19 0 x12 0 x02 0 x78 0 x00 0 x10 带小数点的 0 9 uchar code temperature3 0 xff 0 x7f 0 xbf 0 x89 0 xc7 依次是 不显示 延时子函数 void display delay uint t 延时 1ms 左右 uint i j for i t i 0 i for j 120 j 0 j 定时器 1 初始化函数 void timer1 init bit t TMOD 0 x10 设定定时器 1 工作在方式 1 最大定时 65 53ms TH0 0 x3c 定时器赋初值 定时 50ms TL0 0 xb0 EA 1 开总中断 ET1 1 开定时器 1 中断 TR1 t 局部变量 t 为 1 启动定时器 1 为 0 关闭定时器 1 定时器 1 中断函数 void timer1 interrupt 3 TH0 0 x3c 重新赋初值 定时 50ms TL0 0 xb0 num 每进入一次定时器中断 num 加 1 每 50ms 加 1 一次 if num20 进入 20 次中断 定时 1s num 0 num 归 0 重新定开始定时 1s s1 0 定时 1s 时间到时自动关闭报警上下限显示功能 v1 1 定时 1s 时间到时自动关闭报警上下限查看功能 调整报警上下限显示选择函数 void selsct 1 uchar f uchar k 消除百位的 0 显示 及正负温度的显示选择 if f 0 若为正温度 百位为 0 则不显示百位 不为 0 则显示 if k 100 0 P0 temperature3 0 else P0 temperature1 k 100 if f 1 若为负温度 若十位为 0 百位不显示 否则百位显示 if k 100 10 0 P0 temperature3 0 else P0 temperature3 2 void selsct 2 bit f uchar k 消除十位的 0 显示 及正负温度的显示选择 if f 0 若为正温度 百位十位均为 0 则不显示十位 否则显示十位 if k 100 0 else P0 temperature1 k 100 10 if f 1 若为负温度 若十位为 0 十位不显示 否则十位显示 if k 100 10 0 P0 temperature3 2 else P0 temperature1 k 100 10 主显示函数 void display uchar t uchar t d 用于实测温度 上限温度的显示 uchar i for i 0 i 4 i 依次从左至右选通数码管显示 实现动态显示 switch i case 0 选通第一个数码管 wei2 0 关第二个数码管 wei3 0 关第三个数码管 wei4 0 关第四个数码管 wei1 1 开第一个数码管 if a 0 selsct 1 f t 若 a 0 则在第一个数码管上显示测量温度的百位或 if a 1 P0 temperature3 3 若 a 1 则在第一个数码管上显示 H if a 2 P0 temperature3 4 若 a 2 则在第一个数码管上显示 L break case 1 选通第二个数码管 wei1 0 wei3 0 wei4 0 wei2 1 if a 0 selsct 2 f t 若 a 0 则在第二个数码管上显示测量温度的十位或 if a 1 若 a 1 则在第二个数码管上显示上限报警温度的百位或 if s 0 selsct 1 f max max 若 s 0 则显示第二个数码管 否则不显示 else P0 temperature3 0 通过 s 标志位的变化实现调节上下限报警温度时数

温馨提示

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

评论

0/150

提交评论