2022年单片机与DSB的数字温度计设计方案.docx

上传人:C****o 文档编号:12895253 上传时间:2022-04-26 格式:DOCX 页数:36 大小:566.67KB
返回 下载 相关 举报
2022年单片机与DSB的数字温度计设计方案.docx_第1页
第1页 / 共36页
2022年单片机与DSB的数字温度计设计方案.docx_第2页
第2页 / 共36页
点击查看更多>>
资源描述

《2022年单片机与DSB的数字温度计设计方案.docx》由会员分享,可在线阅读,更多相关《2022年单片机与DSB的数字温度计设计方案.docx(36页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精品学习资源四川师范高校课程设计报告基于单片机的 DS18B20数字温度计设计物理与电子工程学院电子信息工程2021级 6班2021070607汪文蝶2021 年 5月 20日同学姓名杜恒院系名称专业名称班级学号指导老师完成时间欢迎下载精品学习资源基于单片机的DS18B20数字温度计设计同学姓名:杜恒指导老师:汪文蝶内容摘要:随着现代信息化技术的飞速进展和传统工业改造的逐步实现,能独立工作的温度检测系统已广泛应用于各种不同的领域;本文介绍了一个基于STC89C52 单片机和数字温度传感器DS18B20的测温系统,并用LED 数码管显示温度值,易于读数;系统电路简洁、操作简便,能任意设定报警温度

2、并可查询最近的 10 个温度值,系统具有牢靠性高、成本低、功耗小等优点;关键词: 单片机 数字温度传感器 温度计欢迎下载精品学习资源1 引言 42 设计要求 42.1 基本要求 42.2 扩展功能 4 3 总体方案设计 43.1 方案论证 43.1.1 方案一 43.1.2 方案二 53.2 总体设计框图 5 4 硬件设计 54.1 单片机系统 54.2 数字温度传感器模块64.2.1 DS18B20 性能 64.2.2 DS18B20 形状及引脚说明 74.2.3 DS18B20 接线原理图 74.2.4 DS18B20 时序图 74.2.5 数据处理 94.3 显示电路 104.4 声光报

3、警电路 104.5 键盘输入电路 11 5 软件设计 115.1 主程序模块115.2 读温度值模块125.3 中断模块 145.4 温度查询模块155.5 温度设定、报警模块165.6 数码管驱动模块 18 6 源程序 197 总结 26参考文献: 28欢迎下载精品学习资源1 引言随着人们生活水平的不断提高,单片机掌握无疑是人们追求的目标之一,它所给人带来的便利是不行否定的,各种数字系统的应用也使人们的生活更加舒 适;数字化掌握、智能掌握为现代人的工作、生活、科研等方面带来便利;其中数字温度计就是一个典型的例子;数字温度计与传统的温度计相比,具有读数便利、测温范畴广、测温精确、功能多样话等优

4、点;其主要用于对测温要求精确度比较高的场所,或科研试验室使用,该设计使用 STC89C52单片机作掌握器,数字温度传感器DS18B20测量温度,单片机接受传感器输出,经处理用LED数码管实现温度值显示;2 设计要求2.1 基本要求实现实时温度显示,测温范畴 0 500C,误差 50C 以内;2.2 扩展功能温度报警,能任意设定温度范畴实现声光报警;每隔 10 分钟记录一次温度数据,至少能查询过去10 个时刻的温度情形;3 总体方案设计3.1 方案论证3.1.1 方案一由于本设计是测温电路,可以使用热敏电阻之类的器件,将随被测温度变化的 电压或电流采样,进行A/D 转换后就可以用单片机进行数据处

5、理,实现温度显示;这种设计需要用到A/D 转换电路,增大了电路的复杂性,而且要做到高精度也比较困难;欢迎下载精品学习资源测温电路单片机驱动电路显示电路按键输入电路报警电路时 钟 、 复 位 电3.1.2 方案二考虑到在单片机属于数字系统,简洁想到数字温度传感器,可选用DS18B20 数字温度传感器,此传感器为单总线数字温度传感器,起体积小、构成的系统结构简洁,它可直接将温度转化成串行数字信号给单片机处理,即可实现温度显示;另外 DS18B20具有 3 引脚的小体积封装,测温范畴为 -55+125 摄氏度,测温辨论率可达 0.0625 摄氏度,其测量范畴与精度都能符合设计要求;以上两种方案相比较

6、,其次种方案的电路、软件设计更简洁,此方案设计的系统在功耗、测量精度、范畴等方面都能很好地达到要求,故本设计采纳方案二;3.2 总体设计框图本方案设计的系统由单片机系统、数字温度传感器、LED 显示模块、按键掌握模块、温度报警模块组成,其总体架构如下图1;图 1 系统总体方框图4 硬件设计4.1 单片机系统1. 本设计采纳 STC89C52单片机作为掌握器,完成全部功能的掌握,包括: DS18B20数字温度传感器的初始化和读取温度值LED数码管显示驱动与掌握按键识别和响应掌握温度设置和报警欢迎下载精品学习资源温度值的储备和读取2. 单片机系统电路原理图:图 2 单片机系统原理图4.2 数字温度

7、传感器模块4.2.1 DS18B20 性能特殊的单线接口仅需一个端口引脚进行通信简洁的多点分布应用无需外部器件可通过数据线供电零待机功耗测温范畴 -55+125,以 0.5 递增可编程的辨论率为912 位,对应的可辨论温度分别为0.5 、0.25 、0.125 和 0.0625 温度数字量转换时间 200ms,12 位辨论率时最多在 750ms内把温度转换为数字应用包括温度掌握、工业系统、消费品、温度计和任何热感测系统负压特性:电源极性接反时,传感器不会因发热而烧毁,但不能正常工作欢迎下载精品学习资源4.2.2 DS18B20 形状及引脚说明图 3DS18B20形状及引脚GND:地DQ:单线运

8、用的数据输入 / 输出引脚VD:可选的电源引脚4.2.3 DS18B20 接线原理图单总线通常要求接一个约4.7K 左右的上拉电阻,这样,当总线闲暇时,其状态为高电平;图 4 DS18B20接线原理图4.2.4 DS18B20 时序图主机使用时间隙来读写DS18B20的数据位和写命令字的位;1. 初始化时序如下图:欢迎下载精品学习资源图 5 DS18B20 初始化时序2. DS18B20读写时序:图 6 DS18B20读写时序欢迎下载精品学习资源4.2.5 数据处理高速暂存储备器由9 个字节组成,其安排如表5 所示;当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存储备器的

9、第 0 和第 1 个字节;单片机可通过单线接口读到该数据,读取时低位在前,高位在后;图 7 字节安排下表为 12 位转化后得到的 12 位数据,储备在 18B20 的两个 8 比特的RAM 中,二进制中的前面 5 位是符号位,假如测得的温度大于 0, 这 5 位为0,只要将测到的数值乘于 0.0625 即可得到实际温度;假如温度小于 0,这 5 位为 1,测到的数值需要取反加 1 再乘于 0.0625 即可得到实际 温度; 例如+125的数字输出为 07D0H,实际温度 =07D0H*0.0625=2000*0.0625=125;例如 -55的数字输出为 FC90H,就应先将11 位数据位取反

10、加 1 得 370H480msDQ 拉高电平延时 1560msDQ 为低电平?Y返回N图 14 DS18B20 初始化子程序流程图3. DS18B20写字节和读字节子程序流程图:欢迎下载精品学习资源图 15 DS18B20写字节子程序流程图图 16 DS18B20读字节子程序流程图5.3 中断模块中断采纳 T0 方式 1,初始值定时为 50ms;中断模块需调用两个子程序:读温度值子程序:定时读取温度值,实时更新温度值记录温度值子程序:定时记录温度值,供查询使用把这两个子程序放在中断的缘由是,不会由于调整报警温度或查询历史温度值而停止更新温度值和记录温度值;中断模块流程图:中断入口14 / 28

11、定时重视置初值欢迎下载精品学习资源Y读温度值N记录温度值中断返回图 17 中断模块流程图5.4 温度查询模块温度查询模块需要接受按键输入,进入查询界面后,按加减键分别查询上一个和下一个历史温度值,并驱动数码管显示需要查询的温度值;温度查询模块流程图如下:入口N功能键按下?Y延时消抖N确认按下?Y显示温度值与位次N加键按下?15 / 28欢迎下载精品学习资源Y延时消抖欢迎下载精品学习资源Y查询下一个值确认按下?N欢迎下载精品学习资源N减键按下?Y延时消抖欢迎下载精品学习资源Y查询上一个值确认按下?N欢迎下载精品学习资源N退出功能键按下?Y返回图 18 温度查询模块流程图5.5 温度设定、报警模块

12、此模块跟温度查询模块类似,需要接受按键输入,进入模块界面后,按加减键分别上调和下调设定报警温度值,当实时温度值超过设定值时驱动蜂鸣器发 声,并点亮 8 位发光二极管,实现声光报警;温度设定、报警模块流程图如下:16入/口28功能键按下?欢迎下载精品学习资源YYY上调设定值NY下调设定值确认按下?声光报警温度超出设定值?取消报警判定退出界面?Y图 19 温度设定、返报回警模块流程图NNNYNYNYNN欢迎下载精品学习资源5.6 数码管驱动模块本设计数码管通过锁存器接单片机P0 口,采纳动态扫描驱动7 段 LED数码管进行显示,需调用延时子程序以稳固显示;模块流程图如下:入口关段选P0 置高开位选

13、送位码关位选P0 清零开段选送段码关段选延时返回图 20 数码管驱动模块流程图欢迎下载精品学习资源6 源程序#include#define uchar unsigned char #define uint unsigned int/*变量定义 */ sbit DQ=P22 ;/ds18b20 端口sbit beep=P23 ;/ 蜂鸣器使能端sbit dula=P26 ;/ 数码管段选使能sbit wela=P27 ;/ 数码管位选使能sbit add=P35 ;/ 加键sbit sub=P34 ;/ 减键sbit alarm=P36 ;/ 设定报警功能键sbit record=P37 ;/

14、查询温度记录功能键uchar code tabled=0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f, / 09 的七段数码管段码0x40,0x63,0x39 ;/- c 的段码uchar code tablew=0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f;/18 个数码管的位选码uchar recordtable10 ;/ 储备过去的十个温度值uchar temperature ;/ 温度值uchar countsec,recordnum,count ;/ 计数变量uint countmin ;/ 计

15、数变量uchar alanum=30 ;/ 报警温度值 ,初始值为 30 摄氏度uchar z=65;/ 消抖延时函数入口参数/*函数声明 */ void delay1uchar MS ;/ 动态扫描延时子程序void delayuchar i ;/DS18B20 工作延时子程序void Init_DS18B20;/DS18B20 初始化子程序void WriteOneCharunsigned char dat ;/ 向 DS18B20 写一字节数据uchar ReadOneCharvoid;/ 向 DS18B20 读一字节数据void GetTemperature ;/ 由 DS18B20产

16、生温度值void Displayuchar wei,uchar duan ;/ 数码管驱动子程序void Alarm ;/ 温度报警void Showtemperatureuchar tt;/ 温度显示void Keeprecord ;/ 记录温度值void Showrecord ;/ 显示记录的温度值/*主函数 */ void mainTMOD=0x01;/ 定时器初始化,定时器0 方式 1 TH0=65536-50000/256;/ 50msTL0=65536-50000%256;EA=1;/ 开中断欢迎下载精品学习资源ET0=1;TR0=1;/ 启动定时器while1Showtemper

17、aturetemperature;/ 显示实时温度Alarm ;/ 温度设定、报警Showrecord ;/ 查询温度记录值/*动态扫描延时函数 */ void delay1uchar MSint i,j ;fori=80 ;i0; i-forj=MS ;j0 ;j-;/*DS18B20工作延时函数 */ void delayuchar iwhilei- ;/*DS18B20初始化函数 */ void Init_DS18B20voidunsigned char x=0;DQ = 1;/DQ 复位delay8; / 稍做延时DQ = 0;/ 单片机将 DQ 拉低delay80; / 精确延时 大

18、于 480us DQ = 1;/ 拉高总线delay10;x=DQ;/ 稍做延时后 假如 x=0 就初始化胜利 x=1 就初始化失败delay5;while.xx=DQ;/*读一个字节 */ uchar ReadOneCharvoidunsigned char i=0;欢迎下载精品学习资源unsigned char dat = 0 ;for i=8 ;i0;i-DQ = 0; / 给脉冲信号dat=1;DQ = 1; / 给脉冲信号ifDQ dat|=0x80 ;delay5;returndat ;/*写一个字节 */ void WriteOneCharunsigned char datuns

19、igned char i=0 ;for i=8 ; i0; i-DQ = 0;DQ = dat&0x01;delay5;DQ = 1;dat=1;delay5;/*产生温度值 */ void GetTemperatureuchar tempL,tempH ;/ 分别为数据低位和高位uint temp ;Init_DS18B20;WriteOneChar0xCC; / 跳过读序列号的操作WriteOneChar0x44 ; / 启动温度转换delay200;Init_DS18B20;WriteOneChar0xCC; / 跳过读序号列号的操作WriteOneChar0xBE; / 读取温度寄存器

20、等 ;/ 读出温度低位 LSB tempH=ReadOneChar;/ 读出温度高位 MSB temp=tempH*16+tempL/16;/tempL右移四位去掉小数位temperature=temp&0xff;/ 测量 050 度,只取 temp 低八位/*数码管驱动函数 */欢迎下载精品学习资源void Displayuchar wei,uchar duandula=0; P0=0xff; wela=1 ;P0=tablewwei ;wela=0 ;P0=0;dula=1;P0=tabledduan ;dula=0; delay11;/*温度显示函数 */ void Showtemper

21、atureuchar ttDisplay2,tt/10 ;/ 显示温度数值Display3,tt%10; Display4,11;/ 显示摄氏度单位Display5,12;/*温度值设定、报警函数*/ void Alarmbit flag ;ifalarm=0delay180;/ 延时消抖ifalarm=0flag=1;/ 第一次按键进入设置whileflagifadd=0delay1z;/ 延时消抖ifadd=0alanum+;/add 键按下,上调设定值ifalanum=51alanum=0 ;/ 最大值为 50 摄氏度,循环显示欢迎下载精品学习资源ifsub=0delay1z;/ 延时消

22、抖ifsub=0alanum- ;/sub 键按下,下调设定值ifalanum=255alanum=50 ;/ 最小值为 0 摄氏度,循环显示Showtemperaturealanum ;Display0,10; / 选中数码管的其他闲暇位Display1,10; / 区分于实时温度显示“ ”Display6,10;Display7,10;ifalarm=0delay180;/ 延时消抖ifalarm=0flag=0;/ 其次次按键退出设置iftemperaturealanum/此处设置报警可以保证调整设定值时即可准时报警beep=0 ;/ 温度大于设定值,声光报警P1=0;欢迎下载精品学习资

23、源elsebeep=1 ;/ 温度不大于设定值即不报警P1=0xff;欢迎下载精品学习资源iftemperaturealanum/此处设置报警即保证即使没有进入设置界面任然可以报警beep=0 ;/ 温度大于设定值,声光报警欢迎下载精品学习资源elseP1=0;beep=1 ;/ 温度不大于设定值即不报警P1=0xff;欢迎下载精品学习资源/*温度记录函数 */ void Keeprecorduchar i=9 ;ifcountmin=1200/1分钟countmin=0 ;count+;ifcount=10/10分钟count=0 ;recordnum+ ;/ 记录一次加一,最大记录10 个

24、值ifrecordnum=10recordnum=10 ;dorecordtablei=recordtablei-1;while-i ;recordtable0=temperature;/ 最新值填入第一个位置/*查询记录的温度值*/ void Showrecordbit flag ;uchar a;ifrecord=0delay180;/ 延时消抖ifrecord=0flag=1;/record 第一次按键置位进入标志欢迎下载精品学习资源whileflag/ 进入查询Display0,recordtablea/10 ;/ 显示温度数值Display1,recordtablea%10 ;Dis

25、play2,11; / 显示摄氏度单位Display3,12;Display4,10; / 数码管第 6、7 位选中,温度值与记录数之间用-间隔Display5,10;Display6,a+1/10;/ 显示第几个记录值Display7,a+1%10;ifadd=0delay1z;/ 延时消抖ifadd=0/add按下,查看下一个值ifrecordnum=0欢迎下载精品学习资源elsea=0;a+;ifa=recordnum/ 循环显示欢迎下载精品学习资源a=0;ifsub=0/sub 按下,查看上一个值delay1z;ifsub=0ifrecordnum=0欢迎下载精品学习资源elsea=0

26、;a-;ifa=255/ 循环显示欢迎下载精品学习资源a=recordnum-1 ;欢迎下载精品学习资源ifrecord=0delay180;ifrecord=0/record其次次按下,退出查看flag=0;/*定时器中断 0,用于温度检测时间间隔和记录数据时间间隔*/ void timer0 interrupt 1TH0=65536-50000/256;TL0=65536-50000%256;/ 50mscountsec+;countmin+ ;ifcountsec=20/1scountsec=0;GetTemperature ;/ 一秒钟更新一次温度值Keeprecord;/ 定时记录温

27、度值7 总结此次课程设计中,难点在于DS18B20 的使用,即对它的时序掌握、初始化以及字节读写方法,任何一个环节出错或是时序掌握不到位的话就不能得到正确的 数据;一旦学会了正确的使用方法,就能感觉到它带来的便利是热电偶不能比 拟的,以后再次使用的话就能很快上手了;软件设计中,把程序按功能分模块的话能提高编程效率,把问题一一解决,同时画流程图能帮忙理清思路,使问题简洁化;定义变量时,尽量定义局部变量,在字符型变量能达到要求的情形下就不用定义成整形变量了,以节约内存空间;同时局部变量应防止与全局变量取同名,否就全局变量将被屏蔽或与局部变量相冲突而达不到设计的成效;另一方面,取变量名时也要讲究技

28、巧,应尽量使其见名知意,同样地,写程序时加注释确是特别必要的,否就隔欢迎下载精品学习资源一段时间后,想再改进或做扩展的话就比较困难了,由于即使是自己写的程序也变得难读难懂了;在做键盘消抖时,延时的时间比较重要,一般为10ms 左右,延时太短就会使按键太过灵敏,按一下就使数字跳变几次;而延时过长就可能使按键按下了却无响应,在外部定义初始化一个延时函数的入口参量就能很便利地调整延时时间,以达到比较好的成效;另外,假如对按键进行释放判定的话就能解决长时间按键导致按键重复响应的问题;此设计中没有为温度的单位 摄氏度)预备专用的数码管来显示,如单独用一个数码管显示“ C”来代替“”的话,看起来感觉很别扭

29、;偶然想起如如用一个数码管的上半部显“ 0”,即 a、b、f、g 段点亮,来代替“”左上角的“度”的话,成效应当不错,便作了一试,发觉这是确是一个很好的想法,便在此次设计中采纳了这个方法来显示温度单位;另外此次设计也考虑了实时 温度显示界面与报警温度设置界面的区分,即在进入报警温度设置界面时,让 其余的数码管都显示出一横杠,即g 段点亮,这样就不会让两个界面相互混淆;总的来说,自己从这次独立的课程设计中收成了一些学问与体会,一些从书本中学之不来的东西,不是说理论无用,而这恰恰是在理论的土壤中开出的花朵,是在理论的肩膀望见的更宽广的道路!胜利来之不易,自主动手动脑实践,小小的成果亦能带来硕大的欢乐!欢迎下载精品学习资源参考文献:1. 徐玮. C51单片机高效入门 第 2 版) . 北京:机械工业出版社, 2021.2. 龙脉工作室,刘鲲,孙春亮 修订版) . 北京:人们邮电出版社, 2021.欢迎下载

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

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

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