基于STC89C52单片机的数字温度计单片机课程设计 精品Word文档下载推荐.docx
《基于STC89C52单片机的数字温度计单片机课程设计 精品Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于STC89C52单片机的数字温度计单片机课程设计 精品Word文档下载推荐.docx(25页珍藏版)》请在冰豆网上搜索。
温度传感器技术,在我国各领域已经引用的非常广泛,可以说是渗透到社会的每一个领域,人民的生活与环境的温度息息相关,在工业生产过程中需要实时测量温度,在农业生产中也离不开温度的测量,因此研究温度的测量方法和装置具有重要的意义。
第2章系统硬件选择
2.1单片机的选择
由于单片机技术在各个领域正得到越来越广泛的应用,世界上许多集成电路生产厂家相继推出了各种类型的单片机,在单片机家族的众多成员中,STC89C52系列单片机以其优越的性能、成熟的技术及高可靠性和高性能价格比,迅速占据了工业测控和自动化工程应用的主要市场,成为国内单片机应用中的主流。
2.1.1STC89C52单片机的性能介绍
STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
具有以下标准功能:
8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KBEEPROM,MAX810复位电路,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口。
另外STC89C52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
最高运作频率35Mhz,6T/12T可选。
2.1.2STC89C52单片机引脚图
各引脚功能介绍如下:
●VCC:
供电电压
●GND:
接地
●P0口:
P0口为一个8位漏级开路双向I/O口,每个管脚可吸收8TTL门电流。
当P1口的管脚写“1”时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FLASH编程时,P0口作为原码输入口,当FLASH进行校验时,P0输出原码,此时P0外部电位必须被拉高。
●P1口:
P1口是一个内部提供上拉电阻的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”时,它利用内部上拉的优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
●P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入时,由于外部下拉为低电平,P3口将输出电流(ILL),也是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口:
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2INT0(外部中断0)
P3.3INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6WR(外部数据存储器写选通)
P3.7RD(外部数据存储器读选通)
同时P3口同时为闪烁编程和编程校验接收一些控制信号。
●RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高
平时间。
●ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令时ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
●PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取址期间,每个机器周期PSEN两次有效。
但在访问内部部数据存储器时,这两次有效的PSEN信号将不出现。
●EA/VPP:
当EA保持低电平时,访问外部ROM;
注意加密方式1时,EA将内部锁定为RESET;
当EA端保持高电平时,访问内部ROM。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
●XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
●XTAL2:
来自反向振荡器的输出。
2.2.温度传感器的选择
2.2.1DS18B20介绍
DALLAS最新单线数字温度传感器DS18B20是一种新型的“一线器件”,其体积更小、更适用于多种场合、且适用电压更宽、更经济。
DALLAS半导体公司的数字化温度传感器DS18B20是世界上第一片支持“一线总线”接口的温度传感器。
温度测量范围为-55~+125摄氏度,可编程为9位~12位转换精度,测温分辨率可达0.0625摄氏度,分辨率设定参数以及用户设定的报警温度存储在EEPROM中,掉电后依然保存。
被测温度用符号扩展的16位数字量方式串行输出;
其工作电源既可以在远端引入,也可以采用寄生电源方式产生;
多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。
因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。
DS18B20的性能特点如下:
●独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯
●DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温
●DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内
●适应电压范围更宽,电压范围:
3.0~5.5V,在寄生电源方式下可由数据线供电
●温范围-55℃~+125℃,在-10~+85℃时精度为±
0.5℃
●零待机功耗
●可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温
●在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快
●测量结果直接输出数字温度信号,以“一线总线”串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力
●负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作
以上特点使DS18B20非常适用与多点、远距离温度检测系统。
DS18B20内部结构主要由四部分组成:
64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。
DS18B20的管脚排列、各种封装形式如图2.1所示,DQ为数据输入/输出引脚。
开漏单总线接口引脚。
当被用着在寄生电源下,也可以向器件提供电源;
GND为地信号;
VDD为可选择的VDD引脚。
当工作于寄生电源时,此引脚必须接地。
其电路图2.2所示。
图2.1外部封装形式图2.2传感器电路图
第3章原理分析
3.1原理框图
根据设计要求分析,基于AT89S52单片机的数字温度计设计由AT89S52单片机控制器、电源、显示电路、温度传感器、复位电路和时钟电路组成,系统框图如图一所示。
电源给整个电路供电,显示电路显示温度值,时钟电路为AT89S52提供时钟频率。
传感器采用美国DALLAS半导体公司生产的一种智能温度传感器DS18B20,其测温范围为-55~125℃,最高分辨率可达0.0625℃,完全符合设计要求。
报警电路
图3基于STC89C52单片机的数字温度计系统框图
3.2原理分析
整个系统由单片机控制,温度传感器采用DS18B20。
DS18B20采用单总线方式与单片机相连.把采集到得温度信息传给单片机。
单片机采集到的温度输出到八个个数码管上进行显示。
当八位数码管显示的温度超过上限值时可以实现报警功能。
第4章系统的硬件电路设计
4.1显示电路
四位共阳LED数码管:
用来显示温度的大小,可直接读取,温度精确到0.1℃。
四位数码管如图所示,从左到右依次是百位,十位,个位,十分位。
图4.1 数码管
4.2报警电路
三极管8550驱动蜂鸣器:
如下图所示三极管Q6来驱动蜂鸣器BUZ1。
图4.3三极管8550、蜂鸣器BUZ1
4.3数字温度传感器
数字温度传感器DS18B20:
如下图所示
图4.3DS18B20
4.4单片机最小系统电路
单片机最小化系统:
如下图所示系统工作时,最小化系统运行。
图4.4最小化系统
4.5数字温度计的实物图
数字温度计显示当前温度21.4℃
图4.5数字温度计实物图
4.6系统板上硬件连线
1)把“单片机系统“区域中的P0.0-P0.7端口用8芯排线依次连接到数码管A-DP端口上;
2)把“单片机系统”区域中的P3.0-P3.2端口用线连接到按键K1-K3的一端上,如图表7所示,其他所有连线按图表7连接即可;
3)把单片机的P2.0端口接数码管的位选3,P2.1端口接数码管的位选2,P2.2端口接数码管的位选1,P2.3端口接数码管的位选4;
4)电源可用外接电源(用手机充电器可做电源),但必须申明电源小于+5V,当然也不能太小。
第5章系统的软件设计
5.1程序流程图
主程序的主要功能是负责温度的实时显示、读出并处理DS18B20测量的当前温度值,温度测试每1S进行一次。
这样可以在1S之内测量一次被测温度,其程序流程图如图3所示。
读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写,其程序流程图如图4所示。
温度转换命令子程序主要是发温度转换开始命令,采用12位分辨率转换时间约为750ms。
程序设计中采用1s显示程序延时等待转换的完成。
计算温度子程序将RAM中读取值进行BCD码地转换运算,并进行温度值正负的判定,显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高显示位为0时将符号显示位移入下一位。
5.2元件清单及程序代码
元件清单:
单片机STC89C52:
1个
40引脚底座:
DS18B20:
蜂鸣器:
电阻:
10K1个
排阻:
1021个
电容:
极性电容10uf1个;
瓷片电容10pf2个
按键:
晶振:
四位共阳数码管:
2个
彩色LED:
4个
程序主函数代码:
/*------------------------------------------------
主函数
------------------------------------------------*/
voidmain(void)
{
unsignedintTempH,TempL,temp;
Init_Timer0();
while
(1)//主循环
{
if(ReadTempFlag==1)
ReadTempFlag=0;
temp=ReadTemperature();
if(temp&
0x8000)
{
TempData[0]=0x40;
//负号标志
temp=~temp;
//取反加1
temp+=1;
TempH=temp>
>
4;
/*if(TempH>
24)//中断触发语句!
!
{
ZD=0;
}*/
}
else
{
TempData[0]=0;
TempH=temp>
if(TempH>
25||TempH<
21)//中断触发语句!
}
TempL=temp&
0x0F;
TempL=TempL*6/10;
//小数近似处理
if(TempH/100==0)
TempData[1]=0;
TempData[1]=dofly_DuanMa[TempH/100];
//百位温度
if((TempH/100==0)&
&
((TempH%100)/10==0))//消隐
TempData[2]=0;
TempData[2]=dofly_DuanMa[(TempH%100)/10];
//十位温度
TempData[3]=dofly_DuanMa[(TempH%100)%10]|0x80;
//个位温度,带小数点
TempData[4]=dofly_DuanMa[TempL];
TempData[6]=0x39;
//显示C符号
}
}
第6章实验数据分析
6.1proteus仿真图
图6.1Proteus仿真图显示当前温度24℃
6.2系统调试与分析
在系统制作和调试过程中遇到了不少问题,下面是具体问题与解决方法。
1)数码管不亮
数码管段选信号通过P0传输,而P0口无上拉电阻,不能驱动数码管,所以在P0口接上102排阻后问题得以解决。
2)两个数码管显示一样
检查之后发现原来是两位数码管的位选端被不小心焊接在一起,改正之后该问题即解决了。
3)不能正常显示温度
DS18B20有三个引脚分别是VCC、QD、GND,如果将VCC与GND接反很容易将DS18B20烧坏,以至于不能使其正常工作,将引脚正确连接后,排除故障。
结论
本文介绍了基于STC89C52单片机的数字温度计的设计,对整个硬件电路和软件程序设计做了分析。
温度传感器DS18B20转化温度的方法非常简洁且精度高、测试范围较广。
单片机体积小重量轻、抗干扰能力强、对环境要求不高、价格低廉、可靠性高、灵活性好。
因此这种温度测量系统能应用于各种场合,具有很大的应用价值。
数字式温度传感器DS18B20和处理芯片AT89C52,具有良好的技术指标,组成的电路系统检测准确、稳定性好、调校方便!
该数字温度计完全适用于各种工作环境,达到了预期的研制目标与实用效果。
参考文献
[1]孙育才.《单片微型计算机及其应用》.东南大学出版社.2004
[2]沈德金陈粤初.《单片机接口电路与应用程序实例》.北京航天航空大学出版社.1990.
[3]潘新民王燕芳.《微型计算机控制技术》.电子工业出版社2003
[4]李朝青.单片机原理及接口技术(简明修订版).杭州:
北京航空航天大学出版社,1998
[5]李广弟.单片机基础[M].北京:
北京航空航天大学出版社,1994
[6]阎石.数字电子技术基础(第三版).北京:
高等教育出版社,1989
附录1
DS18B20温度与表值对应表
附录2
/*-----------------------------------------------
内容:
18B20单线温度检测的应用样例程序
#include"
delay.h"
18b20.h"
18b20初始化
bitInit_DS18B20(void)
bitdat=0;
DQ=1;
//DQ复位
DelayUs2x(5);
//稍做延时
DQ=0;
//单片机将DQ拉低
DelayUs2x(200);
//精确延时大于480us小于960us
//拉高总线
DelayUs2x(50);
//15~60us后接收60-240us的存在脉冲
dat=DQ;
//如果x=0则初始化成功,x=1则初始化失败
DelayUs2x(25);
//稍作延时返回
returndat;
读取一个字节
unsignedcharReadOneChar(void)
unsignedchari=0;
unsignedchardat=0;
for(i=8;
i>
0;
i--)
//给脉冲信号
dat>
=1;
if(DQ)
dat|=0x80;
return(dat);
写入一个字节