欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    数字温度计设计单片机课程设计.doc

    • 资源ID:17238378       资源大小:232.50KB        全文页数:18页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    数字温度计设计单片机课程设计.doc

    【精品文档】如有侵权,请联系网站删除,仅供学习与交流数字温度计设计单片机课程设计.精品文档.单片机课程设计报告 院 (系): 电气与控制工程学院 专业班级:测控技术与仪器 设计者: 设计者 指导教师:2013年7月 17日目录1基本要求11.1设计题目11.2设计任务11.3本设计应达到要求11.4扩展功能11.5设计说明书(论文)12课程设计内容22.1设计任务目的22.2设计任务要求22.3方案设计22.3.1温度采集电路的选择22.3.2单片机的选择22.3.3显示电路的取决32.3.4报警部分电路分析33重要器件及其相关参数43.1单片机STC89C5243.2温度传感器DS18B2044硬件电路设计74.1主板电路74.2显示电路74.3报警参数调节电路74.4蜂鸣器报警电路74.5温度采集电路75系统软件设计85.1主程序85.2读取数据的流程图85.3温度转换命令子程序95.4 计算温度子程序105.5模式切换流程图106实际连接与最终结果11设计心得体会13参考文献15附录1:元件清单16附录2:程序清单16数字温度计设计【摘 要】:随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,本文将介绍一种基于单片机控制的数字温度计,本温度计属于多功能温度计,可以通过键盘设置上下报警温度当温度不在设置范围内时,可以报警。 【关键字】:DS18B20;STC89C52;四位一体数码管;报警;【引 言】:随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用,该设计控制器使用单片机STC89C52RC,测温传感器使用DS18B20,用4位一体共阴数码管以串口传送数据,实现温度显示,能准确达到以上要求。1基本要求1.1设计题目 数字温度计设计1.2设计任务 利用单片机和集成温度传感器设计一个可以直接显示温度值的数字温度计并要求达到一定的测量精度。1.3本设计应达到要求 硬件设计:根据任务要求,完成单片机最小系统及其扩展设计,焊接电路板,组成功能完整的样机。 软件设计:根据温度测量及显示功能要求,完成控制软件的编写与调试; 功能要求:至少利用3位数码管进行测量值的显示(也可用液晶显示器相应内容),温度测量范围:-20100;1.4扩展功能根据实际情况自由添加附加功能,如设置温度的上下限报警功能,利用语音或声光报警等。1.5设计说明书(论文) 设计说明书应表明设计思想和所使用的设计方法,主要内容包括: 系统简介、整体功能说明、各功能模块说明(附图)及系统使用说明; 设计还需要改进的地方及设计的心得体会; 参考文献:包括参考书、资料、网站等,按标准格式列出(可参考教材最后的参考文献引用格式); 附录:系统总体原理图及源程序。2课程设计内容2.1设计任务目的随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。本次课程设计的目的就是通过本次课程设计使我们更加熟练单片机技术的使用,将单片机理论知识融入于生产应用。使我们学有所用,学以致用!2.2设计任务要求根据设计要求,确定设计任务的总纲领:利用单片机和集成温度传感器设计一个可以直接显示温度值的数字温度计。设计要求:(1)硬件设计:根据任务要求,完成单片机最小系统及其扩展设计,焊接电路板,组成功能完整的样机。 (2)软件设计:根据温度测量及显示功能要求,完成控制软件的编写与调试;(3)功能要求:至少利用3位数码管进行测量值的显示(也可用液晶显示器相应内容),温度测量范围:-20100;(4)扩展功能:根据实际情况自由添加附加功能,如设置温度的上下限报警功能,利用语音或声光报警等。2.3方案设计因为本设计的核心就是温度的采集,故而首先考虑温度的采集方案即温度采集电路的选择。 2.3.1温度采集电路的选择 (1)温度采集电路方案一由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。 (2)温度采集电路方案二 进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。从以上两种方案,很容易看出,采用方案二,电路与软件设计都比较简单,传感精度也明显更高。故采用了方案二为本次数字温度计设计的大致方案。2.3.2单片机的选择选择完温度采集电路的设计,则考虑此次设计电路的核心单片机。单片机的选择主要是AT系列和STC系列的选择。依照的原则是:满足所需功能的前提下,尽量选择低成本单片机。由于AT系列51单片机是USA的产品,功能少,速度慢,RAM/ROM小,性能不够稳定。而且一些AT系列的单片机已经停产。相比STC系列单片机高性能,功能齐全,速度高,RAM/ROM大,价格低廉、下载程序方便等优点。毫无疑问。我们选择了STC系列常用的且价格较低的单片机STC89C52RC。2.3.3显示电路的取决单片机确定后。主要仅剩下显示电路的设计。关于显示电路。我们采用了四位一体八段共阴数码管。符合课程设计的要求。2.3.4报警部分电路分析在测温场所我们往往需要对高、低温进行报警,而且需要根据不同情况随时调节报警温限,这就需要设计键盘电路来进行报警参数设置。根据分析需要设计三个按键的键盘,即模式切换、加键,减键。2.4系统框图 该系统可分为以下七个模块: (1)控制器:采用单片机STC89C52对采集的温度数据进行处理; (2)温度采集:采用DS18B20直接向控制器传输12位二进制数据; (3)温度显示:采用了4个LED共阴极七段数码管显示实际温度值; (4)门限设置:主要实现模式切换及上下门限温度的调节; (5)报警装置:采用发光二极管和嗡鸣器进行报警,低于低门限或高于高门限均使其二极管发光嗡鸣器发出报警声音; (6)复位电路:对整个系统进行复位; (7)时钟振荡模块:为整个系统提供统一的时钟周期。图2.1总体设计方框图3重要器件及其相关参数3.1单片机STC89C52P0.0P0.7:通用I/O引脚或数据低8位地址总线复用地址;P1.0P1.7:通用I/O引脚;P2.0P2.7:通用I/O引脚或高8位地址总线复用地址;P3.0P3.7:通用I/O引脚或第二功能引脚(RxD、TxD、INT0、INT1、T0、T1、WR、RD);XTAL1、XTAL2:外接晶振输入端;RST/Vpd:复位信号输入引脚/备用电源输入引脚;Vcc:接+5V电源;Vss:地端。3.2温度传感器DS18B20 (1)DS18B20内部结构框图如图3.1所示:C64 位ROM和单线接口高速缓存存储器与控制逻辑温度传感器高温触发器TH低温触发器TL配置寄存器8位CRC发生器图3.1DS18B20内部结构框图(2)DS18B20温度传感器内部高速RAM结构如图3.2所示。用户要去改动,R1和R0决定温度转换的精度位数,来设置分辨率。温度 LSB温度 MSBTH用户字节1TL用户字节2配置寄存器保留保留保留CRC图3.2 (3)由表1可见,DS18B20温度转换的时间比较长,而且分辨率越高,所需要的温度数据转换时间越长。因此,在实际应用中要将分辨率和转换时间权衡考虑。表1 DS18B20温度转换时间表 (4)DS18B20的测温原理:器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器;高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器的脉冲输入。器件中还有一个计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将55所对应的一个基数分别置入减法计数器、温度寄存器中,计数器和温度寄存器被预置在55所对应的一个基数值。减法计数器对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器的预置值减到时,温度寄存器的值将加,减法计数器的预置将重新被装入,减法计数器重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。其输出用于修正减法计数器的预置值,只要计数器门仍未关闭就重复上述过程,直到温度寄存器值大致被测温度值。(5)通过单线总线端口访问 DS1820 的协议如下: 初始化 ROM 操作命令 存储器操作命令 执行/数据DS1820 需要严格的协议以确保数据的完整性。协议包括几种单线信号类型:复位脉冲、存在脉冲、写0、写1、读0 和读1。所有这些信号,除存在脉冲外,都是由总线控制器发出的。和 DS1820 间的任何通讯都需要以初始化序列开始,一个复位脉冲跟着一个存在脉冲,表明DS1820 已经准备好发送和接收数据(适当的ROM 命令和存储器操作命令)。 当总线上只有一个器件时,DS18B20读温度的流程为:复位发0CCH SKIP ROM命令发44H开始转换命令延时复位发0CCHSKIP ROM命令发0BEH读存储器命令连续读出两个字节数据(即温度) 结束。(6)DS18B20温度传感器与单片机的接口电路DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源,其接电源与单片机连接方式如图4。另一种是寄生电源供电方式。当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。采用寄生电源供电方式时VDD端接地。由于单线制只有一根线,因此发送接口必须是三态的。4硬件电路设计4.1主板电路系统整体硬件电路包括,传感器数据采集电路,温度显示电路,上下限报警调整电路,单片机主板电路等,如图4.1所示。图4.1中有三个独立式按键可以分别调整温度计的上下限报警设置,图中蜂鸣器可以在被测温度不在上下限范围内时,发出报警鸣叫声音。图4.1中的按健复位电路是上电复位加手动复位,使用比较方便,在程序跑飞时,可以手动复位,这样就不用在重起单片机电源,就可以实现复位。图4.1系统电路图4.2显示电路显示电路采用的是四位一体八段共阴数码管。四位一体八段数码管最大的有点是免去了各个数码管间的复杂的连接电路。本设计中,将八段数码管的A-DP,8个段选端分别接到单片机的P00-P07管脚。1-4,4个位选端分别连接到单片机的P20-P23管脚。4.3报警参数调节电路门限中的三个按键,分别为模式切换按键、加按键、减按键;模式切换按键接P10,加按键接P11,减按键接P12。4.4蜂鸣器报警电路 报警电路中,超过高门限或者低于低门限时发光二极管被点亮蜂鸣器,其余时刻光二极管均熄灭、蜂鸣器不响;蜂鸣器报警接P14。4.5温度采集电路DS18B20温度采集电路中,需要注意的是DQ上需要一个上拉电阻,一般为4.7K左右。DQ接P26。5系统软件设计 系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等5.1主程序主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。这样可以在一秒之内测量一次被测温度,其程序流程见图5.1所示。初始化调用显示子程序1S到?初次上电读出温度值温度计算处理显示数据刷新发温度转换开始命令NYNY 图5.1主程序流程图5.2读取数据的流程图DSl8820的主要数据元件有:64位激光Lasered ROM,温度灵敏元件和非易失性温度告警触发器TH和TL。DSBl820可以从单总线获取电源,当信号线为高电平时,将能量贮存在内部电容器中;当单信号线为低电平时,将该电源断开,直到信号线变为高电平重新接上寄生(电容)电源为止。此外,还可外接5 V电源,给DSl8820供电。DSl8820的供电方式灵活,利用外接电源还可增加系统的稳定性和可靠性。图5.2为读取数据流程图。开始DS18B20的初始化启动温度转换读取温度寄存器跳过读序列号的操作跳过读序列号的操作DS18B20的初始化RET将LSB与MSB值合并为temptemp 图5.2 读取数据的流程图5.3温度转换命令子程序温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。温度转换命令子程序流程图如上图,图5.3所示。发DS18B20复位命令发跳过ROM命令发温度转换开始命令 结束 图5.3温度转换命令子程序流程图5.4 计算温度子程序计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图如图5.4所示。 开始温度零下?温度值取补码置“”标志计算小数位温度BCD值 计算整数位温度BCD值 结束置“+”标志NY 图5.4计算温度子程序流程图5.5模式切换流程图开始模式键是否按下延时消抖模式值st在13间切换延时等待按键返回延时消抖RET 图5.5模式切换流程图使用模式值st来标记不同模式,st=1时,表示在正常温度模式,st=2,表示在高门限模式,st=3表示在低门限模式,每次按下一次模式切换键,st+1,待其加至4时,将该值返回至1。从而形成了模式键不断按下,三种模式循环切换的情况。防抖在这里是十分关键的。因为此处的按键是按下然后又返回为按了一次。所以按下时,则进入程序,为了防止机械抖动等不确定情况,延时恰当的一段时间后再次检测是否确实按下。若确实按下,则对模式进行切换。切换后,延时等待按键返回高位,返回高位后,再次延时消除抖动,再次检验,确定按键返回高位后,退出程序。6实际连接与最终结果(1)正常范围显示图6.1正常显示实物连接图(2) 温度报警上限显示图6.2温度报警上限显示实物连接图(3) 温度报警下限显示图6.3温度报警下限显示实物连接图设计心得体会硬件焊接xx:通过本次课程设计我学到了好多东西,原来我的单片机知识并不扎实,不论软件还是硬件都不好,不过在这次实习中,通过亲自动手,发现了很多不会的问题,也加深了对这些知识的认识。在课程设计之前,我们在书上网上查找了许多资料,最终确定了此次课设的电路图。在调试过程中,我们的板子出现了许多问题,举例如下:问题1:连接好线路,数码管不亮解决办法:我们猜测可能线路板有虚焊,就将线路板检查了一遍,最后是将数码管给拆了,重新焊接了一遍。问题2:蜂鸣器响,数码管不亮解决办法:通过同学的帮助,我们最后发现是单片机的问题,换了一新的52芯片。问题3:连接好线路,数码管乱码。解决办法:本次课程设计的电路图是参考网上的,不知道是否正确,就用仿真试做了一下,发现仿真结果是正确的,就照图焊接了。连好线路,发现数码管出现乱码现象,通过询问同学,在网上查找资料,知道了是数码关没有驱动,就给4个位选线路分别焊接了三极管(9014),因为数码管是共阴的。问题4:数码管显示2559解决办法:分析得知,这个可能是由于温度传感器没有采集到数据,即可能是因为软件编程有问题也可能是硬件焊接,我们找来同学的板子,将我们的52单片机与同学焊接的板子相连接,发现数码管有显示,明白了是板子的问题,之后将与温度串关起相连的线路仔细检查,部分线路重新焊接。在课设中,我深深感受到团队合作的重要性。这次课设对于我们来说是比较困难的,但是俗话说三个臭皮匠顶个诸葛亮,虽说我们只有两人,但我们分工明确,互相讨论互相学习互相帮组,遇到不会的问题积极解决,请教同学,终于成功完成了此次设计。我们收获不小,这为我们大四的毕业设计打下了基础。软件调试xx:经过一周的努力我们终于完成了本次设计任务,作品实现了预期的功能要求。但在本次设计与调试的过程中,我也遇到了很多的问题。 (1)在仿真中,我将数码管段码adp连接在了P0口,仿真不成功。后查阅P0、P1、P2以及P3口的内部结构后发现,除P0外另外三口均接有上拉电阻,而P0则无。所以P0在作为通用I/O接口使用时,必须外接上拉电阻,其余端口则不需要。加入排阻后仿真成功。 (2)关于位选在最开始的测试数码管类型中,我只测试了一位数码管,使其显示数值1,但测试成功后,4位数码管均显示为1。在测试过程中,我并未注意这个问题。测试结束后,进行整体联调。但数码管始终无正确显示。当时,我首先着手于寻找软件程序中是否有错误。所以人为将temp设定为一个固定值,先确定数据处理程序和数据显示程序无误。然而数码管无法正常显示我预先设定的值,后经过反复改动,发现,在位选过程中,必须在选中一位数码管的过程中同时将其余所有的数码管关闭,否则将产生混乱。若逐一设定S1=1;S2=0;S3=0;S4=0未免太过麻烦,所以设定一个数组,分别赋值0x08,0x04,0x02,0x01。片选时按照规则将上值赋给,则一举多得。 (3)DQ数据采集 上述问题均解决后,再次进行调试,数码管显示2559。显然采集的数据是有很大问题的,这就说明电路并没有采集到温度数据,我不断的对程序中DS18B20的初始化时等部分的时序进行调整。在经历了无法显示正常温度的挫败后,我仔细查阅了DS18B20的数据手册,确定了在其初始化过程中,DQ电平应该如何变化且应当延时多少。同时也确定了DS8B20的在12位分辨率情况下数据A/D转换所需时间为500ms750ms,所以在发出转换命令后需要给其充分的时间来进行A/D转换。经过对程序的调整,问题得到解决。 (4)数码管大部分时间显示的是正常温度,但是仍然会在某些时候跳变为2559,1279等数值还不时的错误报警。猜测可能是接触不良造成的,主要是排线,+5V电压线,地线等诸多因素的影响,稍作调整后即可消除。 总之,在这次单片机课程设计过程中我对温度集成芯片有了进一步了解。DS1820 虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实际应用中由于 DS1820 与微处理器间采用串行数据传送,因此,在对 DS1820 进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。在 DS1820 测温程序设计中,向 DS1820 发出温度转换命令后,程序总要等待 DS1820 的返回信号,一旦某个 DS1820 接触不好或断线,当程序读该 DS1820 时,将没有返回信号,程序进入死循环。参考文献1 柴钰.单片机原理及应用M.西安电子科技大学出版社,20092李朝青.单片机原理及接口技术M.北京航空航天大学出版社,19983李广弟.单片机基础M.北京:北京航空航天大学出版社,19944阎石.数字电子技术基础(第三版). 北京:高等教育出版社,1989附录1:元件清单1、STC89C52单片机最小系统 1个2、DS18B20温度传感器 1个3、4位一体共阴数码管 1个4、9014三极管 5个5、蜂鸣器 1个6、按键 3个7、电阻220 16个8、发光二极管 2个9、电阻470K 3个10、导线若干14、万用板10*15 1片15、4.7K 9脚排阻 1个附录2:程序清单* 文件名 : 温度采集DS18B20.c* 描述 : 该文件实现了用温度传感器件DS18B20对温度的采集,并在数码管上显示出来。#include<reg52.h>#define uchar unsigned char#define uint unsigned int#define disdata P0 /段码输出口#define discan P2 /扫描口#define jump_ROM 0xCC#define start 0x44#define read_EEROM 0xBEsbit DQ = P26; /DS18B20数据口 uchar st=1; uint temp; uint i; float tt; uint h; uint temp;uchar r;char high=40,low=15;sbit beep=P13;/LED报警sbit beep1=P14;/LED报警uchar pp;sbit key1=P10; /模式切换键sbit key02=P11; /加键sbit key03=P12; /减键unsigned char TMPH,TMPL; uchar code table10 = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; uchar code ditab16=0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09;/温度小数部分用查表法uchar code dis_715=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,0x00,0x40,0x76,0x38,0x39;/共阴LED段码表 "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮" "-" "H" "L" "C" uchar code scan_con4=0x08,0x04,0x02,0x01; /列扫描控制字uchar data temp_data2=0x00,0x00; /读出温度暂放uchar data display5=0x00,0x00,0x00,0x00,0x00; /显示单元数据,共4个数据和一个运算暂用* 名称 : delay()* 功能 : 延时,延时时间大概为140US。* 输入 : 无* 输出 : 无void delay_1()int i,j;for(i=0; i<=10; i+)for(j=0; j<=2; j+)* 名称 : delay()* 功能 : 延时函数* 输入 : 无* 输出 : 无void delay(uint N)int i;for(i=0; i<N; i+)* 名称 : Delay_1ms()* 功能 : 延时子程序,延时时间为 1ms * x* 输入 : x (延时一毫秒的个数)* 输出 : 无void Delay_1ms(uint i)/1ms延时uchar x,j;for(j=0;j<i;j+)for(x=0;x<=148;x+);* 名称 : Reset()* 功能 : 复位DS18B20* 输入 : 无* 输出 : 无uchar Reset(void)uchar deceive_ready;DQ = 0;delay(29);DQ = 1;delay(3);deceive_ready = DQ;delay(25);return(deceive_ready);* 名称 : read_bit()* 功能 : 从DS18B20读一个位值* 输入 : 无* 输出 : 从DS18B20读出的一个位值uchar read_bit(void)uchar i;DQ = 0;DQ = 1;for(i=0; i<3; i+);return(DQ);* 名称 : write_bit()* 功能 : 向DS18B20写一位* 输入 : bitval(要对DS18B20写入的位值)* 输出 : 无void write_bit(uchar bitval)DQ=0;if(bitval=1)DQ=1;delay(5);DQ=1;* 名称 : read_byte()* 功能 : 从DS18B20读一个字节* 输入 : 无* 输出 : 从DS18B20读到的值uchar read_byte(void)uchar i,m,receive_data;m = 1;receive_data = 0;for(i=0; i<8; i+)if(read_bit()receive_data = receive_data + (m << i);delay(6);return(receive_data); void key11()while(key1=0) /当模式切换键按下则进入循环体delay(300);/延时消除抖动if(key1=0)st+;/模式循环切换if(st=4)st=1;while(!key1);/延时等待按键回到高电平delay(300);while(!key1);/延时消除抖动/*门限值加1*/void key2() while(key02=0)delay(400);if(key02=0)if(st=3)low=low+1;if(st=2)high=high+1;if(low>high)pp=low;low=high;high=pp; while(!key02);delay(400);while(!key02);/*门限值减1*/void key3() while(key03=0)delay(400);if(key03=0) if(st=3)low=low-1;if(st=2)high=high-1;if(low>high)pp=low;low=high;high=pp; while(!key03);delay(400);while(!key03);/*上限温度显示*/void high1() uchar k; display0=high%10;display1=high/10;display2=10; /个位熄灭display3=12; /百位显示Hfor(k=0;k<4;k+) discan=scan_conk; disdata=dis_7displayk; delay(300);disdata=0x00;delay(100);/*uchar code table10 = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; uchar code ditab16=0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09;/温度小数部分用查表法uchar code dis_715=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,0x00,0x40,0x76,0x38,0x39;/共阴LED段码表 "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮" "-" "H" "L" "C" uchar code scan_con4=0x08,0x04,0x02,0x01; /列扫描控制字uchar data temp_data2=0x00,0x00; /读出温度暂放uchar data display5=0x00,0x00,0x00,0x00,0x00; /显示单元数据,共4个数据和一个运算暂用/*下限温度显示*/void low1() uchar ki; display0=low%10; display1=low/10;display2=10; /个位熄灭display3=13; /百位显示Lfor(ki=0;ki<4;ki+) discan=scan_conki; disdata=dis_7displayki; delay(100);disdata=0x00;delay(100);void BEEP()if(temp>=high|temp<=low) beep=1;beep1=1;else beep=0;beep1=0;* 名称 : write_byte()* 功能 : 向DS18B20写一个字节* 输入 : val(要对DS18B20写入的命令值)* 输出 : 无void write_byte(uchar val)uchar i,temp;for(i=0; i<8; i+)temp = val >> i;temp = temp & 0x01;write_bit(temp);delay(5); void work_temp() Reset();write_byte(jump_ROM);write_byte(start);Reset();write_byte(jump_ROM);write_byte(read_EEROM);TMPL = read_byte();TMPH = read_byte();temp = TMPL / 16 + TMPH * 16;P0 = tabletemp/10%10;P2 = 0x01;Delay_1ms(5);P0 = tabletemp%10;P2 = 0x02;Delay_1ms(5); * 名称 : Main()* 功能 : 主函数* 输入 : 无* 输出 : 无void main()P2 = 0x00;while(1)key11(); /查询模式切换键是否按下switch(st) /进入不同模式case 1: work_temp(); BEEP(); break; case 2: high1(); / 显示上限温度 key2();key3();break;case 3: low1(); /显示下限温度 key2(); key3(); break;/*结束*/

    注意事项

    本文(数字温度计设计单片机课程设计.doc)为本站会员(豆****)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开