基于单片机的数字温度计设计.docx

上传人:b****5 文档编号:11675874 上传时间:2023-03-30 格式:DOCX 页数:16 大小:179.20KB
下载 相关 举报
基于单片机的数字温度计设计.docx_第1页
第1页 / 共16页
基于单片机的数字温度计设计.docx_第2页
第2页 / 共16页
基于单片机的数字温度计设计.docx_第3页
第3页 / 共16页
基于单片机的数字温度计设计.docx_第4页
第4页 / 共16页
基于单片机的数字温度计设计.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

基于单片机的数字温度计设计.docx

《基于单片机的数字温度计设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的数字温度计设计.docx(16页珍藏版)》请在冰豆网上搜索。

基于单片机的数字温度计设计.docx

基于单片机的数字温度计设计

目录

1.设计目的与要求1

1.1设计要求1

1.2设计思路简述1

1.3整体结构框图1

2.系统硬件设计2

2.1单片机最小系统模块2

2.1单片机AT89C512

2.1.2晶振电路3

2.1.3复位电路3

2.3温度传感器DS18B20模块4

2.3.1结构特点4

2.3.2引脚说明5

2.4LED数码管模块5

2.4.1工作原理5

2.4.2显示方式6

3.系统软件设计7

3.1主程序流程图7

3.2数据采集电路流程图8

3.3显示电路流程图9

4.系统仿真与调试10

参考文献11

附录12

1.设计目的与要求

利用本学期学习的单片机知识完成一个单片机的设计并且进行仿真实现其功能,从而达到对单片机软硬件的进一步理解以及掌握相关传感器的原理以及使用方法,获得一定的实践经验,培养相互协作,理论与实践相结合,提过发现问题并且解决问题的能力。

1.1设计要求

实时显示温度环境,四位数码管显示,3位整数,1位小数。

温度范围-55-127度。

1.2设计思路简述

本设计使用DS18B20温度传感器,AT89C51单片机作为主控制器,结合反相驱动IC和共阳极4位数码管实现一个能够显示具体温度的数字温度计。

1.3整体结构框图

基于单片机数字温度计的设计主要包括三大模块,分别为主控电路单片机AT89C51模块、数据采集电路温度传感器DS18B20模块和显示电路LED数码管模块。

整体结构如图表1所示

图表1.1整体结构框图

2.系统硬件设计

2.1单片机最小系统模块

2.1单片机AT89C51

1、AT89C51标准功能

4k字节Flash闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。

同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。

空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。

掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。

2、AT89C51引脚说明

VCC:

供电电压。

GND:

接地。

P0口:

P0口是一个8位漏极开路双向I/O口。

当P0口的管脚第一次写1时,被定义为高祖输入。

P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。

在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须连接上拉电阻。

P1口:

P1口是一个内部提供上拉电阻的8位双向I/O口。

P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。

在FLASH编程和校验时,P1口作为低八位地址接收。

P2口:

P2口为一个内部上拉电阻的8位双向I/O口。

当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。

P2口用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。

P3口:

P3口管脚是8个带有内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。

2.1.2晶振电路

电路中C1无极性电容和C2无极性电容是起振电容。

当12MHz晶振在高频的情况工作时,会产生一定的寄生的电感。

单片机的内部有一振荡电路,我们需要在外部接上晶振电路单片机才能工作。

晶振和电容与内部的电路组成振荡电路。

只要单片机一上电,电容启振,晶振工作,这样单片机就有一个持续的时钟信号。

51单片机内部有一个12分频器,因此时钟周期为t=1/12000000≈1us。

图表2.1晶振电路

2.1.3复位电路

单片机复位是使CPU和系统中的其他功能不见都处在一个确定的初始状态,并从这个状态开始工作,复位后PC=0000H,使单片机从第一个单元取指令。

单片机复位的条件是:

必须使RST/VPD或RST引脚加上持续两个机器周期(即24个振荡器)的高电平。

若时钟频率为12MHZ每台机器周期为1

,则只需2

以上时间的高电平,在RST引脚出现高电平后的第二个机器周期执行复位。

图表2.2复位电路

2.3温度传感器DS18B20模块

温度传感器DS18B20是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。

图表3温度传感器DS18B20结构图

2.3.1结构特点

DS18B20内部结构主要由四部分组成:

64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。

当被用着在寄生电源下,也可以向器件提供电源;GND为地信号;VDD为可选择的VDD引脚。

当工作于寄生电源时,此引脚必须接地。

结构特点如下

独特的单线接口仅需一个端口引脚进行通讯

简单的多点分布应用

无需外部器件

可通过数据线供电

零待机功耗

测温范围-55~+125℃,以0.5℃递增。

华氏器件-67~+2570F,以0.90F递增

温度以9位数字量读出

2.3.2引脚说明

DQ为数字信号输入/输出端

GND为电源地

VDD为外接电源供电电源输入端

2.4LED数码管模块

2.4.1工作原理

LED数码管(LEDSegmentDisplays)是由8个发光二极管构成。

其中7个LED构成7笔字形,1个LED构成小数点(固有时成为八段数码管)。

图表4LED数码管结构图

2.4.2显示方式

LED数码管有两大类,一类是共阴极接法,另一类是共阳极接法,共阴极就是7段的显示字码共用一个电源的负极,是高电平点亮,共阳极就是7段的显示字码共用一个电源的正极,是低电平点亮。

LED数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据LED数码管的驱动方式的不同,可以分为静态式和动态式两类。

1、静态显示

静态驱动也称直流驱动。

静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。

静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×8=40根I/O端口来驱动,要知道一个89S51单片机可用的I/O端口才32个,实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。

2、动态显示

LED数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。

通过分时轮流控制各个数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。

在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。

3.系统软件设计

3.1主程序流程图

3.2数据采集电路流程图

YY

Y

N

 

 

3.3显示电路流程图

4.系统仿真与调试

通过Proteus仿真软件进行模拟调试。

根据硬件设计画出数字温度计的电路图,将软件设计中的zz.hex文件加载到单片机AT89C51中,单击仿真工具按键进行全速仿真,如图所示,点击DS18B20模型的高\低温度调节钮,则可看到温度的变化同步反映到数码管显示上。

由此可说明本次设计顺利完成。

参考文献

[1]万隆.单片机原理及应用技术.第2版.北京:

清华大学出版社,2010

[2]王静霞.单片机应用技术.第2版.北京:

电子工业出版社,2014

[3]谢维成,杨加国.单片机原理与应用及C51程序设计.第2版.北京:

清华大学出版社,2009

[4]彭伟.单片机C语言程序设计实训100例—基于8051+Proteus仿真.北京:

电子工业出版社,2009

[5]西安唐都科技仪器公司.单片机实验指导书[C].2006.

[6]张靖武,周灵彬.单片机系统的PROTEUS设计与仿真[M].北京:

北京电子工业出版社,2007

[7]王小明.电动机的单片机控制[M].北京:

北京航空航天大学出版社,2002

[8]胡伟季晓衡.单片机C程序设计与应用实例[M].北京:

人民邮电出版社,2003

附录

数字温度计的C语言源程序如下

//#include<1820.h>

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

//bitflag;

//#definewei0xa0;

//#defineduan0x90;

uchardatadisdata[5];

//uinttvalue

uchartflag;

sbitDQ=P3^7;

bitf=0;

uchartempint,tempdp;

ucharTempTab[4];

ucharcodediscode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};

voiddelay()

{

uchari,j;

for(i=0;i<5;i++)

for(j=0;j<250;j++)

{

_nop_();

_nop_();

}

}

voiddelay_18B20(uinti)

{

while(i--);

}

voidds1820rst()

{

unsignedcharx=0;

DQ=1;

delay_18B20(4);

DQ=0;

delay_18B20(100);

DQ=1;

delay_18B20(40);

}

uchards1820rd()

{

unsignedchari=0;

unsignedchardat=0;

for(i=8;i>0;i--)

{

DQ=0;

dat>>=1;

DQ=1;

if(DQ)

dat|=0x80;

delay_18B20(20);

}

return(dat);

}

voidds1820wr(ucharwdata)

{

unsignedchari=0;

for(i=8;i>0;i--)

{

DQ=0;

DQ=wdata&0x01;

delay_18B20(10);

DQ=1;

wdata>>=1;

}

}

voidread_temp()

{

uchartemph=0,templ=0,k=0;

f=0;

ds1820rst();

ds1820wr(0xcc);

ds1820wr(0x44);

ds1820rst();

ds1820wr(0xcc);

ds1820wr(0xbe);

templ=ds1820rd();

temph=ds1820rd();

if((temph&0xf8)!

=0x00)

{

f=1;

temph=~temph;

templ=~templ;

k=templ+1;

templ=k;

if(k>255)

{

temph++;

}

}

tempdp=(templ&0x0f)*10/16;

templ>>=4;

temph<<=4;

tempint=temph|templ;

}

voiddistemp()

{

uchari,j;

if(f==0)

{

TempTab[0]=tempint/100;

TempTab[1]=(tempint/10)%10;

TempTab[2]=tempint%10;

TempTab[3]=tempdp;

}

else

{

TempTab[0]=10;

TempTab[1]=tempint/10;

TempTab[2]=tempint%10;

TempTab[3]=tempdp;

}

for(i=0;i<4;i++)

{

P2=_cror_(0xf7,i);

j=TempTab[i];

if(i==2)

P1=discode[j]&0x7f;

else

P1=discode[j];

delay();

P2=0xff;

}

}

voidmain()

{

while

(1)

{

_nop_();

_nop_();

read_temp();

_nop_();

_nop_();

P2=0x00;

distemp();

}

//仿真的时候先显示85,原因DS18B20上电初值为85

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1