




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目 录一、设计任务与设计要求2二、设计原理22.1 主要硬件介绍22.1.1 DS18B20数字温度传感器22.1.2 AT89C51单片机芯片42.2 系统原理结构4三、设计方案53.1 硬件部分53.1.1 温度测量模块53.1.2 LED数码管显示模块53.1.3 按键模块63.1.4 系统整体结构仿真图63.2 软件部分63.2.1DS18B20传感器程序63.2.2键盘读取及确认程序83.2.3DS18B20操作流程图9四、调试与性能分析104.1 proteus仿真结果104.2实物测试104.2.1正常情况104.2.2报警状态11五、心得体会11六、成品展示12七、附录部分13
2、附件一、电路设计原理图13附件二、系统设计原始代码程序14一、 设计任务与设计要求本设计主要利用单片机AT89C51 芯片和以美国MAXIM/DALLAS半导体公司的单总线温度传感器DS18B20相结合来实现装置周围温度的采集,其中以单片机AT89C51 芯片为核心,辅以温度传感器DS18B20和LED数码管及必要的外围电路,构成一个结构简单、测温准确、具有一定控制功能的温度监视警报装系统。功能要求:添加温度报警功能,通过4个按键来设置温度的上下限值,当用DS18B20测得的温度不在所设置的温度范围内,蜂鸣器开始鸣报。二、 设计原理2.1 主要硬件介绍2.1.1 DS18B20数字温度传感器D
3、S18B20 数字温度传感器提供912 位摄氏温度的测量,拥有非易失性用户可编程最高与最低触发点告警功能。DS18B20 通过单总线实现通信,单总线通常是DS18B20 连接到中央微控制器的一条数据线(和地)。它能够感应温度的范围为-55+125,在-10+85的测量的精度是±0.5,而且DS18B20 可以直接从数据线上获取供电(寄生电源)而不需要一个额外的外部电源。DS18B20 使用DALLAS 独有的单总线(1wire)协议使得总线通信只需要一根控制线,控制线需要一个较小的上拉电阻,因为所有的期间都是通过三态或开路端口连接在总线上的(DS18B20 是这种情况)。在这种总线系
4、统中,微控制器(主器件)识别和寻址挂接在总线上具有独特64 位序列号的器件。因为每个器件拥有独特的序列号,因此挂接到总线上的器件在理论上是不受限制的,单总线(1-wire)协议包括指令的详细解释和“时隙”。这个数据表包含在单总线系统(1-WIRE BUS SYSTEM)部分。DS18B20 的另外一个特征是能够在没有外部供电的情况下工作。当总线为高的时候,电源有上拉电阻通过DQ 引脚提供,高总线信号给内部电容(Cpp)充电,这就使得总线为的时候给器件提供电源,这种从单总线上移除电源的方法跟寄生电源有关,作为一种选择,DS8B20 也可以采用引脚VDD 通过外部电源给器件供电。DS18B20 引
5、脚定义:(1) GND为电源地;(2) DQ为数字信号输入/输出端;(3)VDD 为外接供电电源输入端(在寄生电源接线方式时接地)图2.1.1 DS18B20 引脚排列图DS18B20温度测量图2.1.2 DS18B20 测温原理框图DS18B20 测温原理如图2.1.2所示。图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2 的脉冲输入。计数器1 和温度寄存器被预置在55所对应的一个基数值。计数器1 对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1 的预置值减到0 时,温度寄存器的值将加
6、1,计数器1 的预置将重新被装入,计数器1 重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2 计数到0 时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图2.1.2 中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1 的预置值。DS18B20工作时序DS18B20需要严格的单总线协议以确保数据的完整性。协议包括集中单总线信号类型:复位脉冲、存在脉冲、写0、写1、读0 和读1。所有这些信号,除存在脉冲外,都是由总线控制器发出的。 和DS18B20间的任何通讯都需要以初始化序列开始。一个复位脉冲跟着一个存在脉冲表明DS18B20已经准备好发送
7、和接收数据。在初始化序列期间,总线控制器拉低总线并保持480us以发出(TX)一个复位脉冲,然后释放总线,进入接收状态(RX)。单总线由5K上拉电阻拉到高电平。当DS18B20探测到I/O引脚上的上升沿后,等待15-60us,然后发出一个由60-240us低电平信号构成的存在脉冲DS18B20的数据读写是通过时序处理位来确认信息交换的。 有两种写时序:写1时序和写0时序。总线控制器通过写1时序写逻辑1到DS18B20,写0时序写逻辑0到DS18B20。所有写时序必须最少持续60us,包括两个写周期之间至少1us的恢复时间。当总线控制器把数据线从逻辑高电平拉到低电平的时候,写时序开始。 总线控制
8、器要生产一个写时序,必须把数据线拉到低电平然后释放,在写时序开始后的15us释放总线。当总线被释放的时候,5K的上拉电阻将拉高总线。总控制器要生成一个写0时序,必须把数据线拉到低电平并持续保持(至少60us)。 总线控制器初始化写时序后,DS18B20在一个15us到60us的窗口内对I/O线采样。如果线上是高电平,就是写1。如果线上是低电平,就是写0。 总线控制器发起读时序时,DS18B20仅被用来传输数据给控制器。因此,总线控制器在发出读暂存器指令BEh或读电源模式指令B4H后必须立刻开始读时序,DS18B20可以提供请求信息。除此之外,总线控制器在发出发送温度转换指令44h或召回EEPR
9、OM指令B8h之后读时序。 所有读时序必须最少60us,包括两个读周期间至少1us的恢复时间。当总线控制器把数据线从高电平拉到低电平时,读时序开始,数据线必须至少保持1us,然后总线被释放在总线控制器发出读时序后,DS18B20 通过拉高或拉低总线上来传输1或0。当传输逻辑0结束后,总线将被释放,通过上拉电阻回到上升沿状态。从DS18B20输出的数据在读时序的下降沿出现后15us 内有效。因此,总线控制器在读时序开始后必须停止把I/O脚驱动为低电平15us,以读取I/O脚状态。2.1.2 AT89C51单片机芯片AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含4
10、k bytes的可反复擦写的只读程序存储器(PEROM)和128 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大AT89C51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。ATC9C51的引脚排列图如图2.1.3。主要参数如下: ·与MCS-51产品指令系统完全兼容 ·4k字节可重擦写Flash闪速存储器 ·1000次擦写周期 ·全静态操作:0Hz24MHz ·三级加密程序存储器 &
11、#183;128×8字节内部RAM ·32个可编程IO口线 ·2个16位定时计数器 ·6个中断源 ·可编程串行UART通道 ·低功耗空闲和掉电模 图2.1.3 AT89C51的引脚排列2.2 系统原理结构系统主要由硬件和软件两大部分构成,当接收到系统发出的温度转换命令后, DS18B20开始进行温度转换操作并把转化后的结果放到16 位暂存寄存器中的温度寄存器内,然后与系统进行数据通信,系统将温度读出并驱动LED数码管显示当前温度。如果温度值低于设定下限值或高于设定上限值,则自动启动报警装置。由于DS18B20单总线通信功能是分时完成的
12、,它有严格的时隙概念,因此读写时序很重要。该系统整体原理结构图如下:电源LED温度显示DS18B20AT89C51º蜂鸣器下限+键上限-键下限-键上限+键图2.2.4 系统结构原理图三、 设计方案3.1 硬件部分3.1.1 温度测量模块温度测量传感器采用DALLAS公司DS18B20的单总线数字化温度传感器测温范围为-55125,可编程为9位12位A/D转换精度,测温分辨率达到0.0625,采用寄生电源工作方式,CPU只需一根口线便能与DS18B20通信,占用CPU口线少,可节省大量引线和逻辑电路,接口电路如图3.1.1所示。 图3.1.1 DS18B20温度测量模块3.1.2 LE
13、D数码管显示模块采用LED作为显示器,尽可能的把温度等信息通过LED显示出来,速率比较快,显示更直观。图3.1.4 LCD1602显示模块3.1.3 按键模块方案一:矩阵键盘如果选择此方案,那么在修改温度上下限或其他功能键就可以直接从键盘输入,方便、快捷。缺点也很明显,一是浪费按键,用全键盘来实现功能不免大材小用;二是从实用性考虑,全键盘体积大,不经济不方便。 方案二:独立式按键如果设置过多按键,将会占用较多I/O口,而且会给布线带来不便,同时浪费按键,不高效,程序繁琐。本次设计适用于按键较少的情况。为了尽量实现按键的高效性,此次设计采用四个独立式按键,分别定义为key1(上限温度加数键)、k
14、ey2(上限温度减数键)、key3(下限温度加数键)、key4(下限温度减数键)。3.1.4 系统整体结构仿真图图3.1.6 系统整体结构仿真图3.2 软件部分3.2.1DS18B20传感器程序(1)DS18B20初始化函数void rst_ds18b20(void) DQ=1;Delay_18b20(4);DQ=0; Delay_18b20(100); DQ=1; Delay_18b20(40);(2)读取DS18B20数据函数uchar read_ds18b20(void) uchar i=0; uchar dat=0; for(i=8;i>0;i-) DQ=0; dat>&g
15、t;=1; DQ=1; if(DQ) dat|=0x80; Delay_18b20(10); return(dat);(2)向DS18B20中写入数据函数void write_ds18b20(uchar wdata) uchar i=0; for(i=8;i>0;i-) DQ=0; DQ=wdata&0x01; Delay_18b20(10); DQ=1; wdata>>=1; (3)读取温度值并转换函数void read_ds18b20_temp(void) uchar a,b; rst_ds18b20(); write_ds18b20(0xcc); / 跳过读序号
16、列号的操作 write_ds18b20(0x44); / 启动温度转换 rst_ds18b20(); write_ds18b20(0xcc); write_ds18b20(0xbe); /读取温度寄存器等(共可读9个寄存器) a=read_ds18b20(); b=read_ds18b20(); tvalue=b; tvalue<<=8; tvalue=tvalue|a; tvalue=tvalue*(0.625);(4)温度显示函数void Display_ds18b20() dispbuf7=Tbottom/100;dispbuf6=Tbottom%100/10;dispbuf
17、5=16;dispbuf4=tvalue/100; dispbuf3=tvalue%100/10;dispbuf2=16;dispbuf1=Ttop/100;dispbuf0=Ttop%100/10;3.2.2键盘读取及确认程序(1)键盘消抖函数void keyscan() uchar temp=0; /临时变量if(keytemp!=0xff) temp=keytemp; if(temp=0) keyup=1; /按键已经放开 keyback=0; /清除按键备份值keyval=0;else if(temp=keyback&&keyup=1) /两次的检测的值一样且按键已经放
18、开 keyval=temp; /存放按键值keyup=0;else /按键已经执行且还没放开keyback=temp; /把新的键值放入备份单元 (2)设置key1、key2为上限调节键,设置key3、key4为下限调节键void Key_job() keyscan();switch(keyval) case 0x7f: if(flag=1)Ttop+=10;flag=0;break;case 0xb7: if(flag=1)Ttop-=10;flag=0;break;case 0xcf: if(flag=1)Tbottom+=10;flag=0;break;case 0xdf: if(fla
19、g=1)Tbottom-=10;flag=0;break;default:flag=1;break;3.2.3DS18B20操作流程图开始初始化DS18B20读DS18B20序列号检测DS18B20存在?NY发送跳过ROM指令温度转换初始化DS18B20发送DS18B20编码读取温度数据图3.2.1 DS18B20操作流程图四、 调试与性能分析4.1 proteus仿真结果图4.1.1 系统proteus仿真结果如图所示,点击开始运行仿真时, LED数码管上从左到右分别显示设置温度下限为10度,中间显示DS18B02温度传感器采集温度为15度,右侧显示设置温度上限为20度。其中上限与下限值可通
20、过按键更改。 4.2实物测试4.2.1正常情况图4.2.1 温度正常时显示情况如图所示,此时温度报警下限为5度,上限为17度,而DS18B02温度传感器采集温度为13度,处于设定温度上下限之间,蜂鸣器未报警,系统工作正常。4.2.2报警状态图4.2.2温度高于上限时显示情况如图所示,此时温度报警下限为5度,上限为11度,而DS18B02温度传感器采集温度为13度,高于设定的上限温度,蜂鸣器报警,系统工作正常。五、 心得体会在老师的指导和同学的帮助下,经过不懈的努力,终于成功完成了此次设计任务,基本实现设计要求,读出并显示DS18B20采集的温度,能够在温度超过限定温度是通过蜂鸣器报警,并且可以
21、实现通过按键设置温度上下限。但是系统还存在许多可以改进的地方、还有许多可以扩展的功能比如用LCD液晶显示器更精确清除的显示温度和警报信息等。通过这次独立的系统设计经验,我加深了对单片机理论的理解,学会如何将理论应用到实践,我还明白了在设计前,要有一个清晰的思路和一套高效的设计实施方案,在设计过程中要严格按照既定大的方案执行,才不会在过程中出现混乱,比如设计的程序功能与硬件设备不符等情况。最后,我认识到不管做什么设计,都要有坚实的理论知识作基础,其次要提高我们自己的创新思维及动手能力,希望以后通过更努力的学习和锻炼让自己获得更大的能力提升。六、 成品展示七、 附录部分附件一、电路设计原理图设计电
22、路原理图附件二、系统设计原始代码程序/* DS18B20监测警报 作者:XXX 班级:XXXXXXXXXXX功能如下:实现基本测温功能通过四个按键,可设置高低限温度,不在所设定温度范围内,将蜂鸣器和屏幕显示报警*/#include <reg52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char sbit LEDCLK=P34; sbit LEDDIN=P23; sbit Key_Input=P10; sbit DQ=P32; sbit sound=P12;uchar
23、 code ledtable=0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F, 0x01,0x09,0x11,0xC1,0x63,0x85,0x61,0x71,0xfd; uchar dispbuf8; uchar keytemp=0; /定义且给扫描键值赋初始值0 uchar keyval=0; /定义且给键值赋初始值0uchar keyback; /定义一个备份键值bit keyup; /定义一个按键值uint Ttop=150;uint Tbottom=50;uint tvalue;uchar flag;void Delayms(uint i) /延时函数
24、uint j;for(;i>0;i-)for(j=123;j>0;j-);void Delay_18b20(uint i) while(i-);void Read_Key()keytemp<<=1;if(Key_Input)keytemp+;void keyscan()if(keytemp=0xff)keyup=1;keyback=0;keyval=0;flag=1;else if(keytemp=keyback&&keyup=1) keyval=keytemp; keyup=0; keyback=0;else keyback=keytemp; void
25、 Key_job() /读取键值keyscan();switch(keyval) case 0x7f: if(flag=1)Ttop+=10;flag=0;break;case 0xb7: if(flag=1)Ttop-=10;flag=0;break;case 0xcf: if(flag=1)Tbottom+=10;flag=0;break;case 0xdf: if(flag=1)Tbottom-=10;flag=0;break;default:flag=1;break;void rst_ds18b20(void) /DS18B20初始及设置函数 DQ=1;Delay_18b20(4);D
26、Q=0; Delay_18b20(100); DQ=1; Delay_18b20(40);uchar read_ds18b20(void) uchar i=0; uchar dat=0; for(i=8;i>0;i-) DQ=0; dat>>=1; DQ=1; if(DQ) dat|=0x80; Delay_18b20(10); return(dat);void write_ds18b20(uchar wdata) /向DS18B20中写入数据 uchar i=0; for(i=8;i>0;i-) DQ=0; DQ=wdata&0x01; Delay_18b20(10); DQ=1; wdata>>=1; void read_ds18b20_temp(void) /读取温度值 uchar a,b; rst_ds18b20(); write_ds18b20(0xcc); write_ds18b20(0x44); rst_ds
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论