基于单片机的数字温度计设计Word格式文档下载.docx

上传人:b****4 文档编号:6283880 上传时间:2023-05-06 格式:DOCX 页数:25 大小:260.42KB
下载 相关 举报
基于单片机的数字温度计设计Word格式文档下载.docx_第1页
第1页 / 共25页
基于单片机的数字温度计设计Word格式文档下载.docx_第2页
第2页 / 共25页
基于单片机的数字温度计设计Word格式文档下载.docx_第3页
第3页 / 共25页
基于单片机的数字温度计设计Word格式文档下载.docx_第4页
第4页 / 共25页
基于单片机的数字温度计设计Word格式文档下载.docx_第5页
第5页 / 共25页
基于单片机的数字温度计设计Word格式文档下载.docx_第6页
第6页 / 共25页
基于单片机的数字温度计设计Word格式文档下载.docx_第7页
第7页 / 共25页
基于单片机的数字温度计设计Word格式文档下载.docx_第8页
第8页 / 共25页
基于单片机的数字温度计设计Word格式文档下载.docx_第9页
第9页 / 共25页
基于单片机的数字温度计设计Word格式文档下载.docx_第10页
第10页 / 共25页
基于单片机的数字温度计设计Word格式文档下载.docx_第11页
第11页 / 共25页
基于单片机的数字温度计设计Word格式文档下载.docx_第12页
第12页 / 共25页
基于单片机的数字温度计设计Word格式文档下载.docx_第13页
第13页 / 共25页
基于单片机的数字温度计设计Word格式文档下载.docx_第14页
第14页 / 共25页
基于单片机的数字温度计设计Word格式文档下载.docx_第15页
第15页 / 共25页
基于单片机的数字温度计设计Word格式文档下载.docx_第16页
第16页 / 共25页
基于单片机的数字温度计设计Word格式文档下载.docx_第17页
第17页 / 共25页
基于单片机的数字温度计设计Word格式文档下载.docx_第18页
第18页 / 共25页
基于单片机的数字温度计设计Word格式文档下载.docx_第19页
第19页 / 共25页
基于单片机的数字温度计设计Word格式文档下载.docx_第20页
第20页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于单片机的数字温度计设计Word格式文档下载.docx

《基于单片机的数字温度计设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于单片机的数字温度计设计Word格式文档下载.docx(25页珍藏版)》请在冰点文库上搜索。

基于单片机的数字温度计设计Word格式文档下载.docx

3)LED数码直读显示

4)实现语音报数

5)可以任意设定温度的上下限报警功能

2系统总体方案

2.1设计思路方案一

由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,其中还涉及到电阻与温度的对应值的计算,感温电路比较麻烦。

而且在对采集的信号进行放大时容易受温度的影响出现较大的偏差。

2.2设计思路方案二

进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,电路简单,精度高,软硬件都以实现,而且使用单片机的接口便于系统的再扩展,满足设计要求。

从以上两种方案,很容易看出,采用方案二,电路比较简单,费用较低,可靠性高,软件设计也比较简单,故采用了方案二。

2.3设计方框图

温度计电路设计总体设计方框图如图2.3所示,控制器采用单片机AT89S51,温度传感器采用DS18B20,用3位LED数码管以串口传送数据实现温度显示。

图2-3上电+按钮电平复位电路原理图

2.4温度传感器

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

DS18B20的性能特点如下:

1、独特的单线接口仅需要一个端口引脚进行通信;

2、多个DS18B20可以并联在惟一的三线上,实现多点组网功能

3、无须外部器件;

4、可通过数据线供电,电压范围为3.0~5.5V;

5、零待机功耗;

6、温度以9或12位数字;

7、用户可定义报警设置;

8、报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;

9、负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;

2.5AT89C52管脚说明

VCC:

电源

GND:

接地

P0口:

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

作为输出口,每位能驱动8个TTL逻辑电平。

对P0口端口写“1”时,引脚作高阻抗输入。

当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。

在这种模式下,P0具有内部上拉电阻。

在flash编程时,P0口也用来接受指令字节:

在程序效验时,输出指令字节。

程序效验时,需要外部上拉电阻。

P1口:

P1口是一个具有内部上拉电阻的8位是双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑电平。

对P1口写“1”时,内部上拉电阻的原因,将输出电流ILL。

此外,与AT89C51不同之处是,P1.0和P1.1还可分别作为定时/计数器2的外部计数输入(P1.0/T2)和输出(P1.1/T2EX),具体如下所示:

P1.0T2(定时/计数器2外部计数脉冲输入),时钟输出

P1.1T2EX定时/计数2捕获/重装载触发和方向控制

在Flash编程和校验时,P1口接收低8位地址字节。

P2口:

P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲级可驱动吸收或输出电流4个TTL逻辑电平。

对P2口写“1”时,通过内部上拉电阻把端口拉高,此时可以作为输入口使用。

作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流ILL。

在访问外部好曾许存储器或用16位地址读取外部数据存储器时,P2口送出高8位地址。

在这种应用中,P2口使用很强的内部上拉发送1。

在使用8位地址访问外部数据存储器时,P2口输出P2锁存器的内容。

在Flash编程和校验时,P2口接收低8位地址字节和一些控制信号。

P3口:

P3口是一个具有内部上拉电阻的8位双向I/O口,P3输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑电平。

对P3口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入端口使用。

P3口除了作为一般、的I/O口线外,更重要的是它的第二功能,如下所示:

P3.0RXD(串行输入)

P3.1TXD(串行输出)

P3.2INT0(外部中断0)

P3.3INT1(外部中断1)

P3.4T0(定时器0外部输入)

P3.5T1(定时器1外部输入)

P3.6WR(外部数据存储器写选通)

P3.7RD(外部数据存储器读选通

在Flash编程和校验时,P3口也接收一些控制信号。

RST:

复位输入。

晶振工作时,RST脚持续2个机器周期以高电平将使用单片机复位。

ALE/PROG:

地址锁存器控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。

在Flash编程时,此引脚(PROG)也使用作编程输入脉冲。

在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。

然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。

如果需要,通过将地址为8EH的SFR的第0位置“1”,ALE操作无效。

这一位置“1”,ALE仅在执行MOVX或MOVC指令时有效。

否则,ALE将被微弱拉高。

这个ALE使能标志位的设置对微控制器处于外部执行模式下无效。

PSEN:

外部程序储存器选通信号

(PSEN)是外部程序存储器选通信号。

当AT89C52

从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,而在访问外部数据储存器时,PSEN将不被激活。

/EAVPP:

访问外部程序存储器控制信号。

为使能从0000H—FFFFH的外部程序存储器读取指令,EA端必须保持低电平(接地)。

为了执行内部程序指令,EA应该接VCC。

在flash编程期间,EA也接受12伏VPP电压。

XTAL1:

振荡器反相放大器及内部时钟发生器的输入端。

TAL2:

振荡器反相放大器的输出端

3具体实现步骤

3.1主控制器

图3-1-1晶振电路

图3-1-2复位电路

单片机AT89S51具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。

晶振采用12MHZ。

复位电路采用上电加按钮复位。

3.2显示电路

图3-2数码管显示电路

显示电路采用4位共阴极LED数码管,P0口由上拉电阻提高驱动能力,作为段码输出并作为数码管的驱动。

P2口的低四位作为数码管的位选端。

采用动态扫描的方式显示:

数码管显示电路

3.3温度传感器

图3-3温度传感器与单片机的连接

DS18B20可以采用两种方式供电,一种是采用电源供电方式,此DS18B20的1脚接地,2脚作为信号线,3脚接电源。

另一种是寄生电源供电方式,如图4所示单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。

当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。

采用寄生电源供电方式时VDD端接地。

由于单线制只有一根线,因此发送接口必须是三态的。

3.4报警温度调整按键

图3-4按键电路

本系统设计三个按键,采用查询方式,一个用于选择切换设置报警温度和当前温度,另外两个分别用于设置报警温度的加和减。

均采用软件消抖。

3.5报警电路

图3-5报警电路

通过设置一个上限和下限温度,超出这个温度电路会发出蜂鸣

3.6温度上下限

图3-6温度上下限

通过这个装置来设置数字温度计的上下限温度

4程序清单

#include<

reg52.h>

#include<

intrins.h>

#defineucharunsignedchar

#defineuintunsignedint

sbitDATA=P1^1;

//DS18B20接入口

ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

//共阴极字型码

inttemp;

//温度值

intss;

//中间的一个变量

intdd;

intj;

uchardatab;

//定时器中断次数

uchardatabuf[4];

//字型显示中间变量

intalarmH=320;

//默认报警值

intalarmL=100;

//定义开关的接入口

sbitk1=P2^5;

//+

sbitk2=P2^6;

//-

sbitk3=P2^7;

//确认

sbitk4=P2^4;

//切换

sbitbell=P1^0;

//蜂鸣器

sbitHLight=P1^2;

//正温指示灯

sbitLLight=P1^3;

//负温度指示灯

sbitwarn=P1^4;

//报警指示灯

sbitRed=P1^6;

//温度上限设置指示灯

sbitGreen=P1^7;

//温度下限设置指示灯

bitset=0;

//初始化

bitFlag=0;

//设置标志

intn;

//函数的声明区

voidkey_to1();

voidkey_to2();

voiddelay(uint);

voidkey();

voidShow();

//函数的定义区

/*延时子函数*/

voiddelay(uintnum)

{

while(num--);

}

//DS18b20温度传感器所需函数,分为初始化,读写字节,读取温度4个函数

Init_DS18B20(void)//传感器初始化

ucharx=0;

DATA=1;

//DQ复位

delay(10);

//稍做延时

DATA=0;

//单片机将DQ拉低

delay(80);

//精确延时大于480us//450

//拉高总线

delay(20);

x=DATA;

//稍做延时后如果x=0则初始化成功x=1则初始化失败

delay(30);

ReadOneChar(void)//读一个字节

uchari=0;

uchardat=0;

for(i=8;

i>

0;

i--)

{

DATA=0;

//给脉冲信号

dat>

>

=1;

DATA=1;

if(DATA)

dat|=0x80;

delay(8);

}

return(dat);

WriteOneChar(unsignedchardat)//写一个字节

uchari=0;

for(i=8;

i>

i--)

DATA=dat&

0x01;

dat>

delay(8);

intReadTemperature(void)//读取温度

uchara=0;

ucharb=0;

intt=0;

floattt=0;

Init_DS18B20();

WriteOneChar(0xCC);

//跳过读序号列号的操作

WriteOneChar(0x44);

//启动温度转换

//跳过读序号列号的操作

WriteOneChar(0xBE);

//读取温度寄存器等(共可读9个寄存器)前两个就是温度

a=ReadOneChar();

//低位

b=ReadOneChar();

//高位

t=b;

t<

<

=8;

t=t|a;

tt=t*0.0625;

t=tt*10+0.5;

return(t);

voiddisplay00()//*********显示负值子函数

{

dd=-(temp-1);

buf[1]=dd/100;

buf[2]=dd/100;

buf[3]=dd%100/10;

buf[0]=dd%10;

//动态显示

for(j=0;

j<

5;

j++)

{

P2=0xff;

//初始灯为灭的

P0=0x00;

P2=0xfd;

//显示小数点

P0=0x80;

delay(100);

//初始灯为灭的

P2=0xf7;

//片选LCD1

P0=0x40;

P2=0xff;

P2=0xfb;

//片选LCD2

P0=table[buf[2]];

P2=0Xfd;

//片选LCD3

P0=table[buf[3]];

P2=0Xfe;

P0=table[buf[0]];

//片选LCD4

}

//显示正值子函数

voiddisplay()

{

buf[1]=temp/1000;

//显示百位

buf[2]=temp/100%10;

//显示十位

buf[3]=temp%100/10;

//显示个位

buf[0]=temp%10;

//小数位

3;

j++)

delay(300);

//片选LCD1

P0=table[buf[1]];

//片选LCD2

//片选LCD3

voidkey()//按键扫描子程序

{if(k1!

=1)

delay(20);

if(k1!

while(k1!

{key_to1();

for(n=0;

n<

8;

n++)

Show();

if(k2!

if(k2!

while(k2!

{key_to2();

for(n=0;

}

}

if(k3!

{TR0=1;

//复位,开定时

temp=ReadTemperature();

if(k4!

{delay(20);

{while(k4!

=1);

set=!

set;

if(set==0)

{Red=0;

Green=1;

else{Green=0;

Red=1;

voidkey_to1()

TR0=0;

//关定时器

temp+=10;

if(temp>

=1100)

{temp=-550;

if(set==0)

{alarmH=temp;

else{alarmL=temp;

}

voidkey_to2()

temp-=10;

if(temp<

=-550)

{temp=1100;

{alarmH=temp;

else{alarmL=temp;

voidalarm(void)

if(temp>

alarmH||temp<

alarmL)

{//bell=1;

//delay(50);

//bell=0;

Flag=1;

}else{Flag=0;

logo()//开机的Logo

{P0=0x40;

delay(50);

P1=0xff;

//关闭显示

voidShow()//显示函数,分别表示温度正负值

{if(temp>

=0)

{HLight=1;

LLight=0;

display();

0)

{HLight=0;

LLight=1;

display00();

voidmain()

TCON=0x01;

//定时器T0工作在01模式下

TMOD=0X01;

TH0=0XD8;

//装入初值

TL0=0XF0;

EA=1;

//开总中断

ET0=1;

//开T0中断

TR0=1;

//T0开始运行计数

EX0=1;

//开外部中断0

for(n=0;

500;

n++)//显示启动LOGo"

----"

{bell=1;

warn=1;

logo();

Red=0;

while

(1)

key();

ss=ReadTemperature();

Show();

alarm();

//报警函数

if(Flag==1)

{bell=!

bell;

warn=!

warn;

}//蜂鸣器滴滴响

else{bell=1;

warn=1;

voidtime0(void)interrupt1using1//每隔10ms执行一次此子程序

{TH0=0X56;

TL0=0XDC;

temp=ss;

5总电路及PCB图

5.1总电路图

图5-1总电路图

5.2PCB图

图5-2PCB图

6结论与不足

通过这次对数字温度计的设计与制作,让我了解了设计电路的程序,也让我了解了关于数字温度计的原理与设计理念,要设计一个电路总要先用仿真仿真成功之后才实际接线的。

但是最后的成品却不一定与仿真时完全一样,因为,再实际接线中有着各种各样的条件制约着。

而且,在仿真中无法成功的电路接法,在实际中因为芯片本身的特性而能够成功。

所以,在设计时应考虑两者的差异,从中找出最适合的设计方法。

参考文献:

[1]马忠梅,张凯,等.单片机的C语言应用程序设计(第四版)北京航空航天大学出版社

[2]薛庆军,张秀娟,等.单片机原理实验教程

[3]廖常初.现场总线概述[J].电工技术,1999.北京航天航空大学出版社

[4]张毅刚,彭喜元,彭宇单片机原理及其应用

课程设计成绩评定表

出勤

情况

出勤天数

缺勤天数

出勤情况及设计过程表现(20分)

论文(20分)

设计成果(60分)

总成绩(100分)

指导教师

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

当前位置:首页 > PPT模板 > 艺术创意

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2