当前位置:文档之家› 单片机数字式温度计设计说明书(附带源程序)

单片机数字式温度计设计说明书(附带源程序)

附件1:学号:0121218700312课程设计题目数字式温度计学院物流工程学院专业物流工程班级姓名指导教师2015年1月18日附件2:课程设计任务书学生姓名:专业班级:指导教师:工作单位:题目: 数字式温度计设计初始条件:1、设计与仿真软件:Keil uVision 和Proteus要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.18B20 设计一款能够显示当前温度值的温度计;2. 切换按钮可以切换华氏度和摄氏度显示;3.其他功能时间安排:2015年1月4 - 5日选择题目,布置任务2015年1月6 - 8日功能分析,硬件设计及修改2015年1月9 -13日软件设计与编程2015年1月14-18日调试并修改硬件组成2015年1月19-20日编写任务说明书2015年1月21-22日确认提交版、答辩指导教师签名:年月日系主任(或责任教师)签名:年月日附件6:本科生课程设计成绩评定表指导教师签字:年月日目录1 设计任务 (2)2设计方案 (3)2.1 任务分析 (3)2.2 方案设计 (3)3系统硬件设计 (5)3.1时钟电路设计 (5)3.2复位电路设计 (5)3.3 1602控制电路 (5)3.4 DS18B20通信电路,开关电路设计 (6)3.5系统原理图 (7)4系统软件设计 (8)4.1 1ms定时 (8)4.2 DS18B20初始化程序 (8)4.3对DS1802写一个字节的数据 (8)4.4 1602的操作程序 (8)4.5温度测算及转换程序 (10)5仿真与性能分析 (11)5.1系统仿真过程 (11)5.2系统性能分析 (11)6.小结与展望 (13)参考文献 (14)附录1 元件清单 (15)附录2 系统程序 (16)数字式温度计的设计摘要温度是一种最基本的环境参数,人民的生活、生产与环境的温度息息相关。

在工业生产过程中需要实时测量温度,在农业生产中也离不开温度的测量,因此研究温度的测量方法和装置也有重要的意义。

本文将介绍智能集成温度传感器 DS18B20 的结构特征及控制方法,并以此为传感器 DS18B20 和 AT89C52 单片机为控制器构成的温度测量装置的工作原理做了详细的介绍。

该产品适用于人民的日常生活和工、农业生产,用于温度测量。

关键词AT89C52;DS18B20;LM016L;数字;温度计。

1设计任务1.1设计任务(1)用 DS18B20 设计一款能够显示当前温度值的温度计;(2)通过切换按钮可以切换华氏度和摄氏度显示;(3)其他功能(创新部分)设计例图如图1.1所示图1.1 设计例图1.2基本要求(1)用 DS18B20 设计一款能够显示当前温度值的温度计;(2)通过切换按钮可以切换华氏度和摄氏度显示;1.3拓展要求选作:实现测量多组的温度,都可以显示出来。

2设计方案2.1任务分析数字式温度传感器就是使用单片机来实现与 DS18B20 温度传感器的通信,实现温度计的功能。

温度由单片机计算出后,显示在 1602 液晶上,并且可以通过转换按钮实现显示华氏温度和摄氏温度的转换。

2.2方案设计2.2.1硬件方案根据设计的要求可知,系统的硬件原理框图如图 2.1 所示。

图2.1 硬件原理框图单片机选用AT89C51,设计时无需外接程序存储器,为设计和调试带来极大的方便。

DS18B20 与单片机的通信是通过1—wire 总线方式。

我将该通信线路与单片机P3.2口连接,从该口对D S18B20 进行读写操作。

另外,将一个按键开关与P3.7 口连接,进行摄氏华氏温度的换算。

2.2.2软件方案根据设计要求,程序框图如图 2.2 所示。

软件可由汇编语言完成,也可由 C 语言完成,我选择的C语言。

软件设计可以分为以下几个功能模块:(1)主程序:初始化及键盘。

(2)延时子程序:由_nop_()及 while 执行空循环来实现。

用于通信时序。

(3)LM160LCD液晶初始化及读写 RAM 子程序:初始化 1602 液晶,读写 1602RAM。

(4)18B20 初始化及读写 RAM 程序:初始化 18B20 以及读写 18B20 片内 RAM 的程序。

键盘扫描程序模块:扫描键盘有无按键按下。

判断键值图2.2 程序框图3.系统硬件设计3.1时钟电路设计如图3.1所示,采用内部时钟产生方式,在XTAL1和XTAL2两端跨接晶体或陶瓷振荡器,与内部反相器构成稳定的自击震荡。

其发出的时钟脉冲直接送入片内定时控制部件。

我采用的是12MHZ 的晶振。

图3.1单片机时钟电路3.2复位电路设计如图3.2所示,采用上电+按钮电平复位方式,当按下按钮时,RST 管脚高电平触发。

为保证复位可靠,RC 时间常数应大于两个机器周期,电容取30pF,电阻10k欧。

3.2单片机复位电路3.3 1602 控制电路如图3.3所示,通过上拉电阻使得单片机P0口具备I/O能力,P0与1602的数据端口依次连接。

RS、RW、EN分别连接单片机P1.0,P1.1,P1.2口。

上拉电阻1口为+5v。

图3.3控制电路3.4 DS18B20 通信电路,开关电路设计如图3.4所示,由DS18B20的数据通信端口与P3.2连接,开关电路与单片机P3.7口连接,按下开关即可将摄氏温度转化成华氏温度并显示在LCD上,保持闭合状态则可以实时显示华氏温度。

图3.4 DS18B20通信电路,开关电路电路3.5系统电路图如图3.5所示。

图3.5 系统电路图4系统软件设计4.1 1ms定时在这里我们并不需要太精确的定时,故我采用的是执行无实际意义的语句的方法定时。

采用了2层while语句,内层为执行while空循环110次,通过keil软件的调试可以发现,该空循环可延时约1ms,这样只用确定外层while执行的次数,就能实现大约毫秒级的延时。

4.2 1820初始化程序18b20的复位时序图如图4.1所示。

单片机io口必须要维持400~960us的低电平,以显示单片机现在接管总线,然后释放总线至少15us(即给单片机IO口给高电平),此后,18b20会拉低总线约200us,并释放总线,此时代表ds18b20复位成功。

按照对应时序用软件给单片机IO口赋值即可。

图4.1 18b20复位时序图4.3 对18B20 写一个字节数据18b20写操作时,先必须保证总线是高电平。

写 0 时,拉低总线至少 60us,ds18b20 会在15~60us 完成读入 0。

然后释放总线至少1us,完成一次写 1 操作。

写 1 时,也是先拉低总线,然后必须在 15us 之内拉高总线超过 60us,在 15us 之后 ds18b20会完成读入 1。

如此就完成了一次写 1 抄作。

将一字节数据的低位先写入,完成一次字节的写入。

读出时也是先读出的是低位数据。

4.4 1602的操作程1602操作指令如下:读状态:输入:RS=L,RW=H,E=H 输出:D0-D7=状态字写指令:输入:RS=L,RW=L,D0-D7=指令码,E=高脉冲输出:无读数据:输入:RS=H,RW=H,E=H 输出:D0-D7=数据写数据: 输入:RS=H,RW=L,D0-D7=数据,E=高脉冲输出:无这使得1602显示字符的程序流程图如图4.2所示。

图4.2 1602显示字符流程图先写指令 55H,判断 1602 是否忙。

写指令 38H 设置显示模式,写指令 06H,0CH 设置光标及数据地址指针移动方向。

总的方法就是,在数据地址指针指向的 RAM 内写字符的ASCII 码,该地址对应的 lcd 块就会显示相应的字符。

数据地址映射图如图 4.3。

图4.3 1602数字地址映射图4.5 温度测算及转换程序DS18B20 的在完成温度测量之后会发送11 位2 进制数,以表征温度的绝对值前5位为温度的符号位,见图4.4 所示。

图4.4 DS18B20温度输出软件的思路为,先将2个八位数据存在一个无符号整形的变量中,再将2个八位数据拼接在一起存放在一个有符号的16 位整形变量中。

然后将其后4 位分离出来,这是小数部分。

前12 位要判断最高5位是否为1。

若为1,代表为温度为负值,如此低7位就是反码,取反再加1 求得温度的绝对值;若为0,代表温度是正值,读出低7 位的值就是温度的绝对值。

如此一来就得出了摄氏温度值。

华氏温度摄氏温度转换关系式:华氏度 = 32 + 摄氏度×1.85仿真与性能分析5.1系统仿真过程1.利用p rotues 平台做仿真。

2.搭建如图5.1 所示电路,配置电源端子为设计值,运行。

3.通过图上每个I O 口的颜色(红色表示高电平,蓝色表示低电平)判断程序的执行是否符合预期。

4.调整D S18B20 上面的温度按钮,看看温度显示能否跟随D S18B20 处温度变化而变化。

图5.1 系统仿真图5.2系统性能分析当系统上电后,LCD大约1s后显示DS18B20所设温度,并保持恒定不会变化,如图5.2所示。

当按下切换按钮后,LCD上排即对此时温度进行换算,显示当前摄氏温度所对应的华氏温度。

调整DS18B20温度后,LCD温度随即更改,再次按下切换按钮,即可显示当前新温度所对应的华氏温度,如图5.3所示。

如果将切换按钮处于长期闭合状态,则可以同时显示摄氏温度及华氏温度,当调节DS18B20温度后,两排温度都会发生变化。

图5.2系统仿真结果图5.3系统仿真图6小结与展望这次单片机课程设计我受益良多,不仅学会了两款软件:Keil uVision 和Proteus的使用方法,也学习到了许多硬件电路设计的基本准则和软件编制的好习惯。

为了达到设计功能要求,我接触了自己以前从没接触过的DS18B20温度传感器和LCD1602液晶芯片,虽然在有限的设计时间内没有把这两个芯片的应用原理研究透彻,但可以实现基本的应用编程。

设计的这几天时间里,我阅读了单片机电路设计与仿真的相关资料,虽然是特别枯燥的,但收获到了新知识是值得高兴的,比如了解了温度传感器 DS18B20 的功能,如何编写单片机AT89C51的程序来实现数码管直接显示环境温度等等知识,与此同时还巩固了以前学过的知识。

最值得一说的收获我觉得还是通过课程设计我能利用硬件和软件的结合,完成一个产品的设计和制作!在这个课程设计完成的过程中,我感觉是对单片机课程的重温以及相关知识的拓展,让我知道如何有计划、有条理地去完成一项任务。

同时,让我觉得自己所掌握的只是其实是很少量的,完全谈不上专业人才。

这对自己大学有限的未来的发展是一个启发。

我做的这个温度传感器设计并不是最佳的,还有很多功能等待去完善和开发,比如如何提高温度测量的范围,如何设置温度警告等等。

参考文献:[1]李全利.单片机原理及接口技术[M].2版.北京:高等教育出版社,2009.[2]杨居义.单片机课程设计指导[M].北京:清华大学出版社,2009.[3]阎石.数字电子技术基础[M].3版.北京:电子工业出版社,2009.[4]马忠梅,刘滨.单片机C语言W indows 环境编程宝典[M].北京:北京航空航天大学出版社,2003.[5]欧阳文.ATMEL89系列单片机的原理与开发实践[M].北京:中国电力大学出版社,2006.[6]杨欣,王玉凤,刘湘黔,张延强.51单片机应用从零开始[M].北京:清华大学出版社,2008.附录1 元件清单如表1所示。

相关主题