《基于DS18B20的温度采集显示系统的设计.doc》由会员分享,可在线阅读,更多相关《基于DS18B20的温度采集显示系统的设计.doc(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、目录1.引言11.1绪论11.2课程设计任务书12.设计方案43.硬件设计方案43.1最小系统的设计43.2 LED发光报警电路63.3 DS18B20的简介及在本次设计中的应用63.3.1 DS18B20的外部结构及管脚排列63.3.2 DS18B20的工作原理73.3.3 DS18B20的主要特性83.3.4 DS18B20的测温流程93.3.5 DS18B20与单片机的连接93.4 报警温度的设置93.5 数码管显示103.5.1数码管工作原理103.5.2数码管显示电路123.6 硬件电路总体设计124.软件设计方案134.1主程序介绍134.1.1主程序流程图134.1.2主流程的C
2、语言程序144.2部分子程序184.2.1 DS18B20复位子程序184.2.2 写DS18B20命令子程序194.2.3读温度子程序214.2.4计算温度子程序234.2.5显示扫描过程子程序245.基于DS18B20的温度采集显示系统的调试266.收获和体会287.参考文献29 课程设计用纸1.引言1.1绪论随着科学技术的发展,温度的实时显示系统应用越来越广泛,比如空调遥控器上当前室温的显示,热水器温度的显示等等,同时温度的控制在各个领域也都有积极的意义。采用单片机对温度进行控制不仅具有控制方便、简单、灵活性大等特点,而且还可以大幅度提高被控温度的技术指标。本文介绍了基于DS18B20的
3、温度实时采集与显示系统的设计与实现。设计中选取单片机AT89C51作为系统控制中心,数字温度传感器DS18B20作为单片机外部信号源,实现温度的实时采集。并且用精度较好的数码管作为温度的实时显示模块。利用单片机程序来完成对DS18B20与AT89C51的控制,最终实现温度的实时采集与显示。采用单片机对温度进行控制不仅具有控制方便、简单、灵活性大等特点,而且还可以大幅度提高被控温度的技术指标。1.2课程设计任务书微机原理与接口技术课程设计任务书(二)题目:基于DS18B20的温度采集显示系统的设计一、课程设计任务传统的温度传感器,如热电偶温度传感器,具有精度高,测量范围大,响应快等优点。但由于其
4、输出的是模拟量,而现在的智能仪表需要使用数字量,有些时候还要将测量结果以数字量输入计算机,由于要将模拟量转换为数字量,其实现环节就变得非常复杂。硬件上需要模拟开关、恒流源、D/A转换器,放大器等,结构庞大,安装困难,造价昂贵。新兴的IC温度传感器如DS18B20,由于可以直接输出温度转换后的数字量,可以在保证测量精度的情况下,大大简化系统软硬件设计。这种传感器的测温范围有一定限制(大多在50120),多适用于环境温度的测量。DS18B20可以在一根数据线上挂接多个传感器,只需要三根线就可以实现远距离多点温度测量。本课题要求设计一基于DS18B20的温度采集显示系统,该系统要求包含温度采集模块、
5、温度显示模块(可用数码管或液晶显示)和键盘输入模块及报警模块。所设计的系统可以从键盘输入设定温度值,当所采集的温度高于设定温度时,进行报警,同时能实时显示温度值。二、课程设计目的通过本次课程设计使学生掌握:1)单总线温度传感器DS18B20与单片机的接口及DS18B20的编程;2)矩阵式键盘的设计与编程;3)经单片机为核心的系统的实际调试技巧。从而提高学生对微机实时控制系统的设计和调试能力。三、课程设计要求1、要求可以从键盘上接收温度设定值,当所采集的温度高于设定值时,进行报警(可以是声音报警,也可是光报警)2、能实时显示温度值,要求保留一位小数;四、课程设计内容1、人机“界面”设计;2、单片
6、机端口及外设的设计;3、硬件电路原理图、软件清单。五、课程设计报告要求报告中提供如下内容:1、目录2、正文(1)课程设计任务书;(2)总体设计方案(3)针对人机对话“界面”要有操作使用说明,以便用户能够正确使用本产品;(4)硬件原理图,以便厂家生成产(可手画也可用protel软件);(5)程序流程图及清单(子程序不提供清单,但应列表反映每一个子程序的名称及其功能);(6)调试、运行及其结果;3、收获、体会4、参考文献六、课程设计进度安排周次工作日工作内容第一周1布置课程设计任务,查找相关资料2熟悉相关芯片及使用方法3完成总体设计方案4画出硬件原理图及程序流程图5完成硬件接线,编写程序并调试第二
7、周1编写程序并调试2编写程序并调试3编写程序并调试及准备课程设计报告4完成课程设计报告并于下午两点之前上交5答辩本课题共需两周时间七、课程设计考核办法本课程设计满分为100分,从课程设计平时表现、课程设计报告及课程设计答辩三个方面进行评分,其所占比例分别为20%、40%、40%。2.设计方案本次的课题设计要求是基于DS18B20的温度采集显示系统,该系统要求包含温度采集模块、温度显示模块和键盘输入模块及报警模块。其中温度采集模块所选用的是DS18B20数字温度传感器进行温度采集,温度显示模块用的四位八段共阴极数码管进行温度的实时显示,键盘输入模块采用的是按钮进行温度的设置,报警模块用的是LED
8、灯光报警。具体方案见图2-1。 AT89C51 P0 P2 P2P1 P3最小系统蜂鸣器报警段选四位共阴极数码管显示温度报警温度的设定DS18B20温度传感器位选图2-1 总体设计方案3.硬件设计方案3.1最小系统的设计本次设计单片机采用的是AT89C51系列的,它由一个8位中央处理器(CPU),4k字节Flash闪速存储器,128字节内部RAM,32 个I/O 口线,两个16位定时/计数器,一个串行I/O口及中断系统等部分组成。其结构如图3-1所示:图3-1 AT89C51系列单片机引脚排列XTAL1XTAL2RSTEA图3-2 单片机最小系统接线图图3-2为单片机最小系统的接线图,其中C1
9、、C2均选用20PF的,晶振X1用的是11.0592MHZ的。晶振电路中外接电容C1,C2的作用是对振荡器进行频率微调,使振荡信号频率与晶振频率一致,同时起到稳定频率的作用,一般选用1030pF的瓷片电容。并且电容离晶振越近越好,晶振离单片机越近越好。晶振的取值范围一般为024MHz,常用的晶振频率有6MHz、12 MHz、11.0592 MHz、24 MHz等。晶振的振荡频率直接影响单片机的处理速度,频率越大处理速度越快。图3-2中C3,R1及按键构成了最小系统中的复位电路,本次设计选择的是手动按钮复位,手动按钮复位需要人为在复位输入端RST上加入高电平。一般采用的办法是在RST端和正电源V
10、cc之间接一个按钮。当人为按下按钮时,则Vcc的+5V电平就会直接加到RST端。由于人的动作再快也会使按钮保持接通达数十毫秒,所以,完全能够满足复位的时间要求。在单片机最小系统中还要将EA的非接高电平,如图3-2也有体现出来。3.2 LED发光报警电路P1.7图3-3 LED发光报警电路图3-3为LED报警电路的接法,其中一根线接单片机的8号P1.7口,另外一根接地。当温度超过预设温度值时LED灯被接通发光报警。3.3 DS18B20的简介及在本次设计中的应用3.3.1 DS18B20的外部结构及管脚排列DS18B20的管脚排列如图3-4所示:DS18B20引脚定义:(1)DQ为数字信号输入/
11、输出端;(2)GND为电源地;(3)VDD为外接供电电源输入端(在寄生电源接线方式时接地)图3-4 DS18B20的引脚排列及封装3.3.2 DS18B20的工作原理DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。 DS18B20测温原理如图3-5所示。图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在55所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进
12、行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。斜率累加器预置比较计数器1低温度系数晶振=0温度寄存器计数器2高温度系数晶振=0预置加1LSB置位/清除停止图3-5 DS18B20测温原理图3.3.3 DS18B20的主要特性(1)适应电压范围更宽,电压范围:3.05.5V,在寄生电源方式下可由数据线供电;(2)独特的单线接口
13、方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯;(3)DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温;(4)DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内;(5)温范围55125,在-10+85时精度为0.5;(6)可编程的分辨率为912位,对应的可分辨温度分别为0.5、0.25、0.125和0.0625,可实现高精度测温;(7)在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快;(8)测量
14、结果直接输出数字温度信号,以一线总线串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力;(9)负压特性:电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。3.3.4 DS18B20的测温流程初始化DS18B20跳过ROM匹配温度变换延时1S跳过ROM匹配读暂存器转换成显示码数码管显示图3-6 DS18B20的测温流程图3.3.5 DS18B20与单片机的连接P3.7图3-7 DS18B20与单片机的连接电路图如上图为DS18B20温度传感器与单片机之间的接法,其中2号接单片机的17号P3.7接口。DS18B20通过P3.7口将采集到的温度实时送入单片机中。3.4 报警温度的
15、设置P2.5P2.6P2.7图3-8 报警温度的设置电路图3-8为报警温度的设置电路,其中K1,K2,K3分别接到单片机的P2.5,P2.6,P2.7口。其中K1用于报警温度设定开关,K2用于报警温度的设置时候的加温度(每次加一),K3用于报警温度的设置时的减温度(每次减一)。实现了报警温度的手动设置。3.5 数码管显示3.5.1数码管工作原理图3-9 数码管的引脚排列及结构图3-9为数码管的外形及引脚排列和两种接法(共阴极和共阳极)的结构图。共阳极数码管的8个发光二极管的阳极(二极管正端)连接在一起。通常,公共阳极接高电平(一般接电源),其它管脚接段驱动电路输出端。当某段驱动电路的输出端为低
16、电平时,则该端所连接的字段导通并点亮。根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能吸收额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。共阴极数码管的8个发光二极管的阴极(二极管负端)连接在一起。通常,公共阴极接低电平(一般接地),其它管脚接段驱动电路输出端。当某段驱动电路的输出端为高电平时,则该端所连接的字段导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能提供额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。要使数码管显示出相应的数字或字符,必须使段数据口输出相应的字形编码。字型码各位定义为:
17、数据线D0与a字段对应,D1与b字段对应,依此类推。如使用共阳极数码管,数据为0表示对应字段亮,数据为1表示对应字段暗;如使用共阴极数码管,数据为0表示对应字段暗,数据为1表示对应字段亮。如要显示“0”,共阳极数码管的字型编码应为:11000000B(即C0H);共阴极数码管的字型编码应为:00111111B(即3FH)。依此类推,可求得数码管字形编码如表3-5所示。表3-5数码管字符表显示数字共阴顺序小数点暗共阴逆序小数点暗共阳顺序小数点亮共阳顺序小数点暗Dp g f e d c b a16进制a b c d e f g Dp16进制00 0 1 1 1 1 1 13FH1 1 1 1 1
18、1 0 0FCH40HC0H10 0 0 0 0 1 1 006H0 1 1 0 0 0 0 060H79HF9H20 1 0 1 1 0 1 15BH1 1 0 1 1 0 1 0DAH24HA4H30 1 0 0 1 1 1 14FH1 1 1 1 0 0 1 0F2H30HB0H40 1 1 0 0 1 1 066H0 1 1 0 0 1 1 066H19H99H50 1 1 0 1 1 0 16DH1 0 1 1 0 1 1 0B6H12H92H60 1 1 1 1 1 0 17DH1 0 1 1 1 1 1 0BEH02H82H70 0 0 0 0 1 1 107H1 1 1 0 0
19、 0 0 0E0H78HF8H80 1 1 1 1 1 1 17FH1 1 1 1 1 1 1 0FEH00H80H90 1 1 0 1 1 1 16FH1 1 1 1 0 1 1 0F6H10H90H显示的具体实施是通过编程将需要显示的字型码存放在程序存储器的固定区域中,构成显示字型码表。当要显示某字符时,通过查表指令获取该字符所对应的字型码。3.5.2数码管显示电路P0.1P0.2P0.3P0.4P0.5P0.6P0.7P2.0P2.1P2.2P2.3图3-10 四位八段数码管动态显示电路图3-10为本次设计所用到的四位八段数码管动态显示,其中段选接到单片机的P0口,位选接到单片机的P2口
20、的低四位。其中P0口也接的有上拉电阻,图中未标示出来,会在下面的总体电路中标示出来。采用的是动态显示方式。3.6 硬件电路总体设计图3-11为本次设计的硬件总体设计图,其中利用K1,K2,K3处进行报警温度的设置,然后有DS18B20进行实时温度采集,并在数码管上同步显示,若采集到的温度达到或者超过预设的报警温度,则LED灯会发光报警,若低于该报警温度,则不会报警。图3-11 硬件电路总体设计图4.软件设计方案4.1主程序介绍4.1.1主程序流程图本次设计首先对程序进行初始化,然后打开报警温度设定开关,对报警温度进行设定,确认设定值后,DS18B20温度传感器进行温度采集并送入单片机中,单片机
21、将传感器所检测到的温度同步显示在数码管上,并且与设置的报警温度进行比较,若达到或者超过报警温度时,LED灯发光报警,如果没有达到,则继续进行温度采集。开始初始化程序进行报警温度设定并确认传感器采集温度并实时显示判断达到报警温度?灯光报警Y继续温度采集N图4-1主程序流程图4.1.2主流程的C语言程序main () ALERT=0; LED=0; flag=0; sheding=30; disdata=0xff;/ 初始化端口 discan=0xff; for(h=0;h4;h+) /开机显示“8888”scan(); displayh=8; ow_reset(); /开机先转换一次 write
22、_byte(0xcc);/skip ROM write_byte(0x44);/发转换命令 for(h=0;h1) /温度显示界面 LED1=0;if(display1+display2*10=sheding) /比较 ALERT=1;/报警elseALERT=0; if(flag=0 & flag21) read_temp(); /读出温度数据 work_temp(); /处理温度数据 ge= display3; shi= display2; if(K1=0) flag2+; /flag2=0时为初始界面 flag2=1时为设定 if(flag21)flag2=2; if(flag=0) /
23、flag=0 时 温度显示 flag=1 设定显示flag=1;else if(flag=1)flag=0;LED=LED;key_delay(20);if(flag=1)sheding=30;ge=0;shi=3;/display0= ge; / 个位设定好的温度用于显示 /display2 =shi; /十位 if(flag=1) LED1=1; if(K2=0) /+ ge+;if(ge9)ge=0;shi+;if(shi9)shi=0;sheding=ge+shi*10; key_delay(20);if(K3=0) /- ge-;if(ge0)ge=9;shi-;if(shi0)sh
24、i=9;sheding=ge+shi*10; key_delay(20); display1= ge; / 个位设定好的温度用于显示 display2 =shi; /十位 for(h=0;h0;i-) DQ=1;_nop_();_nop_(); DQ=0;_nop_();_nop_();_nop_();_nop_();_nop_(); DQ=val&0x01; /最低位移出 delay(6); val=val/2; /右移1位 DQ=1; delay(1); 4.2.3读温度子程序读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,验有错时,不进行温度数据的改写。其程序流
25、程图如图4-4所示DS18B20的各个命令对时序的要求特别严格,所以必须按照所要求的时序才能达到预期的目的,同时,要注意读进来的是高位在后低位在前, 共有12位数,小数4位,整数7位,还有一位符号位。DS18B20复位、应答子程序跳过ROM匹配命令写入子程序温度转换命令写入子程序显示子程序(延时)DS18B20复位、应答子程序跳过ROM匹配命令写入子程序读温度命令子程序结束图4-4 读温度子程序读温度的C语言程序如下:read_temp() ow_reset(); write_byte(0xcc); write_byte(0xbe); temp_data0=read_byte(); temp_
26、data1=read_byte(); ow_reset(); write_byte(0xcc); write_byte(0x44); 4.2.4计算温度子程序流程图如图4-5所示:开始温度零下?温度值取补码置“”标志计算小数位温度BCD值计算整数位温度BCD值结束NY图4-5 计算温度子程序计算温度的C语言程序如下:work_temp() uchar n=0; if(temp_data1127) temp_data1=(255-temp_data1); temp_data0=(255-temp_data0); n=1; /负温度求补码 display4=temp_data0&0x0f;disp
27、lay0=ditabdisplay4; display4=(temp_data0&0xf0)4)|(temp_data1&0x0f)4) ; display3=display4/100; display1=display4%100; display2=display1/10; display1=display1%10; if(!display3)display3=0x0a; if(!display2)display2=0x0a; /最高位为0时不显示 if(n)display3=0x0b; /负温度是最高为显示“-” 4.2.5显示扫描过程子程序流程图如图4-6所示:开始送位选码送段选码延时图
28、4-6 显示扫描过程子程序显示扫描的C语言程序如下:scan() char k; for(k=0;k4;k+) /4位LED扫描控制 disdata=dis_7displayk; if(k=1)DIN=0; /当K=1时,P07为低电平显示小数点 discan=scan_conk; /列扫描 delay(30); discan=0xFF; 5.基于DS18B20的温度采集显示系统的调试运行后,按下K1键,开始进入报警温度设置过程,按下K2则温度增加一度,按下K3则温度减少一度,刚开始调试时,由于接的LED报警灯是高电平点亮,程序一运行时,AT89C51给各个引脚都是高电平,所以LED灯一运行就
29、会发光,违背了超过报警温度才发光的要求,所以在子程序中加上了一条开始时将LED所连引脚置0的程序。之后运行过程中又发现按下报警温度的设置键K1,K2,K3都不是很灵敏,有时按下的时间太短甚至会没有反应,经过与小组成员讨论,发现是由于按键没有进行消抖,在显示扫描子程序中加入了延时函数进行按键的消抖,这一问题也得到了解决。图5-1温度实时显示且未超过报警温度25摄氏度时LED没有发光报警图5-2温度实时显示且超过实时报警温度25摄氏度LED发光报警图5-3 实时显示负温度6.收获和体会在这一次的课程设计过程,我收获了很多,无论是在理论知识方面,还是理论联系实际的操作方面。因为已经一个学期没有学习单
30、片机这门课程,很多知识不太清楚,加上以前的基础知识也不是很牢固,对于Proteus和Keil软件的使用也生疏了,所以刚开始拿到课题时感到很有难度,不禁对此次的课程设计感到非常紧张。刚开始做这一课题的时候感到难度很大,许多知识都要重新学习,包括课本上的理论知识,以及编程和仿真软件的使用都要多加练习才能掌握。在这一过程中,我不断的上网查找相关资料,翻阅相关书籍,也一步步了解了设计中各个模块所要实现的功能,对这次的设计方案有了具象的认识。通过此次课程设计,我对C语言和单片机有了新的认识和理解,并且温习了Proteus和Keil软件的使用,也了解了它的许多以前不知道的功能。掌握了从设计方案的要求来进行
31、主程序流程图的设计,然后落实到每一个子程序,依次实现每一个功能要求。然后用仿真软件进行仿真调试,一步步的找出哪里的设计不符合要求并进行改正,几乎没有一次就能调试通过的程序,所以说程序不是写出来的,而是不断的调试出来的。这这个过程中也积累了硬件设计的经验。同时也加深了我对电路原理、器件资料、电路板设计和电路的硬件调试认识和理解。此次课程设计用到了DS18B20这一数字温度传感器,这是我们之前没有遇到过的一种新型的器件,所以通过上网和查阅相关书籍来查找这一器件的资料,从它的基本结构,到元件特性及工作原理之类的等等。在这个过程中我发现即使是一个小小的元件,也有很复杂的构成及多种特性,而且实际到许多方
32、面。在学习的过程中我也多DS18B20有了一个系统的了解。我也认识到想要真正的全面了解一个元件,一定要花一定的时间和精力。这次的课程设计让我学到了许多书本上没有的知识,学会了更加全面的思考问题,而不是片面的只看眼前,同时也学到了自我学习的方法,在查找资料自我分析及跟同学的讨论,与老师的指导这些过程都让我受益匪浅。同时我也认识到了自身存在的很多不足之处,理论知识不够扎实,操作能力也欠缺, 我会在以后的学习中更加努力以提高自身的能力。7.参考文献1.陈跃东.DS18B20集成温度传感器原理与应用J.安徽机电学院学报,20022.李广弟.单片机基础M. 北京:北京航空航天大学出版社,19943.何立民.单片机高级教程.北京航空航天大学出版社,20044.党峰,王敬农,高国旺.基于DS18B20的数字式温度计的实现J. 山西电子技术,2007第 29 页