基于STC89C52单片机的数字温度计.docx
《基于STC89C52单片机的数字温度计.docx》由会员分享,可在线阅读,更多相关《基于STC89C52单片机的数字温度计.docx(16页珍藏版)》请在冰豆网上搜索。
基于STC89C52单片机的数字温度计
基于STC89C52单片机的数字温度计
成员姓名:
邹远淳徐冰孙顺新唐高峰
专业班级:
自动化2班
************************
摘要··················································P1
1绪论·················································P2
2系统组成及工作原理···································P3
2.1总体设计方案········································P3
2.2系统模块组成········································P3
3系统电路设计·········································P4
3.1STC89C52单片机主控制器······························P4
3.2LED数码管显示模块···································P5
3.3温度检测模块·········································P7
4系统软件设计·········································P8
5系统测试·············································P9
5.1主要指标测试·········································P9
5.2测试结果分析·········································P9
参考文献·················································P10
附录··················································P11
基于STC89C52单片机的数字温度
专业:
自动化成员姓名:
邹远淳徐冰孙顺新唐高峰指导教师:
杨伟新
摘要温度的检测是工业生产中比较典型的应用之一,随着传感器在生产和生活中的更加广泛的应用,利用新型数字温度传感器实现对温度的测试与控制得到更快的开发。
本文设计了一种基于STC89C52单片机的温度检测系统,该系统将温度传感器DS18B20接在控制器的端口上,对温度进行采集,将采集到的温度值显示在LED数码管上。
经实验测试表明,该系统设计和布线简单,结构紧凑,有可读性高,反应速度快,测量准确,抗干扰能力强,性价比高,扩展方便等优点,具有关阔的应用前景。
关键词STC89C52,数字温度计,DS18B20
ABSTRACT
Temperaturedetectionisoneoftypicalapplicationinindustrialproduction.Asthesensorismorewidelyusedintheproductionandlife,Usingnewdigitaltemperaturesensorfortemperaturetestandtemperaturecontrolgetfasterdeveloped.ThispaperdesignsatemperaturedetectionbasedonSTC89C52single-chipmicrocomputersystem.ThesystemwillbethetemperaturesensorDS18B20connecttoaportonthecontroller,collecttemperature,collectedtemperaturevaluewillbedisplayedontheLEDdigitaltube.Throughexperimentaltests,thesystemdesignandwiringissimple,compact-sized,therearereadable,quickresponse,accuratemeasurement,highEFT,highcostperformance,convenientextensionandotherbenefits,ithasasprawlingapplicationprospect.
KeyWords:
STC89C52,Digitalthermometer,DS18B20
1绪论
随着人民生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便是不可否定的,其中数字温度计就是一个典型的例子。
单片机控制温度检测系统的温感系统主要是DS18B20芯片,该芯片由一根总线控制,电压范围为3.0v--5.5v。
DS18B20具有测温方便、测温范围广、测温精度高等特点。
出于对此类问题的探索,我们设计并制作了此温度检测系统。
本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确。
其输出温度采用数字显示,主要用于对测温比较准确的场所,该设计控制器模块主要使用STC89C52单片机,测温传感模块使用DS18B20;显示模块使用LED数码管,可以只管、准确的显示所测温度值。
2系统组成及工作原理
1总体设计方案
经分析,将系统分为两个部分,一个是由温度传感器DS18B20组成的检测部分,另一个是由单片机和LED数码管组成的主控与显示部分。
如图所示DS18B20将检测到的数据送到单片机,单片机对接收到的数据进行处理并送到1602显示,6V电源给各个部分供电。
图2-1系统总设计图
2系统模块组成
本系统由单片机主控电路、DS18B20温度检测模块、LED数码管显示模块3部分组成。
3系统电路设计
1STC89C52单片机主控制器
STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
具有以下标准功能:
8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KBEEPROM,MAX810复位电路,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口。
另外STC89X52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
最高运作频率35Mhz,6T/12T可选。
STC89C52引脚图如下所示:
图3-1STC89C52引脚图
STC89C52单片机主控电路原理图如下:
图3-2STC89C52单片机主控电路原理图
单片机主控模块包括了振荡电路、复位电路,同时接入了各个模块的接口,保证了整个系统的灵活性。
单片机是整个系统的控制中枢,它指挥外围器件协调工作,从而完成特定的功能。
硬件实现上采用模块化设计,每一模块只实现一个特定功能,最后再将各个模块搭接在一起。
这种设计方法可以降低系统设计的复杂性。
控制电路的核心器件是由STC公司生产的STC89C52单片机,属于MCS-51系列。
STC89C52是一种低功耗、高性能的CMOS8位微控制器,具有8K在系统可编程Flash存储器,采用的工艺是Atmel公司的高密度非易失存储器技术;片上Flash允许程序存储器在系统可编程,亦适于常规编程器;在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案;价格低廉、性能可靠、抗干扰能力强。
因此广泛应用于工业控制和嵌入式系统中。
3.2LED数码管显示模块
LED数码管原理图如下所示:
图3-3LED数码管原理图
下面左图为实验板其中一只数码管,而右图为数码管的内部接法,也
就是前面所说的共阳极。
当要其显示“1”时,只需置B与C为低电平,而其它的为高电平;当要显示“2”时,只需置A﹑B﹑G﹑E﹑D为低电平,而其它的为高电平;当要显示“8”时,就除了小数点以外全部为低电平;如此类推。
图3-4数码管图3-5数码管的内部接法
下面我们来系统地介绍一下在单片机应用电路中最为实用的LED数码管显示方法
——“动态扫描”。
什么是动态扫描?
就是所要工作的若干个数码管轮流显示,只要轮流显示的速度足够快,每秒约50次以上,由于人眼的“视觉暂留”特性,看起来就像是连续显示,这样称为动态扫描。
这种显示方式在数码管应用系统中应用得最为广泛。
图3-6动态扫描电路图3-7动态扫描的工作时序
左图为共阳极的动态扫电路,而右图则为电路的工作时序。
下面我们来分析一下动态扫描的工作原理。
在电路中T1﹑T2﹑T3为用作开关作用,当B极dig1﹑dig2﹑dig3为低电平时导通,为高电平时截止,三个电阻为限流电阻。
下面我们从图5-15来理解一下动态扫描的工作原理。
第一:
首先显示个位,在单片机中将dig1置低电平,而dig2与dig3置高电平,所以只有T1导通,而T2与T3则截止,同时在段码a~g中输出相应段码的低电平,那么在数码管中只有个位显示,而相应的十位与百位则没有显示。
第二:
显示十位,在单片机中将dig2置低电平,而dig1与dig3置高电平,所以只有T2导通,而T1与T3则截止,同时在段码a~g中输出相应段码的低电平,那么在数码管中只有十位显示,而相应的个位与百位则没有显示。
第三:
显示百位,在单片机中将dig3置低电平,而dig1与dig2置高电平,所以只有T3导通,而T1与T2则截止,同时在段码a~g中输出相应段码的低电平,那么在数码管中只有百位显示,而相应的个位与十位则没有显示。
3.3温度检测模块
DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
DS18B20的性能特点如下:
●独特的单线接口仅需要一个端口引脚进行通信;
●多个DS18B20可以并联在惟一的三线上,实现多点组网功能;
●无须外部器件;
●可通过数据线供电,电压范围为3.0~5.5V;
●零待机功耗;
●温度以9或12位数字;
●用户可定义报警设置;
●报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;
●负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;
DS18B20接线图如下所示:
图3-8DS18B20接线图
4系统软件设计
设计中使用德国Keil公司出品的KeiluVision编程软件,它是业内对51系列单片机编程的常用工具。
下载器为STC公司的专用程序下载器,与使用的STC89C52RC单片机兼容。
5系统测试
5.1主要指标测试
本系统测量范围为-55.0℃-99.9℃,报警温度值设定范围为0℃-99℃,温度误差为0.1℃。
5.2测试结果分析
通过测试,与标准仪器所测得的温度相比较,可得系统的误差为信号传输过程中可能存在误码,及误判。
参考文献
【1】康华光《电子技术基础》,高等教育出版社,第二版,数字部分
【2】康华光《电子技术基础》,高等教育出版社,第五版,模拟部分
【3】谭浩强《C程序设计教程》,清华大学出版社,第一版
【4】张毅刚《单片机原理及应用》,高等教育出版社
【5】郭天祥《新概念51单片机C语言教程:
入门、提高、开发、拓展全攻略》,电子工业出版社
附录
附录1系统图
图10系统完整原理图
图11LED数码管显示模块原理图
图12DS18B20温度检测模块原理图
附录2、程序源代码
#include
unsignedcharm,n,p;
sbitDQ=P2^3;//定义DS18b20的管脚
sbitL1=P2^7;//定义控制数码管的管脚
sbitL2=P2^6;
sbitL3=P2^5;
sbitL4=P2^4;
unsignedchartable[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,
0x82,0xF8,0x80,0x90,0x7f,0xbf,0xa7};//0-9数字,后面为".-C"
/*****延时子程序*****/
voidDelay_DS18B20(intnum)
{
while(num--);
}
/*****初始化DS18B20*****/
voidInit_DS18B20(void)
{
unsignedcharx=0;
DQ=1;//DQ复位
Delay_DS18B20(8);//稍做延时
DQ=0;//单片机将DQ拉低
Delay_DS18B20(80);//精确延时,大于480us
DQ=1;//拉高总线
Delay_DS18B20(14);
x=DQ;//稍做延时后,如果x=0则初始化成功,x=1则初始化失败
Delay_DS18B20(20);
}
/*****读一个字节*****/
unsignedcharReadOneChar(void)
{
unsignedchari=0;
unsignedchardat=0;
for(i=8;i>0;i--)
{
DQ=0;//给脉冲信号
dat>>=1;
DQ=1;//给脉冲信号
if(DQ)
dat|=0x80;
Delay_DS18B20(4);
}
return(dat);
}
/*****写一个字节*****/
voidWriteOneChar(unsignedchardat)
{
unsignedchari=0;
for(i=8;i>0;i--)
{
DQ=0;
DQ=dat&0x01;
Delay_DS18B20(5);
DQ=1;
dat>>=1;
}
}
/*****读取温度*****/
unsignedintReadTemperature(void)
{
unsignedchara=0;
unsignedcharb=0;
unsignedintt=0;
floattt=0;
Init_DS18B20();
WriteOneChar(0xCC);//跳过读序号列号的操作
WriteOneChar(0x44);//启动温度转换
Init_DS18B20();
WriteOneChar(0xCC);//跳过读序号列号的操作
WriteOneChar(0xBE);//读取温度寄存器
a=ReadOneChar();//读低8位
b=ReadOneChar();//读高8位
t=b;
t<<=8;
t=t|a;
tt=t*0.0625;
t=tt*10+0.5;//放大10倍输出并四舍五入
return(t);
}
voiddisplay()//数码管扫描函数
{
P0=table[m];
L1=0;//暂未1,如用三极管驱动要改为0
Delay_DS18B20(250);
L1=1;//后关闭显示
P0=table[n];
//P1=table[10];//第二位后显示中间点
L2=0;
Delay_DS18B20(250);
L2=1;
P0=table[10];
L2=0;
Delay_DS18B20(250);
L2=1;
P0=table[p];//小数部分
L3=0;
Delay_DS18B20(250);
L3=1;
P0=table[12];
L4=0;
Delay_DS18B20(250);
L4=1;
}
/*主函数部分程序*/
voidmain()//主函数
{
unsignedintj;
while
(1)
{
j=ReadTemperature();//读取温度
m=j/100;//分离出十位
n=(j%100)/10;//分离出个位
p=j%10;//分离出小数位
display();//扫描数码管
}
}
答谢
在这里首先感谢我们大一以来的所有的代课老师们,他们孜孜不倦的指导我们学习,解答疑问,我们才有可能做出这个作品。
感谢邹远淳同学,他负责收集做设计需要的资料,花费了很大精力。
还有感谢徐冰和孙顺新同学,他们废寝忘食的和我们一起焊接原件,在我们不断的调试和思考下,终于实现了最终的设计。
学号
姓名
分工
成绩
P1*******3
唐高峰
手机资料,编制程序,撰写论文
P1*******5
邹远淳
论文部分内容整修,论文答疑
P1*******9
孙顺新
电路板焊接,烧制程序
P1*******3
徐冰
电路板焊接,材料购买