数字温度计设计单片机课程设计(编辑修改稿)内容摘要:

生电源供电方式时 VDD 端接地。 由于单线制只有一根线,因此发送接口必须是三态的。 4 硬 件电路设计 主板电路 系统整体硬件电路包括,传感器数据采集电路,温度显示电路,上下限报警调数字温度计设计 7 整电路,单片机主板电路等,如图 所示。 图 中有三个独立式按键可以分别调整温度计的上下限报警设置,图中蜂鸣器可以 在被测温度不在上下限范围内时,发出报警鸣叫声音。 图 中的按健复位电路是上电复位加手动复位,使用比较方便,在程序跑飞时,可以手动复位,这样就不用在重起单片机电源,就可以实现复位。 图 显示电路 显示电路采用的是四位一体八段共阴数码管。 四位一体八段数码管最大的有点是免去了各个数码管间的复杂的连接电路。 本设计中,将八段数码管的 ADP, 8个段选端分别接到单片机的 P0~0P0~7 管脚。 14,4个 位 选端分别连接到单片机的P2~0P2~3 管脚。 报警参数调节电路 门限中的三个 按键,分别为模式切换按键、加按键、减按键;模式切换按键接 P1~0,加按键接 P1~1,减按键接 P1~2。 蜂鸣器报警电路 报 警电路中,超过高门限或者低于低门限时发光二极管被点亮蜂鸣器,其余时刻光二极管均熄灭、蜂鸣器不响;蜂鸣器报警接 P1~4。 温度采集电路 DS18B20 温度采集电路中,需要注意的是 DQ 上需要一个上拉电阻,一般为 左右。 DQ 接 P2~6。 5 系统软件设计 系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等 数字温度计设计 8 主 程序 主程序的主要功能是负责温度的实时显示、读出并处理 DS18B20 的测量的当前温度值,温度测量每 1s进行一次。 这样可以在一秒之内测量一次被测温度,其程序流程见图。 图 读取数据的流程图 DSl8820 的主要数据元件有: 64位激光 Lasered ROM,温度灵敏元件和非易失性温度告警触发器 TH和 TL。 DSBl820 可以从单总线获取电源,当信号线为高电平时,将能量贮存在内部电容器中;当单信号 线为低电平时,将该电源断开,直到信号线变为高电平重新接上寄生 (电容 )电源为止。 此外,还可外接 5 V 电源,给DSl8820 供电。 DSl8820 的供电方式灵活,利用外接电源还可增加系统的稳定性和可靠性。 图 为 读取数据流程图。 初始化 调用显示子程序 1S 到。 初次上电 读出温度值温度计算处理显示数据刷新 发温度转换开始命令 N Y N Y 数字温度计设计 9 发 DS18B20 复位命令 发跳过 ROM 命令 发温度转换开始命令 结束 图 读取数据的流程图 温度转换命令子程序 温度转换命令子程序主要是发温度转换开始命令,当采用 12位分辨率时转换时间约为 750ms,在本程序设计中采用 1s 显示程序延 时法等待转换的完成。 温度转换命令子程序流程图如上图,图 所示。 图 开始 DS18B20 的初始化 启动 温度转换 读取温度寄存器 跳过读序列号的操作 跳过读序列号的操作 DS18B20 的初始化 RET 将 LSB 与 MSB 值合并为 temp temp 数字温度计设计 10 计算温度子程序 计算温度子程序将 RAM 中读取值进行 BCD 码的转换运算,并进行温度值正负的判定,其程序流程图如图。 图 模式切换流程图 图 开始 RET 延时消抖 模式值 st 在 1~3 间切换 延时等待按键返回 延时消抖 开始 温度零下 ? 温度值取补码置“ — ”标志 计算小数位温度 BCD值 计算整数位温度 BCD值 结束 置“ +”标志 N Y 模式键是否按下 数字温度计设计 11 使用模式值 st 来标记不同模式, st=1 时,表示在正常温度模式, st=2,表示在高门限模式, st=3 表示在低门限模式,每次按下一次模式切换键, st+1,待其加至 4时,将该值返回至 1。 从而形成了模式键不断按下,三种模式循环切换的情况。 防抖在这里是十分关键的。 因为此处的按键是按下然后又返回为按了一次。 所以按下时,则进入程序,为了防止机械抖动等不确定情况,延 时恰当的一段时间后再次检测是否确实按下。 若确实按下,则对模式进行切换。 切换后,延时等待按键返回高位,返回高位后,再次延时消除抖动,再次检验,确定按键返回高位后,退出程序。 数字温度计设计 12 6 实际连接与最终结果 ( 1)正常范围显示 图 ( 2) 温度报警上限显示 图 ( 3) 温度报警下限显示 图 数字温度计设计 13 设计心得体会 [硬件焊接 ]xx:通过本次课程设计我学到了好多东西,原来我 的单片机知识并不扎实,不论软件还是硬件都不好,不过在这次实习中,通过亲自动手,发现了很多不会的问题,也加深了对这些知识的认识。 在课程设计之前,我们在书上网上查找了许多资料,最终确定了此次课设的电路图。 在调试过程中,我们的板子出现了许多问题,举例如下: 问题 1:连接好线路,数码管不亮 解决办法:我们猜测可能线路板有虚焊,就将线路板检查了一遍,最后是将数码管给拆了,重新焊接了一遍。 问题 2:蜂鸣器响,数码管不亮 解决办法:通过同学的帮助,我们最后发现是单片机的问题,换了一新的 52芯片。 问题 3:连接好线路,数码 管乱码。 解决办法:本次课程设计的电路图是参考网上的,不知道是否正确,就用仿真试做了一下,发现仿真结果是正确的,就照图焊接了。 连好线路,发现数码管出现乱码现象,通过询问同学,在网上查找资料,知道了是数码关没有驱动,就给 4个位选线路分别焊接了三极管( 9014),因为数码管是共阴的。 问题 4:数码管显示 2559 解决办法:分析得知,这个可能是由于温度传感器没有采集到数据,即可能是因为软件编程有问题也可能是硬件焊接,我们找来同学的板子,将我们的 52 单片机与同学焊接的板子相连接,发现数码管有显示,明白了是板子的问题 ,之后将与温度串关起相连的线路仔细检查,部分线路重新焊接。 在课设中,我深深感受到团队合作的重要性。 这次课设对于我们来说是比较困难的,但是俗话说三个臭皮匠顶个诸葛亮,虽说我们只有两人,但我们分工明确,互相讨论互相学习互相帮组,遇到不会的问题积极解决,请教同学,终于成功完成了此次设计。 我们收获不小,这为我们大四的毕业设计打下了基础。 [软件调试 ]xx: 经过一周的努力我们终于完成了本次设计任务,作品实现了预期的功能要求。 但 在本次设计 与调试的过程中 ,我 也遇到了 很多的问题。 ( 1) 在 仿真中, 我将 数码管段码 a~dp 连接在了 P0 口,仿真不成功。 后查阅P0、 P P2 以及 P3 口的内部结构后发现,除 P0 外另外三口均接有上拉电阻,而P0则无。 所以 P0在作为通用 I/O 接口使用时,必须外接上拉电阻,其余端口则不需要。 加入排阻后仿真成功。 ( 2) 关于位选 在最开始的测试数码管类型中,我只测试了一位数码管,使其显示数值 1,但测试成功后, 4 位数码管均显示为 1。 在测试过程中,我并未注意这个问题。 测试结束后,进行整体联调。 但数码管始终无正确显示。 当时,我首先着手于寻找软件程序中是否有错误。 所以人为将 temp 设定为一个固定值, 先确定数据处理程序和数据显示程序无误。 然而数码管无法正常显示我预先设定的值,后经过反复改动,发现,在位选过程中,必须在选中一位数码管的过程中同时将其余所有的数码管关闭,否则将产生混乱。 若逐一设定 S1=1; S2=0; S3=0; S4=0 未免太过麻数字温度计设计 14 烦,所以设定一个数组,分别赋值 0x08,0x04,0x02,0x01。 片选时按照规则将上值赋给,则一举多得。 ( 3) DQ 数据采集 上述问题均解决后,再次进行调试,数码管显示 2559。 显然采集的数据是有很大问题的,这就说明电路并没有采集到温度数据 , 我不断的对 程序中 DS18B20的初始化时等部分的时序进行调整。 在经历了无法显示正常温度的挫败后,我仔细查阅了 DS18B20 的数据手册,确定了在其初始化过程中, DQ电平应该如何变化且应当延时多少。 同时也确定了 DS8B20 的在 12 位分辨率情况下数据 A/D 转换所需时间为 500ms~750ms,所以在发出转换命令后需要给其充分的时间来进行 A/D 转换。 经过对程序的调整,问题得到解决。 ( 4) 数码管大部分时间显示的是正常温度,但是仍然会在某些时候跳变为2559,1279 等数值 还不时的错误报警。 猜测可能是接触不良造成的 , 主要 是排线,+5V电压线,地线等诸多因素的影响。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。