当前位置:首页 > 天气预报 > 正文

温度传感器设计(基于ds18b20温度传感器设计)

使用温度传感器DS18B20设计一温控系统,当温度超过35度或低于20度时,LED红灯闪烁,蜂鸣器发出报警声。//这是我曾经做的一个温度控制系统,可以调节上下限温度,低于下限温度启动加热,高于上限停止加热。

使用温度传感器DS18B20设计一温控系统,当温度超过35度或低于20度时,LED红灯闪烁,蜂鸣器发出报警声。

温度传感器设计(基于ds18b20温度传感器设计)

//这是我曾经做的一个温度控制系统,可以调节上下限温度,低于下限温度启动加热,高于上限停止加热。

//温控系统控制程序

//版本号:V1.0;2015.6.19

//温度传感器:DS18B20

//显示方式:LED

#include reg51.h

#define uchar unsigned char

sbit keyup=P1^0;

sbit keydn=P1^1;

sbit keymd=P1^2;

sbit out=P3^7; //接控制继电器

sbit DQ = P3^4;   //接温度传感器18B20

uchar t[2],number=0,*pt;    //温度值

uchar  TempBuffer1[4]={0,0,0,0};

uchar Tmax=18,Tmin=8;

uchar distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff,0xfe,0xf7};

uchar dismod=0,xiaodou1=0,xiaodou2=0,currtemp;

bit flag;

void t0isr() interrupt 1

{

 TH0=(65536-5000)/256;

 TL0=(65536-5000)%256;

 switch(number)

 {

  case 0:

       P2=0x08;

        P0=distab[TempBuffer1[0]];

        break;

  case 1:

       P2=0x04;

        P0=distab[TempBuffer1[1]];

        break;

  case 2:

       P2=0x02;

        P0=distab[TempBuffer1[2]]0x7f;

        break;

  case 3:

       P2=0x01;

        P0=distab[TempBuffer1[3]];

        break;

  default:

       break;

 }

 number++;

 if(number3)number=0;

}

void delay_18B20(unsigned int i)

{

 while(i--);

}

/**********ds18b20初始化函数**********************/

void Init_DS18B20(void)

{

  bit x=0;

 do{

  DQ=1;

  delay_18B20(8);

  DQ = 0;          //单片机将DQ拉低

  delay_18B20(90); //精确延时 大于 480us

  DQ = 1;          //拉高总线

  delay_18B20(14);

  x=DQ;            //稍做延时后 如果x=0则初始化成功 x=1则初始化失败,继续初始化

 }while(x);

  delay_18B20(20);

}

/***********ds18b20读一个字节**************/

unsigned char ReadOneChar(void)

{

 unsigned char i=0;

 unsigned char dat = 0;

 for (i=8;i0;i--)

  {

    DQ = 0; // 给脉冲信号

    dat=1;

    DQ = 1; // 给脉冲信号

    if(DQ)

    dat|=0x80;

    delay_18B20(4);

  }

  return(dat);

}

/*************ds18b20写一个字节****************/

void WriteOneChar(unsigned char dat)

{

  unsigned char i=0;

  for (i=8; i0; i--)

  {

   DQ = 0;

   DQ = dat0x01;

    delay_18B20(5);

   DQ = 1;

    dat=1;

 }

}

/**************读取ds18b20当前温度************/

unsigned char *ReadTemperature(unsigned char rs)

{

 unsigned char tt[2];

  delay_18B20(80); 

 Init_DS18B20();

 WriteOneChar(0xCC);   //跳过读序号列号的操作

 WriteOneChar(0x44);  //启动温度转换

  delay_18B20(80); 

 Init_DS18B20();

 WriteOneChar(0xCC);  //跳过读序号列号的操作

 WriteOneChar(0xBE);  //读取温度寄存器等(共可读9个寄存器)前两个就是温度

 tt[0]=ReadOneChar();  //读取温度值低位

 tt[1]=ReadOneChar();  //读取温度值高位

 return(tt);

}

void covert1(void) //将温度转换为LED显示的数据

{

   uchar x=0x00,y=0x00;

   t[0]=*pt;

   pt++;

   t[1]=*pt;

   if(t[1]0x080)      //判断正负温度

   {

    TempBuffer1[0]=0x0c;      //c代表负

  t[1]=~t[1];    /*下面几句把负数的补码*/

  t[0]=~t[0];    /*换算成绝对值*********/

  x=t[0]+1;

  t[0]=x;

  if(x==0x00)t[1]++;

   }

  else TempBuffer1[0]=0x0a; //A代表正

  t[1]=4;  //将高字节左移4位

  t[1]=t[1]0xf0;

  x=t[0];     //将t[0]暂存到X,因为取小数部分还要用到它

  x=4;     //右移4位

  x=x0x0f;     //和前面两句就是取出t[0]的高四位 

  y=t[1]|x;   //将高低字节的有效值的整数部分拼成一个字节

  TempBuffer1[1]=(y%100)/10;

  TempBuffer1[2]=(y%100)%10;

  t[0]=t[0]0x0f; //小数部分

  TempBuffer1[3]=t[0]*10/16;

  //以下程序段消去随机误检查造成的误判,只有连续12次检测到温度超出限制才切换加热装置

 if(currtempTmin)xiaodou1=0;

 if(yTmin)

  {

   xiaodou1++;

   currtemp=y;

   xiaodou2=0;

  }

 if(xiaodou112)

  {

   out=0;

   flag=1;

   xiaodou1=0;

  }

 if(currtempTmax)xiaodou2=0;

 if(yTmax)

  {

   xiaodou2++;

   currtemp=y;

   xiaodou1=0;

  }

 if(xiaodou212)

  {

   out=1;

   flag=0;

   xiaodou2=0;

  }

 out=flag;

}

void convert(char tmp)

{

 uchar a;

 if(tmp0)

 {

  TempBuffer1[0]=0x0c;

  a=~tmp+1;

 }

 else

 {

  TempBuffer1[0]=0x0a;

  a=tmp;

 }

  TempBuffer1[1]=(a%100)/10;

  TempBuffer1[2]=(a%100)%10;

}

void keyscan( )

{

uchar keyin;

 keyin=P10x07;

 if(keyin==0x07)return;

 else if(keymd==0)

  {

   dismod++;

   dismod%=3;

   while(keymd==0);

   switch(dismod)

   {

    case 1:

         convert(Tmax);

          TempBuffer1[3]=0x11;

          break;

    case 2:

         convert(Tmin);

          TempBuffer1[3]=0x12;

          break;

    default:

         break;

   }

  }

 else if((keyup==0)(dismod==1))

  {

   Tmax++;

   convert(Tmax);

   while(keyup==0);

  }

 else if((keydn==0)(dismod==1))

  {

   Tmax--;

   convert(Tmax);

   while(keydn==0);

  }

 else if((keyup==0)(dismod==2))

  {

   Tmin++;

   convert(Tmin);

   while(keyup==0);

  }

 else if((keydn==0)(dismod==2))

  {

   Tmin--;

   convert(Tmin);

   while(keydn==0);

  }

 xiaodou1=0;

 xiaodou2=0;

}

main()

{

 TMOD=0x01;

 TH0=(65536-5000)/256;

 TL0=(65536-5000)%256;

 TR0=1;

 ET0=1;

 EA=1;

 out=1;

 flag=0;

 ReadTemperature(0x3f);

  delay_18B20(50000); //延时等待18B20数据稳定 

 while(1)

 {

  pt=ReadTemperature(0x7f); //读取温度,温度值存放在一个两个字节的数组中

  if(dismod==0)covert1();

  keyscan();

  delay_18B20(30000);

 }

}

温度传感器而做的电子温度计毕业论文

基于DS18B20温度传感器的数字温度计设计字数:9092,页数:26 论文编号:JD457 价格:120元基于DS18B20温度传感器的数字温度计设计摘要:本文介绍了一种基于DS18B20的数字温度计设计方案。方案利用AT89S52单片机控制DS18B20进行数据采集并由HS1602液晶显示模块显示结果,另外,采集结果可由RS-232-C接口送入计算机显示并存储。按键控制实现过界报警温度设定和实时监控,利用AT24C08芯片进行存储,实现温度测量存储与再现。

关键字:温度采集,存储再现,过界报警,串行通信

目 录

摘要.....................................................................1

关键字...................................................................1

1 引言...................................................................2

2 总体设计.................................................................2

2.1 方案论证..............................................................2

2.2 总体设计...............................................................3

3 硬件设计.................................................................3

3.1 单片机系统 .............................................................3

3.2 温度传感器模块...........................................................4

3.3 存储模块................................................................7

3.4 液晶显示模块 ............................................................9

3.5 串口通信模块............................................................11

3.6 电源模块 ...............................................................12

4 软件设计..................................................................13

4.1 主程序流程..............................................................13

4.2 DS18B20模块程序设计......................................................13

4.3 HS1602驱动程序设计.......................................................16

4.4 AT24C08存储模块程序设计...................................................18

4.5 RS-232-C串口通信模块程序设计..............................................19

5 测试及结果分析 .............................................................22

6 附录 ......................................................................23

7 参考资料...................................................................24以上回答来自:

温度传感器的原理

温度传感器的原理

温度传感器的原理,生活中我们很多的电子设备都是需要用到传感器的,传感器是一种检测装置,能感受到被测量的信息,并能将感受到的信息,以下分享温度传感器的原理是什么呢?

温度传感器的原理1

温度传感器工作原理是什么?

温度传感器是指能感受温度并转换成可用输出信号的传感器。温度传感器是温度测量仪表的核心部分,品种繁多。按测量方式可分为接触式和非接触式两大类,按照传感器材料及电子元件特性分为热电阻和热电偶两类。

电阻传感:金属随着温度变化,其电阻值也发生变化,对于不同金属来说,温度每变化一度,电阻值变化是不同的,而电阻值又可以直接作为输出信号。

1、正温度系数:

①温度升高=阻值增加

②温度降低=阻值减少

2、负温度系数:

①温度升高=阻值减少

②温度降低=阻值增加

地面温度传感器故障问题

有时所有的'温度传感器数据都异常或发生跳变,或者气温与地面温度、地面与浅层、深层地温直接的示数变化不太合理。比如夏季晴朗的中午气温与地面温度接近,或者地面与浅层、深层地温没有依次明显递减等。

疏松地温场容易造成地温数据异常,一是因为地温场疏松后土质松软造成地面和5cm地温传感器示数接近,二是在疏松地温场的过程中容易碰到传感器造成数据跳变明显。

地温经常出现的故障是一路地温或全部温度出现问题:地温值出现不连续的跳变;地温值偏低或偏高;地温值均为-24.6℃或维持某值长期不变。

温度传感器的原理2

温度传感器的工作原理

金属收缩原理设计的传感器:金属在环境温度变化后会产生一个适当的伸延,因此传感器可以以有所不同方式对这种反应展开信号切换。

双金属片式传感器:双金属片由两片有所不同膨胀系数的金属贴在一起而构成,随着温度变化,材料A比另外一种金属收缩程度要高,引发金属片倾斜。倾斜的曲率可以转换成一个输入信号。

双金属杆和金属管传感器:随着温度增高,金属管(材料A)长度减少,而不收缩钢杆(金属B)的长度并不减少,这样由于方位的转变,金属管的线性收缩就可以展开传送。反过来,这种线性收缩可以转换成一个输入信号。

液体和气体的变形曲线设计的传感器:在温度变化时,液体和气体同样会适当产生体积的变化。多种类型的结构可以把这种收缩的变化转换成方位的变化,这样产生方位的变化输入(电位计、感应器偏差、挡流板等等)。

电阻传感器:金属随着温度变化,其电阻值也发生变化。对于有所不同金属来说,温度每变化一度,电阻值变化是有所不同的,而电阻值又可以必要作为输入信号。

热电偶传感器:热电偶由两个有所不同材料的金属线构成,在末端焊在一起。对这个连接点冷却,在它们不冷却的部位就会经常出现电位差。这个电位差的数值与不冷却部位测量点的温度有关,和这两种导体的材质有关。

温度传感器的原理3

中国传感器最好的公司排名

歌尔微电子股份有限公司

歌尔微电子成立于2001年6月,2008年5月在深交所上市,主要聚焦MEMS麦克风及模组、智能传感器及模组、SiP封装等相关业务,专注于MEMS相关产品的自主研发设计与制造,其产品已广泛应用于智能手机、无线耳机、智能穿戴、智能家居、无人机及汽车电子等领域。

《中国传感器发展蓝皮书》首批36家具有影响力的传感器企业之一,中(国)微型麦克风代表性企业,在微型麦克风领域,市场占有率居世界同行业之首。

据Yole Development 《202年MEMS产业现状报告》显示,歌尔在2020年全球MEMS厂商营收排名中升至第六位,继去年首次跻身前十后,仅用一年时间排名升至第六,也是前十名中唯一一家中国企业,报告还指出,在MEMS麦克风方面,歌尔15年来首次超过楼氏电子成为行业第一。

上市企业,上半年市值约1351亿元,2021上半年营收302.88亿元,同比增长94.49%;上半年净利润17.31亿元,同比增长121.71%

官网:

瑞声声学科技(深圳)有限公司

瑞声科技控股有限公司为智能设备提供领先的微型专有技术解决方案,在声学、光学、触觉反馈、精密制造、微机电、无线射频和天线领域拥有材料研发、仿真、算法、设计、自动化以及工艺开发等尖端技术。集团在设计和大批量高精密制造方面有近三十年经验,

《中国传感器发展蓝皮书》首批36家具有影响力的传感器企业之一,中国电声元器件代表性企业,全球著名的电声元器件制造商之一,2005年在香港上市。

在微型声学、触觉、MEMS麦克风领域,分别被工信部认定为我国制造业单项冠军示范企业。现已成为全球领先的同行、IT及消费电子市场微型元器件整体方案供货商。

港股上市企业,上半年市值约316.94亿元,2021上半年营收86亿港元,同比增长9.90%;上半年净利润9.21万港元,同比增长187.40%

官网:

华润微集成电路有限公司

华润微电子是2002年华润集团收购华晶集团改组而成,是领先的半导体和智能传感器供应商,总部位于无锡,拥有3条6英寸线

其中MEMS产线是国内规模最大的与CMOS生产线兼容的MEMS传感器量产生产线,具有国内领先水平的 MEMS 表面和体硅加工技术,用于制造压力、硅麦克风、光电、温湿度等MEMS传感器。

华润微电子8吋MEMS的3000片/月产能扩充已经完成,并投入使用。光电及MEMS麦克风工艺平台从6英寸升级到8英寸,实现批量生产,产品性能及良率水平优秀;整体提升了其MEMS工艺技术水平和竞争能力。

上市企业,上半年市值约908.9亿元,2021上半年营收44.55亿元,同比增长45.44%;上半年净利润10.68亿元,同比增长164.86%

官网:

用AT89C51单片机和温度传感器DS18B20S设计数字式温度计

江苏省联合职业技术学院常州旅游商贸分院

专科毕业论文

基于51单片机及DS18B20温度传感器的数字温度计设计

姓 名:(××××××××3号黑体)

学 号:(××××××××3号黑体)

班 级:(联院班级号×××3号黑体)

专 业:(××××××××3号黑体)

指导教师:(××××××××3号黑体)

系 部:创意信息系××××3号黑体)

二〇二0年××月××日

摘 要

本设计采用的主控芯片是ATMEL公司的AT89S52单片机,数字温度传感器是DALLAS公司的DS18B20。本设计用数字传感器DS18B20测量温度,测量精度高,传感器体积小,使用方便。所以本次设计的数字温度计在工业、农业、日常生活中都有广泛的应用。

单片机技术已经广泛应用社会生活的各个领域,已经成为一种非常实用的技术。51单片机是最常用的一种单片机,而且在高校中都以51单片机教材为蓝本,这使得51单片机成为初学单片机技术人员的首选。本次设计采用的AT89S52是一种flash型单片机,可以直接在线编程,向单片机中写程序变得更加容易。本次设计的数字温度计采用的是DS18B20数字温度传感器,DS18B20是一种可组网的高精度数字式温度传感器,由于其具有单总线的独特优点,可以使用户轻松地组建起传感器网络,并可使多点温度测量电路变得简单、可靠。

本设计根据设计要求,首先设计了硬件电路,然后绘制软件流程图及编写程序。本设计属于一种多功能温度计,温度测量范围是-55℃到125℃。温度值的分辨率可以被用户设定为9-12位,可以设置上下限报警温度,当温度不在设定的范围内时,就会启动报警程序报警。本设计的显示模块是用四位一体的数码管动态扫描显示实现的。在显示实时测量温度的模式下还可以通过查询按键查看设定的上下限报警温度。

关键词:单片机、数字温度计、DS18B20、AT89S52

目 录

1 引言 1

2 系统总体方案及硬件设计 2

2.1 系统总体方案 2

2.1.1系统总体设计框图 2

2.1.2各模块简介 2

2.2 系统硬件设计 6

2.2.1 单片机电路设计 6

2.2.2 DS18B20温度传感器电路设计 6

2.2.3 显示电路设计 7

2.2.4 按键电路设计 7

2.2.5 报警电路设计 8

3 软件设计 9

3.1 DS18B20程序设计 9

3.1.1 DS18B20传感器操作流程 9

3.1.2 DS18B20传感器的指令表 9

3.1.3 DS18B20传感器的初始化时序 10

3.1.4 DS18B20传感器的读写时序 10

3.1.5 DS18B20获取温度程序流程图 11

3.2 显示程序设计 13

3.3 按键程序设计 13

4实物制作及调试 14

5电子综合设计体会 15

参考文献 16

1 引言

本系统所设计的数字温度计采用的是DS18B20数字温度传感器测温,DS18B20直接输出的就是数字信号,与传统的温度计相比,具有读数方便,测温范围广,测温准确,上下限报警功能。其输出温度采用LED数码管显示,主要用于对测温比较准确的场所。

该设计控制器使用的是51单片机AT89S52,AT89S52单片机在工控、测量、仪器仪表中应用还是比较广泛的。测温传感器使用的是DS18B20,DS18B20是一种可组网的高精度数字式温度传感器,由于其具有单总线的独特优点,可以使用户轻松地组建起传感器网络,并可使多点温度测量电路变得简单、可靠。显示是用4位共阴极LED数码管实现温度显示,LED数码管的优点是显示数字比较大,查看方便。蜂鸣器用来实现当测量温度超过设定的上下限时的报警功能。

2 系统总体方案及硬件设计

2.1 系统总体方案

2.1.1系统总体设计框图

由于DS18B20数字温度传感器具有单总线的独特优点,可以使用户轻松地组建起传感器网络,并可使多点温度测量电路变得简单、可靠,所以在该设计中采用DS18B20数字温度传感器测量温度。

温度计电路设计总体设计框图如图2-1所示,控制器采用单片机AT89S52,温度传感器采用DS18B20,显示采用4位LED数码管,报警采用蜂鸣器、LED灯实现,键盘用来设定报警上下限温度。

图2-1 温度计电路总体设计框图

2.1.2各模块简介

1.控制模块

AT89S52单片机是美国ATMEL公司生产的低功耗,高性能CMOS 8位单片机,片内含有8kb的可系统编程的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准8051指令系统及引脚。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程的Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

AT89S52具有以下标准功能:8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

2.显示模块

显示电路采用4位共阴LED数码管,从P0口输出段码,P2口的高四位为位选端。用动态扫描的方式进行显示,这样能有效节省I/O口。

3.温度传感器模块

DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。DS18B20的性能特点如下:独特的单线接口仅需要一个端口引脚进行通信;多个DS18B20可以并联在惟一的三线上,实现多点组网功能;无须外部器件;可通过数据线供电,电压范围为3.0~5.5v;零待机功耗;温度以9或12位二进制数字表示;用户可定义报警设置;报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;

DS18B20采用3脚TO-92封装或8脚SO或µSOP封装,其其封装形式如图2-2所示。

图2-2 DS18B20的封装形式

DS18B20的64位ROM的结构开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。温度报警触发器TH和TL,可通过软件写入户报警上下限。

DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EEPRAM。高速暂存RAM的结构为8字节的存储器,结构如图2-3所示。

图2-3 DS18B20的高速暂存RAM的结构

头2个字节包含测得的温度信息,第3和第4字节TH和TL的拷贝是易失的,每次上电复位时被刷新。第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率,DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值,该字节各位的定义如表2-1所示。

表2-1:配置寄存器

D7 D6 D5 D4 D3 D2 D1 D0

TM

R1

R0

1

1

1

1

1

配置寄存器的低5位一直为1,TM是工作模式位,用于设置DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设置为0,用户要去改动,R1和R0决定温度转换的精度位数,来设置分辨率,“R1R0”为“00”是9位,“01”是10位,“10”是11位,“11”是12位。当DS18B20分辨率越高时,所需要的温度数据转换时间越长。因此,在实际应用中要将分辨率和转换时间权衡考虑。

高速暂存RAM的第6、7、8字节保留未用,表现为全逻辑1。第9字节读出前面所有8字节的CRC码,可用来检验数据,从而保证通信数据的正确性。

当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625℃/LSB形式表示。

当符号位s=0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位s=1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。输出的二进制数的高5位是符号位,最后4位是温度小数点位,中间7位是温度整数位。表2-2是一部分温度值对应的二进制温度数据。

表2-2 DS18B20输出的温度值

温度值

二进制输出

十六进制输出

+125℃

0000 0111 1101 0000

07D0h

+85℃

0000 0101 0101 0000

0550h

+25.0625℃

0000 0001 1001 0001

0191h

+10.125℃

0000 0000 1010 0010

00A2h

+0.5℃

0000 0000 0000 1000

0008h

0℃

0000 0000 0000 0000

0000h

-0.5℃

1111 1111 1111 1000

FFF8h

-10.125℃

1111 1111 0101 1110

FF5Eh

-25.0625℃

1111 1110 0110 1111

FF6Fh

-55℃

1111 1100 1001 0000

FC90h

DS18B20完成温度转换后,就把测得的温度值与RAM中的TH、TL字节内容作比较。若T>TH或T<TL,则将该器件内的报警标志位置位,并对主机发出的报警搜索命令作出响应。因此,可用多只DS18B20同时测量温度并进行报警搜索。在64位ROM的最高有效字节中存储有循环冗余检验码(CRC)。主机ROM的前56位来计算CRC值,并和存入DS18B20的CRC值作比较,以判断主机收到的ROM数据是否正确。

4.调节模块介绍

调节模块是由四个按键接地后直接接单片机的I/O口完成的。当按键没有按下时单片机管脚相当于悬空,默认下为高电平,当按键按下时相当于把单片机的管脚直接接地,此时为低电平。程序设计为低电平触发。

5.报警模块介绍

报警模块是由一个PNP型的三极管9012驱动的5V蜂鸣器,和一个加一限流电阻的发光二极管组成的。报警时蜂鸣器间歇性报警,发光二极管闪烁。

2.2 系统硬件设计

2.2.1 单片机电路设计

图2-4 单片机最小系统原理图

单片机最小系统是由晶振电路,上电复位、按键复位电路,ISP下载接口和电源指示灯组成。原理图如图2-4所示。

2.2.2 DS18B20温度传感器电路设计

DS18B20温度传感器是单总线器件与单片机的接口电路采用电源供电方。

电源供电方式如图2-7,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。

图2-7 DS18B20电源供电方式

当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。采用寄生电源供电方式时VDD端接地。由于单线制只有一根线,因此发送接口必须是三态的。

2.2.3 显示电路设计

显示电路是由四位一体的共阴数码管进行显示的,数码管由三极管9013驱动。

四位一体的共阴数码管的管脚分布图如图2-5所示。

图2-5 四位一体的共阴数码管管脚分布图

显示电路的总体设计如图2-6所示。

图2-6 显示电路

2.2.4 按键电路设计

按键电路是用来实现调节设定报警温度的上下限和查看上下报警温度的功能。电路原理图如图2-10所示。

图2-10 按键电路原理图

2.2.5 报警电路设计

报警电路是在测量温度大于上限或小于下限时提供报警功能的电路。该电路是由一个蜂鸣器和一个红色的发光二极管组成,具体的电路如图2-9所示。

图2-9 报警电路原理图

3 软件设计

3.1 DS18B20程序设计

3.1.1 DS18B20传感器操作流程

根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:

• 每一次读写之前都要对DS18B20进行复位操作

• 复位成功后发送一条ROM指令

• 最后发送RAM指令

这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500μs,然后释放,当DS18B20收到信号后等待16~60μs左右,后发出60~240μs的存在低脉冲,主CPU收到此信号表示复位成功。

DS18B20的操作流程如图3-1所示。

如图3-1 DS18B20的操作流程

3.1.2 DS18B20传感器的指令表

DS18B20传感器的操作指令如表3-1所示。传感器复位后向传感器写相应的命令才能实现相应的功能。

表3-1 DS18B20的指令表

指 令

指令代码

功 能

读ROM

0x33

读DS1820温度传感器ROM中的编码(即64位地址)

符合 ROM

0x55

发出此命令之后,接着发出 64 位 ROM 编码,访问单总线上与该编码相对应的 DS1820 使之作出响应,为下一步对该 DS1820 的读写作准备。

搜索 ROM

0xF0

用于确定挂接在同一总线上 DS1820 的个数和识别 64 位 ROM 地址。为操作各器件作好准备。

跳过 ROM

0xCC

忽略 64 位 ROM 地址,直接向 DS1820 发温度变换命令。适用于单片工作。

告警搜索命令

0xEC

执行后只有温度超过设定值上限或下限的片子才做出响应。

温度变换

0x44

启动DS1820进行温度转换,12位转换时最长为750ms(9位为93.75ms)。结果存入内部9字节RAM中。

读暂存器

0xBE

读内部RAM中9字节的内容

写暂存器

0x4E

发出向内部RAM的3、4字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据。

复制暂存器

0x48

将RAM中第3 、4字节的内容复制到EEPROM中。

重调 EEPROM

0xB8

将EEPROM中内容恢复到RAM中的第3 、4字节。

读供电方式

0xB4

读DS1820的供电模式。寄生供电时DS1820发送“ 0 ”,外接电源供电 DS1820发送“ 1 ”。

3.1.3 DS18B20传感器的初始化时序

DS18B20传感器为单总线结构器件,在读写操作之前,传感器芯片应先进性复位操作也就是初始化操作。

DS18B20的初始化时序如图3-2所示。首先控制器拉高数据总线,接着控制器给数据总线一低电平,延时480μs,控制器拉高数据总线,等待传感器给数据线一个60-240μs的低电平,接着上拉电阻将数据线拉高,这样才初始化完成。

图3-2 DS18B20初始化时序

3.1.4 DS18B20传感器的读写时序

1.写时序

DS18B20传感器的读写操作是在传感器初始化后进行的。每次操作只能读写一位。

当主机把数据线从高电平拉至低电平,产生写时序。有两种类型的写时序:写“0”时序,写“1”时序。所有的时序必须有最短60μs的持续期,在各个写周期之间必须有最短1μs的恢复期。

在数据总线由高电平变为低电平之后,DS18B20在15μs至60μs的时间间隙对总线采样,如果为“1”则向DS18B20写“1”, 如果为“0”则向DS18B20写“0”。如图3-2的上半部分。

对于主机产生写“1”时序时,数据线必须先被拉至低电平,然后被释放,使数据线在写时序开始之后15μs内拉至高电平。

对于主机产生写“1”时序时,数据线必须先被拉至低电平,且至少保持低电平60μs。

2.读时序

在数据总线由高电平变为低电平之后,数据线至少应保持低电平1μs,来自DS18B20的输出的数据在下降沿15μs后有效,所以在数据线保持低电平1μs之后,主机将数据线拉高,等待来自DS18B20的数据变化,在下降沿15μs之后便可开始读取DS18B20的输出数据。整个读时序必须有最短60μs的持续期。如图3-2的下半部分。读时序结束后数据线由上拉电阻拉至高电平。

图3-3 DS18B20传感器的读写时序

3.1.5 DS18B20获取温度程序流程图

DS18B20的读字节,写字节,获取温度的程序流程图如图3-3所示。

图3-4 DS18B20程序流程图

3.2 显示程序设计

显示电路是由四位一体的数码管来实现的。由于单片机的I/O口有限,所以数码管采用动态扫描的方式来进行显示。程序流程图如图3-4所示。

图3-5 显示程序流程图

3.3 按键程序设计

按键是用来设定上下限报警温度的。具体的程序流程图如图3-5所示。

图3-6 按键程序流程图

4实物制作及调试

制作好的实物如图4-1所示。

图4-1 数字温度计实物正面图

在做实物时出现了不少问题。比如本来是采用NPN型9013驱动蜂鸣器,但是在实际调试中蜂鸣器驱动不了,经多次试验,在三极管的基极电阻与单片机的接口处接一个1、2kΩ的上拉电阻就能驱动了。但考虑到单片机的I/O口默认状态时为高电平,这样一上电蜂鸣器就会响,所以将NPN型9013换成了PNP型的9012三极管,效果还不错。

5电子综合设计体会

经过将近一个月的设计、焊接、编程、调试,我们终于完成了数字温度计的设计,基本能够达到设计要求,而且还设计了一些其他功能,比可以开启或消除按键音功能,开机动画功能,查看报警上下限温度功能。

此次的设计使我从中学到了一些很重要的东西,那就是如何从理论到实践的转化,怎样将我们所学到的知识运用到实践中去。在大学课堂的学习只是给我们灌输专业知识,而我们应把所学的知识应用到我们现实的生活中去。这次的设计不仅使我们将课堂上学到的理论知识与实际应用结合了起来,而且使我们对电子电路、电子元器件、印制电路板等方面的知识有了更进一步的认识,同时在软件编程、焊板调试、相关调试仪器的使用等方面得到较全面的锻炼和提高,为今后能够独立进行某些单片机应用系统的开发设计工作打下一定的基础。此次单片机设计也为我们以后进行更复杂的单片机系统设计提供了宝贵的经验。

在本次设计的过程中,我们遇到不少的问题,刚开始焊好的板子下不进去程序,经过一再仔细的检查,才发现是在下载口处出了问题,由于焊盘口比较小,排针插不进去,最后使了很大力气才插进去,插进去后才发现坏了,结果在去排针的时候把焊盘给去下来了,最后只能在旁边将下载口引了出来。还有就是文章中提到的蜂鸣器驱动问题等等。经过此次的硬件制作与调试,锻炼了我们的动手实践能了。本次设计的另一个重点就是软件程序的设计,其中需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,有好多的东西,只有我们去试着做了,才能真正的掌握,只学习理论,有些东西是很难理解的,更谈不上掌握。

通过此次的综合设计,我们初步掌握了单片机系统设计的基本原理。充分认识到理论学习与实践相结合的重要性,对于书本上的很多知识,不但要学会,更重要的是会运用到实践中去。在以后的学习中,我们会更加注重实践方面的锻炼,多提高自己的动手实践能力。

参考文献

[1] 谭浩强.C程序设计(第三版).北京:清华大学出版社,2005.7 .

[2] 余发山,王福忠.单片机原理与应用技术.徐州:中国矿业大学出版社,2008.6 .

[3] 求是科技.单片机典型模块设计实例导航.北京:人民邮电出版社,2005.5 .

[4] 求是科技.8051系列单片机C程序设计完全手册.北京:人民邮电出版社,2006.4 .

[5] 于永,戴佳,刘波.51单片机C语言常用模块与综合系统设计实例精讲(第2版).北京:电子工业出版社,2008.10 .

[6]刘腾远.基于单片机的温度控制系统设计[J].科技经济导刊,2018(01):77-78.

[7]苏康友.基于51单片机的无线温度控制系统设计[J].电子技术与软件工程,2017(10):250-251.

[8]刘丰年.基于AT89C51的简易智能化加湿器设计[J].三门峡职业技术学院学报,2016,15(04):139-142.

[9]杨伟才.基于DS18B20的多点温度测量系统研究[J].山东工业技术,2016(24):266.

[10]严敏.基于单片机的智能温控系统的设计与实现[J].无锡职业技术学院学报,2016,15(03):61-64.

[11]吴嘉颖. 基于单片机的地铁低压设备触点温度监测系统的设计与实现[D].西南交通大学,2017.

[12]孙晓倩.基于51单片机的温度监测报警系统设计研究[J].赤峰学院学报(自然科学版),2015,31(24):24-26.

[13]仲霞.基于DS18B20的多点温度测量系统探讨[J].山东工业技术,2015(22):156.

[14]吕晓磊.基于单片机智能控温的仿真与设计[J].安徽电子信息职业技术学院学报,2015,14(03):34-37.

[15]贺争汉.基于51单片机的温度控制系统[J].黑龙江科技信息,2015(16):145.

[16]谭虹.智能型滑雪保温鞋温控系统的设计与实现[J].体育世界(学术版),2014(11):19-20.

[17]王云飞.DS18B20温度传感器的应用设计[J].电子世界,2014(12):355.

[18]刘金魁.基于DS18B20的数字测温系统[J].焦作大学学报,2014,28(02):99-100.

[19]杨丹丹,杨风,马慧卿.基于单片机的温度采集系统设计[J].山西电子技术,2014(03):19-21.

[20]曹美霞.单片机与数字温度传感器DS18B20的接口设计[J].电子制作,2014(11):9-10.