51单片机温度传感器课程设计_第1页
51单片机温度传感器课程设计_第2页
51单片机温度传感器课程设计_第3页
51单片机温度传感器课程设计_第4页
51单片机温度传感器课程设计_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于单片机的温度传感器课程设计报告随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它 所给人带来的方便也是不可否定的,其中温度传感器就是一个典型的例子,但 人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便 的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发 展。本设计所介绍的温度传感器与传统的温度计相比,具有读数方便,测温范 围广,测温准确,其输出温 度采用数 字显示,该 设计控制器使用单 片机stc89s52测温传感器使用ds18b20用lcd实现温度显示,能准确达到以上要 求。随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科

2、研,各 个领域,已经成为一种比较成熟的技术,本文将介绍一种基于单片机控制的温度 传感器。关键词:单片机,数字控制,温度传感器1 .温度传感器设计内容1.1 传感器三个发展阶段一是模拟集成温度传感器。该传感器是采用硅半导体集成工艺制成,因此亦称硅传感器或单片集成温度传感器。此种彳感器具有功能单一(仅测量温度)、测温误差小、价格低、响应速度快、传输距离远、体积小、微功耗等特点,适合远距离测温、控温,不需要进行非线性校准,且外围电路简单。它是目前在国内外应用最为普遍的一种集成传感器,典型产品有ad59r ad592、tmp17 lm135等。二是模拟集成温度控制器。模拟集成温度控制器主要包括温控开关

3、、可编程温度控制器,典型产品有 lm56 ad22105和max6509某些增强型集成温度控制器(例如tc652/653)中还包含了 a/d转换器以及固化好的程序,这与智能温度传感器有某些相似之处。但它自成系统,工作时并不受微处理器的控制,这是二者的主要区别。三是智能温度传感器。智能温度传感器内部都包含温度传感器、a/d转换器、信号处理器、存储器(或寄存器)和接口电路。有的产品还带多路选择器、 中央控制器(cpu)、随机存取存储器(ram和只读存储器(rom)智能温度传感器的特点是能输出温度数据及相关的温度控制量,适配各种微控制器(mcu);并且它是在硬件的基础上通过软件来实现测试功能的,当然

4、,其智能化程度也取决 于软件的开发水平。1.2 设计目的通过基于mcs-51系列单片机at89c51和ds18b2w度传感器检测温度,熟 悉芯片的使用,温度传感器的功能,数码显示管的使用,汇编语言的设计;并 且把我们这两年所学的数字和模拟电子技术、检测技术、单片机应用等知识, 通过理论联系实际,从题目分析、电路设计调试、程序编制调试到传感器的选 定等这一完整的实验过程,培养了学生正确的设计思想,使学生充分发挥主观 能动性,去独立解决实际问题,以达到提升学生的综合能力、动手能力、文献 资料查阅能力的作用,为毕业设计和以后工作打下一个良好的基础。1.3 设计任务和要求以mcs-52系列单片机为核心

5、器件,组成一个温度传感器,采用数字温度传感器ds18b20为检测器件,进行单点温度测,检测精度为士0.5摄氏度。温度显示采用lcd1602显示,两位整数,一位小数。2 .设计思路与总体框图.采用at89s52单片机作为控制核心对温度传感器ds18b20控制,读取温度信号并进行计算处理,并送到液晶显示器lcd1602显示。 按照系统设计功能的要求,确定系统由3个模块组成:主控制器、测温电路和显示电路。21温度传感器原理图lcd1lm016l7b 8 5 4 3 2 1 0ew sr eev ddv ssv_£c1t卜22pfc2c3ib10uf口 :1r1-l.ix112m1918u1

6、2930-3t1_工3"56 7-8-1xtal1p0.0/ad0p0.1/ad1p0.2/ad2xtal2p0.3/ad3p0.4/ad4p0.5/ad5p0.6/ad6rstp0.7/ad7p2.0/a8p2.1/a9p2.2/a10psenp2.3/a11alep2.4/a12eap2.5/a13p2.6/a14p2.7/a15p1.0p3.0/rxdp1.1p3.1/txdp1.2p3.2/int0-p1.3p3.3/inttp1.4p3.4/t0p1.5p3.5/t1p1.6p3.6/wr-p1.7p3.7/rd-393837363534333221 "2&quo

7、t; 12t -24 f ,26 27 12810, 111211314151 1617u2r2 4.7k321rp1123456789respack-8at89c51图1 仿真电路图ds18b20vcc dq gnd pcb版图3.温度传感器详细设计3.1管脚电路图t2jf1.0cw 40 vcc(12 ex)23qj po d (adc)f1.2c338 pd1 (adif13匚437 po.2 (ad2)pmd636 fc 3 iad3iim0sljp1.5ce35qpt 4.a.c4j匚7m pc5iad5j(sck)f1.7e333 pc e lawirst匚;32jfc7'

8、a.l!7:|1031 ez.'l'ff(txd) p9.1 匚11口 ij_e,=r3gjrin)ps j 匚12困 p££k;ttn:,f3.3e, j281p27(a1jtc尸3月匚1427 p2ciawi:tt)f3-5c1920 p2s ia15<wr) p3-sc10二 5 p2 4.a1;:f3ip3.7c1724 p2 5 ia11xtal2cia23 p2z iaioxtal* 匚iq2: p2 1 4?gndc2021 p: ci a3;图 2 at89s52管脚封装3.2主要特性与mcs-51 兼容 4k字节可编程闪烁存储器寿命:

9、1000写/擦循环 数据保留时间:10年 全静态工作:0hz-24hz-三级程序存储器锁定 128*8位内部ram - 32可编程i/o线 两个16位定时器/计数器 5个中断源 可编程串行通道 低功耗的闲置和掉电模式片内振荡器和时钟电路3.3管脚说明p0 口: p0 口为一个8位漏级开路双向i/o 口,每脚可吸收 8ttl门电流。当 p1 口的管脚第 一次写1时,被定义为高阻输入。p0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在 fiash编程时,p0 口作为原码输入口,当fiash进行校验时,p0输出原码,此时p0外部必须被拉高。p1 口: p1 口是一个内部提供上拉电阻

10、的8位双向i/o 口,p1 口缓冲器能接收输出 4ttl门电流。p1 口管脚写入1后,被内部上拉为高,可用作输入,p1 口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在flash编程和校验时,p1 口作为第八位地址接收。p2 口: p2 口为一个内部上拉电阻的8位双向i/o 口,p2 口缓冲器可接收,输出 4个ttl门电流,当 p2 口被写“ 1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入 时,p2 口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。p2 口当用于外部程序存储器或16位地址外部数据存储器进行存取时,p2 口输出地址的高八位。在给出地址“1”时,

11、它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,p2 口输出其特殊功能寄存器的内容。p2 口在flash编程和校验时接收高八位地址信号和控制信号。p3 口: p3 口管脚是8个带内部上拉电阻的双向i/o 口,可接收输出 4个ttl门电流。当p3 口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,p3 口将输出电流(ill )这是由于上拉的缘故。p3 口也可作为at89c51的一些特殊功能口,如下表所示: 口管脚 备选功 能 p3.0 rxd (串行 输入口)p3.1 txd (串 行输出口) p3.2 /int0 (外部中断0)p3.3 /int1

12、(外部中断1)p3.4 t0 (记时器0外部输入)p3.5 t1 (记时器1外部输入)p3.6 /wr (外部数据存储器写选通)p3.7 /rd (外部数据存储器读选通)p3 口同时为闪烁编程和编程校验接收一些控制信号rst复位输入。当振荡器复位器件时,要保持rst脚两个机器周期的高电平时间。ale/prog当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在flash编程期间,此引脚用于输入编程脉冲。在平时,ale端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6 o因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个al

13、e脉冲。如想禁止 ale的输出可在 sfr8eh地址上置0。此时,ale只有在执行 movx movc指令是ale才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ale禁止,置位无效。/psen:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/psen有效。但在访问外部数据存储器时,这两次有效的/psen信号将不出现。/ea/vpp:当/ea保持低电平时,则在此期间外部程序存储器(0000h-ffffh),不管是否有内部程序存储器。注意加密方式1时,/ea将内部锁定为 reset当/ea端保持高电平时,此间内部程序存储器。在flash编程期间,此引脚也用于施

14、加12v编程电源(vpp)。xtal1 :反向振荡放大器的输入及内部时钟工作电路的输入。xtal2:来自反向振荡器的输出。4.温度传感器模块图3 ds18b20 相关资料4.1ds18b20原理与分析ds18b2妙美国dallas导体公司继 ds1820之后最新推出的一种改进型智能温度传感器。与传统的热敏电阻相比,它能够直接读出被测温度并且可根据实际要求通过简单的编程实现912位的数字值读数方式。可以分别在93.75 ms和750 ms内完成9位和12位的数字量,并且从 ds18b20s出的信息或写入ds18b20i勺信息仅需要一根口线(单线接口)读写,温度变换功率来源于数据总线,总线本身也可

15、以向所挂接的ds18b20供电,而无需额外电源。因而使用ds18b20可使系统结构更趋简单,可靠性更高。他在测温精度、转换时间、传输距离、分辨率等方面较 ds1820e了很大的改进,给用户带来了更方便的使用和更令人满意的效果。以下是ds18b20勺特点:(1)独特的单线接口方式:ds18b25微处理器连接时仅需要一条口线即可实现微处理器与ds18b20的双向通讯。(2)在使用中不需要任何外围元件。(3)可用数据线供电,电压范围:+3.0+5.5 v 。(4)测温范围:-55 - +125 c。固有测温分辨率为0.5 c。 (5)通过编程可实现9-12位的数字读数方式。(6)用户可自设定非易失性

16、的报警上下限值。(7)支持多点组网功能,多个 ds18b20可以并联在惟一的三线上,实现多点测温。(8)负压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。ds18b20的测温原理是这这样的,器件中低温度系数晶振的振荡频率受温度的影响很小,用 于产生固定频率的脉冲信号送给减法计数器1;高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。器件中还有一个计数门,当计数门打开时,ds18b20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55 c所对应的一个基数分别置入减法计数器

17、1、温度寄存器中,计数器1和温度寄存器被预置在-55 c所对应的一个基数值。减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时,温度寄存器的值将加1 ,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到0时,停止温 度寄存器的累加,此时温度寄存器中的数值就是所测温度值。其输出用于修正减法计数器的预 置值,只要计数器门仍未关闭就重复上述过程,直到温度寄存器值大致被测温度值。温度/ c二进制表小十六进制表小+1250000 0111 1101000007d0h+850000 0101 0101

18、00000550h+25.06250000 0001 100100000191h+10.1250000 0000 1010 000100a2h+0.50000 0000 000000100008h00000 0000 000010000000h-0.51111 1111 1111 0000fff8h-10.1251111 1111 01011110ff5eh-25.06251111 1110 01101111fe6fh-551111 1100 1001 0000fc90h图4一部分温度对应值表另外,由于 ds18b20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对 d

19、s18b20的各种操作按协议进行。操作协议为:初使化ds18b20 (发复位脉冲)-发rom能命令-发存储器操作命令-处理数据。4.2 ds18b20温度传感器与单片机的接口电路ds18b20可以采用两种方式供电,一种是采用电源供电方式,此时 ds18b20的1脚接地,2脚作为信号线,3脚接电源。另一种是寄生电源供电方式,如图 4所示单片机端口接单线总线,为保证在有效的 ds18b20时钟周期内提供足够的电流,可用一个mosfet1来完成对总线的上拉。当ds18b20处于写存储器操作和温度a/d转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。采用寄生电源供电方式时vdd端接地。由

20、于单线制只有一根线,因此发送接口必须是三态的。由于ds18b20是在一根i/o线上读写数据,因此,对读写的数据位有着严格的时序要求。ds18b20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线 器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总 线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是 低位在先。5 .软件设计系统程序主要包括主程序、读出温度子程序、温度转换子程序、计算温度子程序、显示等等。5.1 主程序主要功能是完成 ds

21、18b20的初始化工作,并进行读温度,将温度转化成为压缩bcm 并在显示器上显示传感器所测得的实际温度。5.2 读出温度子程序读出温度子程序的主要功能是读出ram中的9字节,在读出时需要进行crc校验,校验有错时不进行温度数据的改写。其程序流程图1如下图所示。图5 程序流程图 112位分辩率时转换时间约为5.3 温度转换命令子程序温度转换命令子程序主要是发温度转换开始命令,当采用750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。流程图图2如下图6 程序流程图 25.4 计算温度子程序计算温度子程序将 ram中读取值进行 bcd码的转换运算,并进行温度值正负的判定。流程图3如下:图

22、7 程序流程图 36 .完整程序如下:#include <reg52.h>#include <intrins.h>typedef unsigned char uint8;#define uint unsigned int#define uchar unsigned charsbit dq = p3a3;/定义 dq脚为 p3.3百位uchar code bw10= 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39;/编码codeucharxsw16=0x30,0x31,0x31,0x32,0x33,0x33,0x34,0

23、x34,0x35,0x36,0x36,0x37,0x38,0x38,0x39 ,0x39;/ 小数位编码sbit rs = p2a0 ;sbit rw = p2a1 ;sbit en = p2a2 ;sbit busy = p0a7;uchar wendu;uchar temp_g,temp_d;unsigned char code wordl尸"temperature:"void delay(uint xms) uint i,j;for(i=xms;i>0;-i) for(j=110;j>0;-j);,然后每次计void delayus(int t) / 在1

24、1.059mhz的晶振条件下调用本函数需要24 as数需16 as int s;for (s=0; s<t;s+);/等待繁忙标志void wait(void)p0 = 0xff; do rs = 0;rw = 1;en = 0;en = 1;while (busy = 1);en = 0;/写数据void w_dat(uint8 dat)wait();en = 0;p0 = dat;rs = 1;rw = 0;en = 1;en = 0;/写命令void w_cmd(uint8 cmd)wait();en = 0;p0 = cmd;rs = 0;rw = 0;en = 1;en = 0

25、;/发送字符串到 lcdvoid w_string(uint8 addr_start, uint8 *p)w_cmd(addr_start);while (*p != '0')w_dat(*p+);/初始化1602void init_lcd1602(void)w_cmd(0x38); / 16*2 显示,5*7 点阵,8 位数据接口w_cmd(0x0c); /显示器开、光标开、光标允许闪烁w_cmd(0x06); /文字不动,光标自动右移w_cmd(0x01); /清屏uchar reset()/完成单总线的复位操作。uchar d;dq = 0;/将dq线拉低delayus(

26、29);/保持480 s .复位时间为 480心s,因此延时时间为 (480-24)/16=28.5 ,取 29 心 s。dq = 1;delayus(3);/ dq返回高电平/等待存在脉冲.经过70 as之后检测存在脉冲,因此延时时间为(70-24)/16 = 2.875d = dq;delayus(25);return(d);,取3/p, s o获得存在信号等待时间隙结束返回存在信号,0 =器件存在,1 = 无器件void write_bit(uchar bitval)/向单总线写入1 位值:bitvaldq = 0;/将dq拉低开始写时间隙if(bitval=1)dq =1;/如果写1,

27、 dq返回高电平delayus(5);/ 在时间隙内保持电平值,dq = 1;/ delayus函数每次循环延时16 s,因此 delayus(5)=5*16+24=104 svoid ds18write_byte(char val)/向单总线写入一个字节值:valuchar i;uchar temp;for (i=0; i<8; i+)/写入字节,每次写入一位temp = val>>i;temp &= 0x01;write_bit(temp);delayus(5);uchar read_bit()/从单总线上读取一位信号,所需延时时间为15 as,因此无法调用前面定

28、义的delayus()函数,而采用一个for()循环来实现延时。uchar i;dq = 0;/将dq拉低开始读时间隙dq = 1;/然后返回高电平for (i=0; i<3; i+);/延时15asreturn(dq);/返回dq线上的电平值uchar ds18read_byte()/从单总线读取一个字节的值uchar i;uchar value = 0;for (i=0;i<8;i+)/读取字节,每次读取一个字节if(read_bit()value|=0x01<<i;/然后将其左移delayus(6);return(value);int readtemperatur

29、e()/如果单总线节点上只有一个器件则可以直接掉用本函数。如果节点上有多个器件,为了避免数据冲突,应使用 match rom函数来选中特定器件。uchar temp_d,temp_g,k,get2,temp;reset();/跳过rom/启动温度转换/跳过rom/读暂存器ds18write_byte(0xcc);ds18write_byte(0x44);delayus(5);reset();ds18write_byte(0xcc);ds18write_byte(0xbe);for (k=0;k<2;k+)getk=ds18read_byte();temp_d = get0;/ 低位temp_g = get1;/高位if(temp_g&0xf0)=0xf0) /正负号判断temp_d=temp_d;if(temp_d=0xff) /保证-48 ( 1111110100000000 )、-32 和-16 显示正常temp_d=temp_d+0x01;/00000000temp_g=temp_g;/00000010temp_g=temp_g+0x01;/00000011else temp_d=temp_d+

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论