基于单片机温度控制系统(编辑修改稿)内容摘要:

显示流程图如图 所示: 开始 初始化 输出测 量命令 等待读取数据 读取数据 低 字节 读取数据 高 字节 Y 复位 N 返回 13 图 LCD 显示流程图 电机控制处理程序 图 为电机控制处理流程图,电机控制子程序根据温度检测程序所得到的数据与预设值进行比较,再根据的比较结果将执行命令发送到外部设备。 当温度高于设定温度的上限 值时,控制电机反转;当温度低于设定温度值的下限值时,控制电机正转。 图 电机控制流程图 开始 LCD 初始化 设定数据位置 输入显示数据 结束 高于设定值 高于设定值 开始 将检测值与 设计值相比较 返回 N N 电机反转降温 电机正转升温 Y Y 14 按键处理程序 按键软件消抖 在这个系统中使用了四个按键,即一个界面切换键,一个设置键和上下限值加减键各一个(一个增加和一个减小)。 按键检测人机交互的重要环节。 我们既要保证按键按下立刻响应,又要做到当外界干扰时不会造成程序的跑飞。 我们在电路中将所有的按键一端接在 I/O 端口外加上拉电阻另一端接地,当有按键按下时,直接将单片机的 I/O 口拉低, 按键的检测就是检 测按键 的电平为低则有按键按下否则就没有 , 但是我们知道阿单片机执行程序是也有时间性的,所以按键按下一段时间后单片机才能够读取到。 另外 ,由于按键的物理特性,我们在操作按键时会发生抖动,如 下图 所示。 图 按键抖动示意图 按键抖动是程序必须考虑的 问题,否则程序将产生非常多的麻烦。 如图 按键的抖动时间约为 1020ms,所以我们检测按键时, 通过软件的方法将这段时间过滤掉,这样才能得到准确的信息。 我们在学习单片机按键接口时, 一般的 做法就是利用延时(只考虑软件消抖) ,即通过延时来直接 跳过按键的抖动时间,但是,这种做法效率太低, 因为延时的这段时间 CPU 在跑空语句,这对于 CPU 资源来说是极大的浪费。 下面给大家介绍一种提高效率的方法。 我们的 可以从这里来思考 , 我们通常是利用空语句延时,但是我们当执行其他子程序是也是需要时间的,即我们可以把处理子函数的时间作为按 键等待的时间,就是把它在为一个“延时子函数”,当“延时”过去以后再检测 I/O 口的电平。 我们可以将时间片的操作思想运用到按键检测,就是每隔 20MS(按键抖动时间)检测一下按键,如果连前后 2次都检测到按键按下,那么我们可以确认按键确实是按下了,否则就是抖动造成的 ,返回没有按键按下。 这就是 FSM 原理,我们把按键的检测分成三个状态即( 1)是 15 否有按键按下;( 2)按键正的按下;( 3)按键是否弹起。 所以程序中就是要将这三个状态的时间间隔设为 20MS,就可以将消抖的时间来运行其他程序成功的 避开 这一段时间,所以就可以成功的完 成按键检测了。 按键检测流程图 图 按键检测流程图 开始 是否有按键按下。 延时消抖 确定是否有按键按下。 获取按键值 按键处理 结束 Y Y N N 16 4 系统调试 硬件调试 根据原理图焊接好电路板,将焊接好的电路板通电,看该电路是否能正常工作,如液晶是否点亮并显示当前温度,如果液晶显示,温度检测都能正常工作,则表示该电路没有问题。 然后对该电路进行测试,采用加热的电烙铁靠近温度传感器 DS18B20,看温度是否发生变化,由于条件限制没有一个精确的温度校正装置,只能看到显示温度发生变化。 所以当用加热的电烙铁靠近是,可 以看到温度值在不断变大,等当前温度值超过设定温度范围的上限,能够看到电机反转,拿开电烙铁等温度值恢复到设定范围,能够看到电机停止转动。 编译软件 KIEL4 的使用 A: 编译软件的装载: 打开 keil 软件,打开 file 选择 License Management 获得 ID号,再打开 keil目录下的 将 ID 号粘贴进去获得 Liscense ID 号,复制 License ID号,粘贴到 License Management 中的相应位置,点击 ok 既可。 B:双击快捷方式,进入编辑界面,进行下一步编辑( 如图)。 C.点击文件,新建一个文件,将源程序输入后保存(生成 .c 文件)。 D. 选择项目,点击全部编译,系统自动进行编译后弹出对话框,提示编译中出现的问题,双击提示后系统会自动指出出问题的地方(生成 .exe 文件)。 图 KIEL4 软件图标 17 图 编译使用界面 程序的烧录 程序的烧录又称烧片, 烧片用的是 STC_ISP 软件,它的使用方法如下: 先配置 STC_ISP 软件, 如下图所示; 选择 STC89C52RC; 烧片时应注意的问题: ( 1)将单片机准确放入插槽中,不要 放反了否则有烧单片机的危险。 ( 2)选择单片机的型号,为该单片机的型号。 ( 3)打开要下载的文件,即 kile 的 .hex 文件 ( 4) 选择对应的 COM 口,可以在设备管理器中查到使用哪个 COM 口。 (5) 按下“ Download/下载” 握手成功后给单片机上电即可完成下载,(注:给单片机上电以后,可以用手触屏单片机,当感觉好烫时应立刻断电检查单片机是否放好和其他硬件电路是否正确。 ) 18 图 程序下载软件图标 图 下载软件界面 19 结论 经过几个月的努力并在指导老师的悉心教导下 ,本次毕业设计终于完成并达到了预期的效果,以下是本人对于这次设计的一些总结。 本次设计是基于室温控制系统,采用 DS18B20 模块作为温度采集传感器,该传感器只需简单的电路就可以与单片机实现连接,并且数据之间采用的是单总线进行通信即只需一个 I/O 口就可以了,由于是数字量传输,增加了抗干扰能力,大大提高数据的准确性。 通过本次设计对单片机有了更加深层次的了解,对 C 语言也是有很大的提高尤其是对于一个系统的整体的流程包括流程图到具体的程序的编写的能力大大的提高。 当然在这次设计中也遇到了很大的困难,比如一开始的单片机最 小体统不能工作查电路发现是焊接出现了问题;还有后面读取温度总是为零,后面发现是程序开始没有初始化DS18B20 导致不能正常工作,以及液晶显示不正确出现乱码,电机转动之后不能停下等问题。 庆幸的是这些都在老师和同学的帮助下一一解决了,有些只是自己的太粗心导致的,让系统不能正常的工作。 通过这次设计大大的提高了自己的动手能力,包括焊接等硬件制作和程序的编写等软件制作 ,由于本次试验在制作中全部滴 PCB 都是自己做的,包括元件库, PCB 库和原理图包括后面的电路板的腐蚀都是自己亲自操作的,对于 PCB 的整个的流程相当了解,极大的提升了对 PCB 制版和 DXP 软件的使用。 在这段时间里我也发现了自己一些不足,一开始对于问题没有一个总体的把握,总是感到无从下手,对于当中遇到的问题开始也不能很好的解决,可能由于缺少经验,很多问题都是要花费好多的时间。 通过这次毕业设计我对课本知识有了巩固和加强,由于课本上的知识太多,平时课间的学习并不能很好的理解和运用各个元件的功能,而且考试内容有限,所以 在这次课程设计过程中,我们了解了很多元件的功能,并且对于其在电路中的使用有了更多的认识。 这次毕业设计也让我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。 在这次设计中,我要感谢我的指导老师,他给予我许多的帮助和鼓励。 我还要感谢在设计过程中所有给予我真诚热情帮助的老师和同学。 20 参考文献 [1] 化成英,童诗白﹒《模拟电子技术基础第三版》 北京:高等教育出版社 , 20xx﹒ [2] 黎小桃,刘祖明,周福明﹒ Protel99SE 入门与提高【 M】﹒北京:电子工业出版社, 20xx﹒ [3] 王东锋,王会良,董冠强﹒单片机 C 语言应用 100 例【 M】﹒北京:电子工业出版 社, 20xx﹒ [4] 何希才 , 薛永毅 .传感器及其应用实例 [M].北京:机械工业出版社, 20xx. [5] 吉雷 , 章优仕 , 齐永龙 . Protel99 电子电路设计 [M]成都 :电子科技大学出版社 ,20xx. [6] 楼然苗,李光飞编著﹒ 51 系列单片机设计实例﹒北京北京航空航天大学出版社 20xx﹒ [7] 马忠梅,籍顺心,张 凯,马 岩﹒单片机 C 语言应用程序设计﹒ 修订版【 M】 ﹒ 北京:北京航空航天大学出版社, 1999﹒ [8] 北京教育科学研究院 .无线电技术基础 [M].北京: 人民邮电出版社 , 20xx. [9] 吕俊芳,钱政,袁梅﹒传感器接口与检测仪器电路【 M】﹒北京:国防工业出版社, 20xx [10] 明、唐杰等 .51 单片机编程基础与开发实例详解 .北京:人民邮电出版 社, 20xx [9] 赵晓安主编﹒ MCS51 单片机原理及应用﹒天津天津大学出版社 20xx﹒ 21 附录 A 单片机程序 include include include include /************************************************************************** ****************************** 变量定义 ***************************** **************************************************************************/ unsigned char code dis1[]={电子学院 A1031}。 unsigned char code dis2[]={温度控制系统 }。 unsigned char code dis3[]={指导老师: **}。 unsigned char code dis4[]={温度值 T=}。 unsigned char code dis5[]={班 }。 unsigned char code dis6[]={176。 C}。 unsigned char code dis7[]={上限值 =}。 unsigned char code dis8[]={下限值 =}。 unsigned char Temperature。 //读取温度转换值 unsigned char Screenchangeflage。 // 界面切换标志 unsigned char Screenchangeflagevalue。 // 界面切换标志值 unsigned char Keyexchangeflage。 // 界面切换标志 unsigned char Temperatureflage。 /。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。