基于51单片机数字温度计显示设计Word文档格式.docx
《基于51单片机数字温度计显示设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于51单片机数字温度计显示设计Word文档格式.docx(22页珍藏版)》请在冰点文库上搜索。
温度传感器使用范围广,数量多,位居各种传感器之首,其发展大致经历了以下3个阶段:
1、传统的分立式温度传感器(含敏感元件)——热电偶传感器,主要是能够进行非电量和电量之间转换。
2、模拟集成温度传感器/控制器,集成传感器是采用硅半导体集成工艺制成的,因此亦称硅传感器或单片集成温度传感器。
3、智能温度传感器。
它是集微电子技术、计算机技术和自动测试技术(ATE_)为一体的。
智能温度传感器内部包含温度传感器、A/D转换器、信号数据处理器、存储器(或寄存器)和外接电路。
1.3设计目的
1、掌握单片机的工作原理
2、能够进行单片机简单系统进行设计,包括电源模块、复位模块、键盘模块、及相应的控制模块的设计
3、掌握单片机的指令系统,能够对具体的设计要求编写相应的控制程序
4、能够根据相应的控制要求选择相应的外围器件实现控制任务
5、利用protel绘制原理,利用Proteus进行仿真
第2章数字温度计具体设计内容
2.1数字温度计设计方案论证
2.1.1方案一
由于本文设计的是温度测量电路,所以可以使用热敏电阻之类的器件利用其感温效应,在将其被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,温度感应电路,比较麻烦。
2.1.2方案二
进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。
从以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计也比较简单,所以采用了方案二。
方案二的总体设计框图
温度计电路设计总体设计方框图如图2.1所示,本系统采用单片机作为微控制器,控制器采用单片机STC89C51,温度传感器采用DS18B20,采用12MHZ晶振,电源电路采用+5V电路,用4位LED数码管以串口传送数据来实现温度的显示。
最终该电路经过设计分析、绘图、仿真、调试、制板、焊接、等工作后该数字温度计成形,并且要进行实际的调试与应用。
由于采用数字温度芯片DS18B20测量温度,输出的信号全为数字化,这样与传统的测温方法相比较,省去了很多外围电路,并且数字温度芯片的物理性质和化学性质都特别稳定,可用于工业作业中使用。
温度传感器DS18B20采用了单总线的数据传输的特点,由数字温度计DS18B20和微控制器STC89C51构成的温度测量装置,它直接输出温度的数字信号,可直接与计算机连接。
这样一来,温度测量系统的结构就比较简单,体积也不会很大。
软件编程的空间比较大,可以通过编程来实现各种算法和逻辑控制,硬件安装也很方
图2.1总体设计框图
2.2所用主要元件清单
万用板7*9,3pin圆孔母座,2.2K电阻*4,stc89C51单片机,40脚IC座,DS18B20温度传感器,10K电阻*2,10uF电容,小按键,12MHz晶振,30pF瓷片电容*2,9012三极管*4,四位一体共阳数码管0.56,DC电源插座,USB电源线,自锁开关,导线若干,焊锡,电烙铁。
2.3主控制器STC89C51的特点及功能介绍
2.3.1STC89C51的特点及特性:
89C51单片机是一款基于8位单片机处理芯片STC89C52RC,其功能非常强大,可以实现单片机开发的多种要求。
具有报警、跑马灯、串行通信、段码液晶和字符液晶显示、电机控制、A\D转换、D\A转换、温度采集、数字信号合成、实时时钟电路、PWM输出、红外检测等多种功能,以供学习者开发使用。
以下为STC89C51系列单片机的具体特点和管脚功能说明:
(1)增强型1T流水线/精简指令集结构8051CPU
(2)工作电压:
3.4V-5.5V(5V单片机)/2.0V-3.8V(3V单片机)
(3)工作频率范围:
0-35MHz,相当于普通8051的0~420MHz.实际工作频率可达48MHz.
(4)用户应用程序空间12K/10K/8K/6K/4K/2K字节
(5)片上集成512字节RAM
(6)通用I/O口(27/23个),复位后为:
准双向口/弱上拉(普通8051传统I/O口)可设置成四种模式:
准双向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏每个I/O口驱动能力均可达到20mA,但整个芯片最大不得超过55mA
(7)ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器可通过串口(P3.0/P3.1)直接下载用户程序,数秒即可完成一片
(8)EEPROM功能
(9)看门狗
(10)内部集成MAX810专用复位电路(外部晶体20M以下时,可省外部复位电路)
(11)时钟源:
外部高精度晶体/时钟,内部R/C振荡器。
用户在下载用户程序时,可选择是使用内部R/C振荡器还是外部晶体/时钟。
常温下内部R/C振荡器频率为:
5.2MHz~6.8MHz。
精度要求不高时,可选择使用内部时钟,因为有温漂,请选4MHz~8MHz
(12)有2个16位定时器/计数器
(13)外部中断2路,下降沿中断或低电平触发中断,PowerDown模式可由外部中断低电平触发中断方式唤醒
(14)PWM(4路)/PCA(可编程计数器阵列),也可用来再实现4个定时器或4个外部中断(上升沿中断/下降沿中断均可支持)
(15)STC89Cc516AD具有ADC功能。
10位精度ADC,共8路
(16)通用异步串行口(UART)
(17)SPI同步通信口,主模式/从模式
(18)工作温度范围:
0-75℃/-40-+85℃
(19)封装:
PDIP-28,SOP-28,PDIP-20,SOP-20,PLCC-32,TSSOP-20(超小封状,定货)
STC89C52RC系列单片机为真正的看门狗,缺省为关闭(冷启动),启动后无法关闭,可省去外部看门狗。
此系列单片机P4口地址为E8H,并有2个附加外部中断,
P4.2/INT3,P4.3/INT2。
晶振电路部分,使用11.0592M晶体,和20PF的电容。
在复位电路中,采用阻容复位时,电容为10uF,电阻为10k。
因为STC89C52RC系列单片机RESET脚内部没有下拉电阻,必须接10k电阻
2.3.2电源电路:
电源电路采用外部供电的方式,通过变压器将220V交流电转变为12V,再通过接口J0向实验板供电,为保护系统的安全性,增加了开关k0,防止因电源不当引起硬件的烧坏,电源经过k0后,经过整流桥,再通过电源芯片7805和7809得到+5V和+9V,为系统及周围芯片提供电源。
电源供电原理图如图2.2
图2.2电源供电原理图
2.4温度采集部分的设计
温度采集部分采用的是DS18B20温度传感器,DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
温度传感器DS18B20将被测环境温度转化成带符号的数字信号(以十六位补码形式,占两个字节)在通过单片机发出命令送给显示器。
它的输出脚I/O直接与单片机相连,并接一个上拉电阻,传感器采用外部电源供电。
传感器控制程序是按照DS18B20的通信协议编制。
系统的工作是在程序控制下,完成对传感器的读写和对温度的显示。
DS18B20特点:
(1)采用单总线专用技术,既可通过串行口线,也可通过其它I/O口线与微机接口,无须经过其它变换电路,直接输出被测温度值(9位二进制数,含符号位);
(2)测温范围为-55℃~+125℃,测量分辨率为0.0625℃;
(3)内含64位经过激光修正的只读存储器ROM;
(4)适配各种单片机或系统机;
(5)用户可分别设定各路温度的上、下限;
(6)内含寄生电源。
其管脚图如图2.4.1-1
图2.4.1-1
图2.4.1-2DS18B20实物图
图2.4.1-3DS18B20底视图
表2-1 DS18B20详细引脚功能描述
序号
名称
引脚功能描述
1
GND
地信号
2
DQ
数据输入/输出引脚。
开漏单总线接口引脚。
当被用着在寄生电源下,也可以向器件提供电源。
3
VDD
可选择的VDD引脚。
当工作于寄生电源时,此引脚必须接地。
DS18B20的性能特点如下:
●独特的单线接口仅需要一个端口引脚进行通信;
●多个DS18B20可以并联在惟一的三线上,实现多点组网功能;
●无须外部器件;
●可通过数据线供电,电压范围为3.0~5.5V;
●零待机功耗;
●温度以9或12位数字;
●用户可定义报警设置;
●报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;
●负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;
DS18B20采用3脚PR-35封装或8脚SOIC封装,其内部结构框图如图2-3所示。
图2-3DS18B20结构框图
现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。
支持3V~5.5V的电压范围,电源输入端。
2.5显示部分电路设计
2.5.1LED显示电路
通过排阻与LED显示器相连组成,电路图如图2.5.1
图2.5.1
2.5.2整机电路
当接通电源以后,温度传感器正常工作,温度传感器将根据被测温度的不同来采集不同的数据,然后将所采集到的数据传送到比较器到中,然后由比较器将采集到的数据转变成高低电平,在送入单片机,单片机通过控制各个引脚电平的高低来来控制温度的显示输出。
整机电路图如图2.5.2
图2.5.2整机电路
总结
在本次设计中,我查阅了大量的设计资料,因为有实际的产品设计,需要我们自己亲手做出一个实物出来,所以为了让自己的设计更加完善,查阅这方面的实际资料是十分必要的,也是必不可少的。
并且将本次设计的完整内容整理写出设计报告,但是这段时间经过自身的不懈努力,不但加深了对单片机与传感器的进一步的认识和理解,在这次课程设计中,全面实践一个基于单片机的应用系统的开发过程,我们运用了以前学过的专业课知识,如:
C语言、单片机知识等是一个综合性很高的实践。
并将以前所学理论知识充分应用到了实践中。
通过毕业设计,受益匪浅,使我深刻认识到理论联系实际的重要性,并且在实践中扩展了知识面,这主要得益于认真负责的工作态度、严谨活泼的治学精神和深厚专业的理论水平,不但掌握了本专业的相关知识,而且对其他专业的知识也有所了解,从各方面提高了自身的综合素质。
经过这次一个较完整的产品设计和制作过程,对于将来学习和工作也是有所裨益的。
在本系统的设计过程和论文编写过程中,得到了老师的悉心指导与帮助,在我做毕业设计的过程中给我提出了很多指导性的意见,使我很是受用。
同时很多同学和朋友给予了我许多无私的帮助,给我的设计和论文提出了很多宝贵的修改意见,在这里,我向这些无私帮助我的人表示衷心的感谢和良好的祝愿。
至此,衷心感谢各位老师及同学多年来的辛勤培育和教导!
附录A主电路原理图
附录B实物图
附录C程序
#include<
reg52.h>
#defineuiunsignedint
#defineucunsignedchar//宏定义
sbitDQ=P3^7;
//定义DS18B20总线I/O
bitbdatafuhao;
ucqian,bai,shi,ge;
uccodeled[]={0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,0x47,0xDF,0xD7};
uccodeled_dian[]={0x7f,0x64,0xbd,0xf5,0xe6,0xf3,0xfb,0x67,0xff,0xf7};
//============================================================================================
//====================================DS18B20=================================================
/*****延时子程序*****/
voidDelay(intnum)
{
while(num--);
}
/*****初始化DS18B20*****/
voidInit_DS18B20()
DQ=1;
//DQ复位
Delay(8);
//稍做延时
DQ=0;
//单片机将DQ拉低
Delay(80);
//精确延时,大于480us
//拉高总线
Delay(40);
/*****读一个字节*****/
ucReadOneChar()
uci=0;
ucdat=0;
for(i=8;
i>
0;
i--)
{
DQ=0;
//给脉冲信号
dat>
>
=1;
DQ=1;
if(DQ)
dat|=0x80;
Delay(4);
}
return(dat);
/*****写一个字节*****/
voidWriteOneChar(ucdat)
i>
i--)
DQ=dat&
0x01;
Delay(5);
/*****读取温度*****/
uiReadTemperature()
uia=0,b=0,t=0;
floattt=0;
Init_DS18B20();
WriteOneChar(0xCC);
//跳过读序号列号的操作
WriteOneChar(0x44);
//启动温度转换
WriteOneChar(0xBE);
//读取温度寄存器
a=ReadOneChar();
//读低8位
b=ReadOneChar();
//读高8位
t=b;
t<
<
=8;
t=t|a;
if(t&
0xf800)
t=~t+1;
fuhao=1;
else
fuhao=0;
tt=t*0.0625;
t=tt*10+0.5;
//放大10倍输出并四舍五入
return(t);
voidcheck_wendu()
uif;
f=ReadTemperature();
//获取温度值并减去DS18B20的温漂误差
qian=f/1000;
bai=(f%1000)/100;
//计算得到十位数字
shi=((f%1000)%100)/10;
//计算得到个位数字
ge=((f%1000)%100)%10;
//计算得到小数位
/*****显示开机初始化等待画面*****/
voidDisp_init()
P0=0x7f;
//显示----
P2=0x7f;
Delay(100);
P2=0xdf;
P2=0xf7;
P2=0xfd;
P2=0xff;
//关闭显示
/*****显示温度子程序*****/
voidDisp_Temperature()//显示温度
if(qian==0)
if(fuhao==1)
P0=0x7f;
//10111111
else
P0=0xff;
P2=0xfd;
Delay(100);
P2=0xff;
elseif(qian!
=0)
P0=~led[qian];
P2=0xfd;
if((bai==0)&
&
(qian==0))
//
P2=0xf7;
P2=0xff;
elseif((bai==0)&
(qian!
=0))
P0=~led[bai];
elseif(bai!
P0=~led_dian[shi];
P2=0xdf;
P2=0xff;
P0=~led[ge];
//显示符号
P2=0x7f;
/*****主函数*****/
voidmain()
ucz;
for(z=0;
z<
100;
z++)
Disp_init();
check_wendu();
while
(1)
for(z=0;
10;
Disp_Temperature();
参考文献
[1]李朝青.单片机原理及接口技术[M].杭州:
北京航空航天大学出版社,1998,42-48.
[2]李广弟.单片机基础[M].北京:
北京航空航天大学出版社,1994.12-18.
[3]阎石.数字电子技术基础(第三版)[M].北京:
高等教育出版社,1989,5-9.
[4]刘高潮.一种实用的多功能数字温度计设计[J].电子测量技术,2007,8-10.
[5]白泽生.用MCS-51单片机实现温度的检测[J].现代电子技术,2005,12-15.
[6]何立民.单片机应用技术选编[M].北京:
北京航空航天大学出版社,2004,56-60.
[7]杨刚,周群.电子系统设计与实践[M].北京:
电子工业出版社,2004,24-26.
[8]张洪润.电子线路与电子技术[M],北京:
清华大学出版社,2005,20-24.
[9]王松武.电子创新设计与实践[M]北京:
国防工业出版社,2005,14-19.
[10]李建忠.单片机原理及应用[M].西安:
西安电子科技大学出版社,2002,30-34.