基于STC89C51RC和DS18B20的简单数字温度计.docx
《基于STC89C51RC和DS18B20的简单数字温度计.docx》由会员分享,可在线阅读,更多相关《基于STC89C51RC和DS18B20的简单数字温度计.docx(17页珍藏版)》请在冰点文库上搜索。
基于STC89C51RC和DS18B20的简单数字温度计
基于STC89C51RC和DS18B20的
简单数字温度计
学生姓名:
孙佳辉
专业:
电气工程及其自动化
班级:
040841
学院:
机电工程学院
摘要
温度的检测与控制是工业消费过程中比拟典型的应用之一,随着传感器在生活中的更加广泛应用,利用新型数字温度传感器实现对温度的测试与控制得到更快的开发,本文设计了一种基于AT89C52的温度检测及报警系统。
该系统可以方便的实现温度采集和显示,并可根据需要任意设定上下限报警温度,它使用起来相当方便,具有精度高,量程宽,灵敏度高,体积小,功耗低等优点,合适于我们日常生活和工作,农业消费中的温度测量,也可以当作温度处理模块嵌入其它系统中,作为其他主系统的辅助扩展。
该系统设计和布线简单构造紧凑,抗干扰才能强,在大型仓库,工厂,智能化建筑等领域的温度检测中有广泛应用前景
关键词:
单片机DS18B20温度传感器智能化
ABSTRACT
Temperaturemeasurementandcontrolofindustrialprocessisoneofthetypicalapplications,assensorshavemoreextensiveapplicationintoday,tousethenewdigitaltemperaturesensorsfortemperaturetestingandcontrollinggetfastdevelopment,thispaperdesignasystembasedonAT89C52fortemperaturetestingandalarming.Thesystemiseasytorealizethetemperaturegatheringanddisplaying,andcanaccordingtoneedsettemperatureforarming,itisveryconvenienttouseit.Ithastheadvantagesofhighprecision,rangingwidehighsensitivity,smallvolume,lowpower,itsuitsourdailylifeworkandagriculturetemperature,alsoauxiliarypartinothermainsystem.Thesystemdesignandwiringsimple,compactstructure,stronganti-jammingcapability,ithasbroadapplicationprotestinlargewarehouse,factories,intelligentbuildingandotherareasoftemperaturetesting.
Keywords:
MicrocontrollerTemperaturesensorDS18B20Intelligent
一、综述:
1.DS18B20摘要
单线数字温度传感器DS18B20为当前应用最为广泛的温度传感器之一,可以提供9位温度读数。
其与控制器件的通信信息经过单线接口从DS18B20输出或送入,使中央处理器件只需一条信号线就可实现对温度的测量,且从DS18B20输出的温度数据为数字信号,不需要再加AD芯片进展转换,使测温的实现更加方便。
详细PDF详细资料在维库网、周立功单片机网均可查到。
2.DS18B20优缺点
①厂家消费的DS18B20有唯一的序列号,这使得多个DS18B20能接在同一条单线总线上,而这条总线能环绕整个需要测温的环境,能使环境的温度数据全方位的在人工检测和控制之下。
②另外,DS18B20的测温原理独特:
利用两个温度系数不同的晶振对计数器进展控制,从而使不同的温度下计数值不同,再将其转换为温度数据存储,即可省略AD转换的一步,在数字化日益成熟的今天,这种测温原理是很符合开展趋势的,能为其它类型的传感器测量数据提供了新方法。
③当然,DS18B20并不是十全十美的,通过对其资料的熟悉及进展一些简单的使用后,发现其主要有两方面缺乏:
1〕温度测量的精度相对而言并不非常高,对于需要通过温度进展精细控制的仪器不是很合适;2〕测温范围为-55℃~125℃,且在温度小于-15℃和高于105℃时误差到达3℃,因此其测温范围是很有限的。
3.DS18B20的有关开展趋势
①由于虚拟仪器的开展,通过单片机等控制器件将DS18B20测温器件与PC机连接,编制软件能实现更加人性化的温度检测与控制系统。
或者通过PC机的控制使得DS18B20测温系统成为某一工业消费、过程控制等过程的一个子系统进展效劳。
在自动化、智能化高速开展的时代,PC机与传感器的结合会带来非常大的效益,因此DS18B20往这一方面开展是比拟符合现实需要的。
②由于DS18B20可以用遥控的方式设定其报警温度,近来我国发生了多起因高温而而引起的汽车自燃,假如在车身对高温敏感且易引发自燃的部位装上DS18B20进展实时监测和发出警报,那么可防止许多因温度骤变而带来的损失。
③以上仅是通过对于现实问题的学习与考虑得出的关于DS18B20的两个方面的应用实例,然而关于DS18B20的开展前景我认为是比拟大的,可以从探究新测温元件以扩大测温范围、增加测量准确度、发现更完善测温原理与方法、测温元件适用工程与生活实例探究、测温元件测量效果评估方法、大型多功能智能化测温精细仪器的研发等诸多方面进展研究建立一套很为完善的符合实际需要的理论系统。
总之,研发者必须用创新与开展的目光看问题,而研制的理论系统与产品要可以促进社会的开展。
二、工作内容:
1.总体电路设计
〔1〕STC89C52单片机:
主要用于与DS18B20进展单线通信控制其测温过程及将温度数据显示到三个数码管。
〔2〕数码管显示:
用三个数码管显示温度,第一个显示十位,第二个显示个位和小数点,第三个显示小数位。
〔3〕DS18B20测温:
用DS18B20信号线与单片机一引脚相接,以进展指令与数据传输。
〔4〕单片机按键复位电路:
按键按下时,数码管不显示;松开按键时,单片机内程序从头开场执行。
〔5〕电源显示:
当电路通电时,电源指示灯亮
〔6〕74HC573锁存器:
驱动数码管显示温度。
图一:
系统构造框图
2.电路接线设计
①由单片机P1口接数码管八个段选线引脚〔引脚号分别为11、7、4、2、1、10、5、3〕,控制需要显示的数字。
②由单片机P2口接数码管共八个位选引脚〔引脚号分别为6、8、9、12,6、8、9、12〕,控制显示数字的位。
③在电源线与单片机RESET引脚之间连接一个按钮,作为按键复位用。
④在电路板电源与地之间连接一个红色发光二极管,作为电路板通电指示用。
⑤将一根数据线的与电源适配器连接的接口保存,另一端剪开将红色线接电路板电源及,黑色线接电路板地极。
绿色与白色线为数据线,此处只用其电源线,故此二线悬空。
图二:
DS18B20测温原理图
3.程序设计
①此程序设计用到软件工具:
KeilUvision3、STC-ISPV391。
②此程序设计的难点在于对DS18B20进展操作的时序控制。
1〕复位与应答时序:
将信号线电平拉低480-960us,等待15-60us后度信号线电平,为低电平那么复位成功,复位成功后再做约240us的延时;2〕写时序:
主机把信号线从逻辑高电平拉至逻辑低电平时,低电平持续时间至少1uS,产生写时间片。
在变为低电平15uS之后,DS18B20在15-45uS之间对信号线采样,假如信号线为高电平,就写1,假如线为低电平,就写0。
时间片必须有最短为60uS的持续期,各写周期之间须有最短为1uS的恢复时间;3〕读时序:
主机将信号线从逻辑高电平拉低时,产生读时间片。
低电平持续时间至少1uS,来自DS18B20的输出数据在读时间片下降沿之后15uS有效,因此,在产生读时间片15uS后主机必须停顿把I/0线驱动至低电平,由上拉电阻拉回至高电平,主机在15uS末期对信号线采样,假如线为高电平,为读1,假如线为低电平,为读0。
读时间片的最短持续期限为60uS,各读时间片之间必须有最短为1uS的恢复时间。
图三:
程序流程图
程序设计
clude
#defineucharunsignedchar
#defineuintunsignedint
sbitDS=P2^2;//defineinterface
uinttemp;//variableoftemperature
ucharflag1;//signoftheresultpositiveornegative
sbitdula=P2^6;
sbitwela=P2^7;
unsignedcharcodetable[]={0x3f,0x#in06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsignedcharcodetable1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,
0x87,0xff,0xef};
voiddelay(uintcount)//delay
{
uinti;
while(count)
{
i=200;
while(i>0)
i--;
count--;
}
}
///////功能:
串口初始化,波特率9600,方式1///////
voidInit_Com(void)
{
TMOD=0x20;
PCON=0x00;
SCON=0x50;
TH1=0xFd;
TL1=0xFd;
TR1=1;
}
voiddsreset(void)//sendresetandinitializationcommand18B20复位,初始化函数
{
uinti;
DS=0;
i=103;
while(i>0)i--;
DS=1;
i=4;
while(i>0)i--;
}
bittmpreadbit(void)//readabit读1位数据函数
{
uinti;
bitdat;
DS=0;i++;//i++fordelay
DS=1;i++;i++;
dat=DS;
i=8;while(i>0)i--;
return(dat);
}
uchartmpread(void)//readabytedate读1字节函数
{
uchari,j,dat;
dat=0;
for(i=1;i<=8;i++)
{
j=tmpreadbit();
dat=(j<<7)|(dat>>1);//读出的数据最低位在最前面,这样刚好一个字节在DAT里
}
return(dat);
}
voidtmpwritebyte(uchardat)//writeabytetods18b20向1820写一个字节数据函数
{
uinti;
ucharj;
bittestb;
for(j=1;j<=8;j++)
{
testb=dat&0x01;
dat=dat>>1;
if(testb)//write1
{
DS=0;
i++;i++;
DS=1;
i=8;while(i>0)i--;
}
else
{
DS=0;//write0
i=8;while(i>0)i--;
DS=1;
i++;i++;
}
}
}
voidtmpchange(void)//DS18B20beginchange开场获取数据并转换
{
dsreset();
delay
(1);
tmpwritebyte(0xcc);//addressalldriversonbus写跳过读ROM指令
tmpwritebyte(0x44);//initiatesasingletemperatureconversion写温度转换指令
}
uinttmp()//getthetemperature读取存放器中存储的温度数据
{
floattt;
uchara,b;
dsreset();
delay
(1);
tmpwritebyte(0xcc);
tmpwritebyte(0xbe);
a=tmpread();//读低8位
b=tmpread();//读高8位
temp=b;
temp<<=8;//twobytecomposeaintvariable两个字节组合为1个字
temp=temp|a;
returntemp;
}
voidreadrom()//readtheserial
{
ucharsn1,sn2;
dsreset();
delay
(1);
tmpwritebyte(0x33);
sn1=tmpread();
sn2=tmpread();
}
voiddelay10ms()//delay
{
uchara,b;
for(a=10;a>0;a--)
for(b=60;b>0;b--);
}
voiddisplay(uinttemp)//显示程序
{
ucharA1,A2,A2t,A3,ser;
ser=temp/10;
SBUF=ser;
A1=temp/100;
A2t=temp%100;
A2=A2t/10;
A3=A2t%10;
dula=0;
P0=table[A1];//显示百位
dula=1;
dula=0;
wela=0;
P0=0x7e;
wela=1;
wela=0;
delay
(1);
dula=0;
P0=table1[A2];//显示十位
dula=1;
dula=0;
wela=0;
P0=0x7d;
wela=1;
wela=0;
delay
(1);
P0=table[A3];//显示个位
dula=1;
dula=0;
P0=0x7b;
wela=1;
wela=0;
delay
(1);
}
voidmain()
{
uchara;
Init_Com();
do
{
tmpchange();
//delay(200);
for(a=10;a>0;a--)
{display(tmp());
}
}while
(1);
}
4.电路板焊接
通过面包板上搭建的电路进展测试通过后,就按照电路图进展焊接。
三、一些问题及其解决方案:
1.数码管驱动问题
在搭建电路过程中,发现直接用单片机的I/O口控制数码管的显示时会出现驱动不起的问题,即数码管显示太暗,甚至不亮。
于是在数码管与单片机之间我们加了三片74LS04反相器,对数码管的每一个引脚都进展反相驱动,之后发现这种方法简便但获得了很好的效果。
另外,根据所查的资料,数码管的驱动方法有很多,比方其中的用三极管进展驱动,用74LS164进展驱动等方法。
2.DS18B20的读出的温度数据格式问题
这一问题是在编程中遇到的。
据开场查找的资料中介绍,其读出温度数据格式为低字节为测量的温度数据除二,高字节为符号位,但是经过程序调试后发现与结果并不相符。
通过进一步查找资料,发现其从温度暂存器读出的温度为低字节低四位为存储温度小数值,低字节高四位与高字节第三位为存储温度整数值,高字节高五位为存储温度符号位。
图四:
DS18B20存储器组织形式
图五:
存储温度数据格式
3.关于DS18B20的转换精度
根据开场所查资料的介绍,DS18B20的转换精度为0.5摄氏度,所以原来只设定了一位数码管进展小数显示。
根据后来进一步的资料查证,发现其转换精度是可以调整的,其出厂设置为12位。
DS18B20的转换精度设定需要对暂存器的第五六位进展数据操作。
使用过程中要注意所使用的转换方式,每种转换方式转换温度所花的时间是不同的,必需要等待足够长的时间后才能从DS18B20中读出正确的温度值。
R1
R0
转换精度形式
最大转换时间
0
0
9-bit
0
1
10-bit
1
0
11-bit
375ms
1
1
12-bit
750ms
图六:
转换精度形式设定
五、数据分析:
1.数码管上显示的数据
第0位数码管显示摄氏度符号“C〞,第1位至第3位显示温度小数局部数据,第4位显示温度整数局部的各位数据〔带小数点〕,第5位和第6位显示温度整数局部的十位与百位数据。
六、局部电路原理图的补充与用到器材列表:
1.DS18B20的内部构造
DS18B20内部构造图
2.DS18B20的测温原理
其测温原理很有革新,利用两个不同温度系数的振荡器控制两个计数器的计数,在某一温度时将在温度存放器内储存相应的数据。
这种方法改变了通常的利用AD转换将模拟信号转换为数字信号进展控制和显示的方法,而其对于数字信号处理日益成熟的现今情况下也是非常符合开展趋势的。
同时也提示了我们设计与制造传感器的一种方法。
程序
3.用到的器材列表
名称
数量
STC89C51RC单片机
1片
DS18B20温度传感器
1片
四位八段数码管
2个
74LS04反相器
3片
USB数据线
1根
USB电源适配器
1个
LED发光二极管
1个
按键
1个
电阻
假设干
电容
假设干