基于at89s52单片机水温控制器的设计内容摘要:

5输出端要并联上一个电解电容,滤除交流电干扰 ,防止损坏单片机系统。 本设计采用 两种供电方式, 一种为 DC7~18V直流稳压电源变换成 5V的直流电;另一种为 四节干电池 共 6V经二极管加压后得到将近5V的直流电源 , 电源 配以开关和指示灯,以方便使用。 黄色发光二极管表示保温,红色的表示加热状态。 9 9 V C CD2I N 4 00 71122J22PGND2+ V C C 12 V1GND3J1电源座+ V C C 12 VD1I N 4 00 7IN1GND2OUT3U1L 78 0 5( 大 )12+ C122 0 U FV C CR11K1 2D3LED 图 311 系统电源设计图 报警电路设计 同时可以在系统里设定温度上限值, 由于加热停止后,加热管还有余热 当采集到的外界温度高于当前所设定温度上限值时, 程序就会进入报警子程序,触发蜂鸣器进行报警。 报警电路原理图如图所示。 VC CR 19 KE1C3B2Q4855 0FM 1B E L LP 图 312 报警电路 图 图中的三极管 8550的作用是增加驱动能力,比 9012的驱动电流还大些,因此选用8550。 当程序进入报警子程序时,把 0,就会触发蜂鸣器, 为了使报警声音效果更好,对 , 发出报警 嘟噜 声音。 4 系统 软件设计 本系统采用的是循环查询方式,来显示和控制温度的。 主要包括 四 段程序的设计: DS18B20读温度程序,数码管的驱动程序,键盘扫描程序,以及 抱经处理 程序。 主程序 流程图 10 10 实 测 温 度 = 预 设 温 度 保 温 指 示 灯 亮 , 停 止 加 热 加 热 指 示 灯 亮 , 开 始 加 热设 置 温 度。 温 度 ‘ + ’预 设 温 度 加 5 温 度 ‘ ’预 设 温 度 减 5设 置 完 成。 加 热控 制实 测 温 度 预 设 温 度加 热控 制读 1 8 B 2 0温 度 转 换显 示 温 度实 测 温 度 = 预 设 温 度 加 热 指 示 灯 亮 , 开 始 加 热实 测 温 度 预 设 温 度保 温 指 示 灯 亮 , 停 止 加 热YYYNNYYNNNNNYY图 41 主程序流程 11 11 各个模块的流程图 读取温度 DS18B20 模块的流程 由于 DS18B20采用的是一根数据线实现数据的双向传输,而对 AT89S52单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对 DS18B20芯片的访问。 DS18B20单线通信功能是分时完成的,它有严格的时隙概念。 因此系统对 DS18B20的各种操作必须按协议进行。 操作协议为:初始化 DS18B20(发复位脉 冲) → 发 ROM功能命令 → 发存储器操作命令 → 处理数据 DS18B20虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点, DS18B20必须首先调用启动温度转换函数,根据数据手册上对应转换时间来超作,如为 12位转换,则应该是最大 750mS,另外在对 DS18B20超作时,时序要求非常严格,因此最好禁止系统中断。 由于 DS18B20是在一根 I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。 DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。 该协议定义了几种信号的时序:初始化时序、 读时序、写时序。 所有时序都是将主机作为主设备,而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。 数据和命令的传输都是低位在先。 DS18B20的读时序: ( 1)对于 DS18B20的读时序分为读 0时序和读 1时序两个过程。 ( 2)对于 DS18B20的读时隙是从主机把单总线拉低之后,在 15秒之内就得释放单总线 ,以让 DS18B20把数据传输到单总线上。 DS18B20在完成一个读时序过程,至少需要60us才能完成。 DS18B20的写时序 : ( 1)对于 DS18B20的写时序仍然分为写 0时序和写 1时序两个过程。 ( 2)对于 DS18B20写 0时序和写 1时序的要求不同,当要写 0时序时,单总线要被拉低至少 60us,保证 DS18B20能够在 15us到 45us之间能够正确地采样 IO总线上的 “ 0” 电平,当要写 1时序时,单总线被拉低之后,在 15us之内就得释放单总线。 系统程序设计主要包括三部分:读出温度子程序 、 温度转换命令子程序 、显示温度子程序。 12 12 开 始初 始 化D S 1 8 B 2 0 存 在 吗。 R O M 操 作 命 令存 储 操 作 命 令读 取 温 度 值返 回YN 图 42 读取温度 DS18B20 模块的流程 图 程序代码为: GET_TEMPER: SETB DQ。 读出转换后的温度值 LCALL INIT_1820。 先复位 DS18B20 JB FLAG1,TSS2 RET。 判断 DS1820 是否存在 ?若 DS18B20 不存在则返回 TSS2: MOV A,0CCH。 DS18B20 已经被检测到 !!!!!!!!!!!!!!!跳过 ROM 匹配 LCALL WRITE_1820 MOV A,44H。 发出温度转换命令 LCALL WRITE_1820 LCALL DISPLAY。 这里通过调用显示子程序实现延时一段时间 ,等待 AD 转换结束 ,12 位的话 750 微秒 LCALL INIT_1820。 准备读温度前先复位 MOV A,0CCH。 跳过 ROM 匹配 LCALL WRITE_1820 MOV A,0BEH。 发出读温度命令 LCALL WRITE_1820 LCALL READ_18200。 将读出的温度数据保存到 35H/36H RET 13 13 键盘扫描处理流程 此流程为键盘扫描处理, CPU通过检测各数据线的状态 (0或 1)就能知道是否有按键闭合以 及哪个按键闭合。 键盘管理程序的功能是检测是否有按键闭合,如果有按键闭合,消除抖动,根据键号转到相应的键处理程序,按键流程图如图 43所示。 开 始温 度 设 置 键 是 否 按 下 ?调 设 置 功 能 子 程 序温 度 + 5 键 是 否 按 下 ?温 度 5 键 是 否 按 下 ?返 回 键 是 否 按 下 ?调 温 度 + 5 功 能 子 程 序调 温 度 5 功 能 子 程 序调 显 示 子 程 序返 回 主 程 序YNNYYYN温 度 设 置 键 是 否 按 下 ?YNNYN 图 43 键盘扫描子程序流程图 报警处理流程 运行程序后,温度传感器 DS18B20即可对环境进行温度采集,并送 LED数码管显示。 我们可以在程序里设定温度上限值,当采集到的外界温度高于当前所设定温度上限值时,程序就会进入报警子程序,触发蜂鸣器进行报警。 其程序流程图如图 44所示。 14 14 开 始P 2 . 7 取 反 , 启 动 蜂 鸣 器不 启 动 蜂 鸣 器 ,正 常 显 示 温 度进 行 温 度 比 较 , 超 过 上 限 值。 NY 图 44 报警子程序流程图 15 15 5 系统调试 硬件电路调试 仔细检查所接电路,按照硬件原理图接线,理论上是能实现的,如果数码管不显示,则应该检查线路是否正确,或是因为单片机没有工作,还有 集电极和发射极 是否接对。 如果只显示两 个八,则可能是 DS18B20没有接正确,检查上拉电路是否接好。 另外要注意的是,由单片机输出的控制信号比较小,需要进行放大才能驱动继电器工作,否则就不能实现升温过程,通常选用 8550三极管来进行放大。 还有 220V交流。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。