《基于单片机ds18b20温度检测系统(共18页).doc》由会员分享,可在线阅读,更多相关《基于单片机ds18b20温度检测系统(共18页).doc(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上 大连海事大学课程设计报告题目:应用单片机和温度传感器实现温度检测专业名称: 姓 名: 学 号: 指导教师: 设计时间: 目录1、设计任务.32、设计方案.32.1、硬件分析. 32.2、软件设计. 33、系统硬件设计.4 3.1AT89C51单片机简介.43.2单片机最小系统设计.63.3ds18b20传感器简介.73.4数码管显示电路设计.93.5硬件清单.104、软件设计.115、实验总结与体会.146、附录.15 6.1仿真电路图及实验结论.157、参考文献.17 1、 设计任务1.1 目的:设计出基于51单片机和DS18B20温度传感器的温度测量系统。1.2
2、 要求:对各部分的电路进行了详细的介绍。系统可以非常方便地进行温度的测量,使用起来方便,具有精度高,体积小,功耗低,价格便宜的特点。适合我们的日常生活及一些基本的工农生产的温度测量需要, 51单片机和DS18B20的结合实现温度检测的最简单系统,且该系统结构简单,抗干扰性强,用途广泛。2、 设计方案2.1 硬件方案 以ds18b20温度传感器做信息采集器件,AT89C51做数据分析与处理工作,以4位段选数码管做温度显示器,再应用电源等基本器件组成硬件系统。 方案图如下AT89C51数据处理4位数码管 显示器 Ds18b20温度采集 2.2 软件方案本次设计以C语言编写程序,算法框图如下开始数据
3、处理显示结果初始化数据采集3、 系统硬件设计 3.1 AT89C51 是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程 AT89c51引脚图 DIP封装Flash 存储器。使用Atmel 公司高密度非 技术制造,与工业80C51 产品指令和引脚完 全兼容。片上Flash允许程序存储器在系统可编程,亦适于 常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统 可编程Flash,使得AT89C51为众多嵌入式控制应用系统提 供高灵活、超有节RAM, 32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口, 片内晶
4、振及。另外,AT89C51 可降至0Hz 静态逻 辑操作,支持2种可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工 作。掉电保护方式下,RAM内容被保存,振荡器被冻结, 单片机一切工作停止,直到下一个中断或硬件复位为止。 P0 口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻 辑电平。对P0端口写“1”时,引脚用作高阻抗输入。 当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下, P0不具有内部上拉电阻。 在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验 时,外
5、部上拉电阻。 P1 口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,p1 输出缓冲器能驱动4 个 TTL 逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入 口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。 此外,P1.0和P1.1分别作定时器/计数器2的外部计数输入(P1.0/T2)和定时器/计数器2 的触发输入(P1.1/T2EX)。 在flash编程和校验时,P1口接收低8位地址字节。 引脚号第二功能: P1.0 T2(定时器/计数器T2的外部计数输入),时钟输出 P1.1 T2EX(定时器/计数器T2的捕捉/重载触发信
6、号和方向控制) P1.5 MOSI(在用) P1.6 MISO(在系统编程用) P1.7 SCK(在系统编程用) P2 口:P2 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动 4 个 TTL 逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入 口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。 在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX DPTR) 时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送1。在使用 8位地址(如MOVX RI)访问外部数据存储器时,P2
7、口输出P2锁存器的内容。 在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。 P3 口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,p3 输出缓冲器能驱动4 个 TTL 逻辑电平。对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入 口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。 P3口亦作为AT89S52特殊功能(第二功能)使用,如下表所示。 在flash编程和校验时,P3口也接收一些控制信号。 端口引脚 第二功能: P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 INTO(外中断0) P3
8、.3 INT1(外中断1) P3.4 TO(定时/计数器0) P3.5 T1(定时/计数器1) P3.6 WR(外部数据存储器写选通) P3.7 RD(外部数据存储器读选通) 此外,P3口还接收一些用于编程和程序校验的控制信号。 RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将是单片机复位。 ALE/PROG:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。对FLASH存储
9、器编程期间,该引脚还用于输入编程脉冲(PROG)。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。 PSEN:程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89S52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN信号。 EA/VPP:外部访问允许,欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须
10、保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。如EA端为高电平(接Vcc端),CPU则执行内部程序存储器的指令。FLASH存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。 XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。 XTAL2:振荡器反相放大器的输出端。3.2 最小系统电路图3.3 ds18b20简介DS18B20数字温度计是DALLAS公司生产的1Wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便
11、。 DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。主要根据应用场合的不同而改变其外观。封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。1、DS18B20产品的特点 (1)、只要求一个端口即可实现通信。 (2)、在DS18B20中的每个器件上都有独一无二的序列号。 (3)、实际应用中不需要外部任何元器件即可实现测温。
12、 (4)、测量温度范围在55。C到125。C之间。 (5)、数字温度计的分辨率用户可以从9位到12位选择。 (6)、内部有温度上、下限告警设置。2、DS18B20的引脚介绍 图1:DS18B20管脚及封装DS18B20暂存寄存器分布:名称引脚功能描述1. GND地信号2. DQ数据输入/输出引脚。开漏单总线接口引脚。当被用着在寄生电源下,也可以向器件提供电源。 3 .VDD 可选择的VDD引脚。当工作于寄生电源时,此引脚必须接地。3 DS18B20的使用方法 由于DS18B20采用的是1Wire总线协议方式,即在一根数据线实现数据的双向传输,而对AT89S51单片机来说,硬件上并不支持单总线协
13、议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。 由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先 DS18B20的读时序 对于DS18B20的读时序分为读0时序和读1时序两个过程。 对于DS
14、18B20的读时隙是从主机把单总线拉低之后,在15秒之内就得释放单总线,以让DS18B20把数据传输到单总线上。DS18B20在完成一个读时序过程,至少需要60us才能完成。 DS18B20的写时序 对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。# 使用中注意事项DS1820虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实
15、际应用中也应注意以下几方面的问题: 1 较小的硬件开销需要相对复杂的软件进行补偿,由于DS1820与微处理器间采用串行数据传送,因此,在对DS1820进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。1.1.3DS18B20内部结构及工作原理 图2: DS18B20内部结构图DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。 DS18B20测温原理如图3所示。图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振随温度变化其振荡率明显改变,所产生的
16、信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在55所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图3中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。3.4数码管显示电路8段LED数码管,则在一定形状的绝缘材料上,利用单只LED组合排列成“8”字型的数码管,分别引出它们的电极,点亮相应的点划来显示出0-9的
17、数字。 LED数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。右图是共阴和共阳极数码管的内部电路,它们的发光原理是一样的,只是它们的电源极性不同而已将多只LED的阴极连在一起即为共阴式,而将多只LED的阳极连在一起即为共阳式。以共阴式为例,如把阴极接地,在相应段的阳极接上正电源,该段即会发 光。当然,LED的电流通常较小,一般均需在回路中接上限流电阻。假如我们将b和c段接上正电源,其它端接地或悬空,那么b和c段发光, 此时,数码管显示将显示数字“1”。而将a、b、d、e和g段都接上正电源
18、,其它引脚悬空,此时数码管将显示“2”。其它字符的显示 原理类同1.2.2,四位共阳数码管 图5:四位数码管管脚图其中12,9,8,6管脚为位选管脚,11,7,4,2,1,10,5,3为段选管脚。3.5 器件清单AT89C51芯片*1DS18B20传感器*14位8段数码管*1电阻10k*14.7k*21 k*1排阻102*1电容30p*210uf*10.1uf*1晶振 12.0M*1按键*1电源 导线若干4、 软件设计程序代码#include reg51.h#include intrins.h#define Disdata P0#define discan P2#define uchar un
19、signed char#define uint unsigned intsbit DQ=P33;sbit DIN=P07;uint h;uchar flag;uchar code dis_712=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82, 0xf8,0x80,0x98,0xff,0xbf;/p0口 段显示0-9/-uchar code scan_con4=0xf7,0xfb,0xfd,0xfe;/p2口 位选uchar data temp_data2=0x00,0x00;uchar data display5=0x00,0x00,0x00,0x00,0x00 ;vo
20、id delay(uint t) /延时函数for(;t0;t-);void scan()/led显示控制函数 char k; for (k=0;k0;i-)DQ=1;_nop_();_nop_();DQ=0; _nop_();_nop_();_nop_();_nop_();_nop_();DQ=val&0x01;delay(6);val=val/2;DQ=1;delay(1);uchar read_byte(void)/读取传感器信息uchar i;uchar value=0;for (i=8;i0;i-)DQ=1;_nop_();_nop_();value=1;/右移2位DQ=0;_nop
21、_();_nop_(); _nop_();_nop_();DQ=1;_nop_();_nop_();_nop_();_nop_();if(DQ)value|=0x80; /按位或delay(6);DQ=1;return(value);void read_temp() /读取温度数据部分ow_reset();write_byte(0xCC);write_byte(0xBE);temp_data0=read_byte();temp_data1=read_byte();ow_reset();write_byte(0xCC);write_byte(0x44);void work_temp()/对温度数
22、据进行处理uchar n=0;uchar doth,dotl;uchar flag3=1,flag2=1;if(temp_data1&0xf8)!=0x00) temp_data1=(temp_data1); temp_data0=(temp_data0)+1; n=1; flag=1; if(temp_data0255) /低位产生进位temp_data1+;display4=temp_data0&0x0f;display4=display4*0.625;display0=display4%10;/小数doth=display0/10;dotl=display0%10;display4=(t
23、emp_data0&0xf0)4)|(temp_data1&0x07)4);/整数部分display3=display4/100%10;/百display2=display4/10%10; /十display1=display4%10; /个if(!display3) display3=0x0a; flag3=0; if(!display2) display2=0x0a; flag2=0; if(n)display3=0x0b;flag3=0;main() /主函数Disdata=0xff; discan=0xff; for(h=0;h4;h+)displayh=8;/初始值ow_reset(
24、); write_byte(0xCC);write_byte(0x44);for(h=0;h500;h+) scan();while(1) read_temp(); work_temp(); scan();5、 实验总结与体会此次课设的题目是基于51单片机的数码管显示温度计,对于单片机方面的内容,由于本学期的单片机课程才刚刚开始,对于单片机方面的内容了解不是很深,所以选择制作的温度计不是很复杂,显得相对简单,在自己的不断修改和完善之后,最终算是非常成功地完成了此次温度计的制作,自己在制作的过程中也学到了许多有关单片机方面的内容,也提高了自己的动手能力,对自己的电子制作水平的提高起到了很大的作用。单片机温度计充分利用了DS18B20和AT89C51硬件结构的简洁性,使用四位数码管显示,准确性比较高,价格低廉而且具有广泛的应用。6、附录仿真实验图1、仿真电路2、单片机最小系统3、DS18B20传感器电路4、数码管电路5、仿真结果举例7、参考文献【1】 李群芳,肖看 单片机原理接口与应用 北京:清华大学出版社【2】 谭浩强 C语言程序设计第二版 清华大学出版社【3】 8051系列C程序设计完全手册出版专心-专注-专业