基于51单片机数字温度报警器Word下载.docx

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

基于51单片机数字温度报警器Word下载.docx

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

基于51单片机数字温度报警器Word下载.docx

它将地址线、数据线和控制线合为一根双向串行传输数据的信号线,允许在这根信号线上挂接多个DS18B20。

每个芯片内有一个64位的ROM,其中存有各个器件自身的序列号,作为器件独有的ID号码。

其测温范围是-55~128℃,测温分辨率在12位时精度为0.0625℃。

DS18B20简化了温度器件与计算机的接口电路,使得电路简单,使用更加方便。

2.2.3显示模块的选择

采用数码管显示模块,采集温度超出或低于上下限时,相应的发光二极管点亮。

3系统的硬件设计与实现

3.1系统硬件概述

本设计包括温度数据采集和显示两个部分,数据采集通过温度传感器实现,显示有发光二极管,LED数码管实现。

报警功能由蜂鸣器实现,系统的复位以及温度上下限的调整分别由三个按键实现。

3.2电路模块

3.2.1单片机

AT89C51单片机内部主要由9个部件组成:

1个8位中央处理器;

4KBFlash存储器;

128B的数据存储器;

32条I/O口线;

2个定时器/计数器;

1个具有6个中断源、4个优先级的中断嵌套结构;

用于多处理机通信、I/O扩展或全双工UART的串行口;

特殊功能寄存器;

1个片内振荡器和时钟电路。

AT89S51系列单片机完全继承了MCS-51的指令系统,共有111条指令,按其功能可分为五大类:

数据传送类指令、算术运算类指令、逻辑运算类指令、控制转移类指令、布尔操作。

AT89C51单片机引脚如图3-1所示。

图3-1AT89C51单片机引脚图

管脚说明:

P0口:

8位、漏极开路的双向I/O口。

P0能够用于外部程序数据存储器。

它可以被定义为数据/地址的第八位。

P0口在应用时必须外接上拉电阻,作为输入时,首先应将引脚置1。

P1口:

8位双向I/O口,内部含上拉电阻。

作为输入时,应先将引脚置高;

若负载为低电平,则通过内部上拉电阻向外输出电流。

P2口:

P3口:

P3口除了通用I/O口功能外,还有第二功能。

P3口的第二功能定义如表3-1所示。

表3.1P3口第二功能定义

引脚定义

功能

P3.0-RXD

串行输入口

P3.1-TXD

串行输出口

P3.2-

外部中断0

P3.3-

外部中断1

P3.4-T0

计时器0外部输入

P3.5-T1

计时器1外部输入

P3.6-

外部数据存储器写选通

P3.7-

外部数据存储器读选通

RST:

复位输入,低电平有效。

ALE/PROG:

地址锁存允许信号输出。

在正常操作状态下,该引脚端口输出恒定频率的脉冲。

其频率为晶振频率的1/6,可用作外部定时或其他触发信号。

如果需要,可通过SFR的第0位置禁止ALE操作,但ALE的禁止位不影响对外部存储器的访问。

片外程序存储器选通信号,低电平有效。

当AT89S51执行来自外部程序存储器的指令代码时,PSEN/每个机器周期两次有效。

在访问外部数据存储器时,PSEN/无效。

片外程序存储器访问允许信号,低电平有效。

XTAL1:

外接晶振。

在单片机内部是反相放大器的输入及端。

XTAL2:

在单片机内部是反相放大器的输出端,输入到内部时钟发生器。

3.2.2复位电路模块

复位是单片机的初始化操作,复位信号是高电平有效,复位操作有上电自动复位、按键电平复位、外部脉冲复位和自动复位四种方式。

在本设计中复位采用

上电自动复位,当接通电源的瞬间,RST端与Vcc同电位,随着电容的电压逐渐上升,RST端的电压也逐渐下降,于是在RST端便形成了一个正脉冲,只要该正脉冲的宽度持续两个周期的高电平,就可以实现系统的自动复位,复位电路原理图如图3-2所示。

3.2.3显示电路模块

显示电路由单片机的P0、P2端口控制。

显示模块如图3-3。

图3-3温度显示模块

3.2.4传感器电路模块

(1)DS18B20内部结构

DS18B20是Dallas公司继DS1820后推出的一种改进型智能数字温度传感器,与传统的热敏电阻相比,只需一根线就能直接读出被测温度值,并可根据实际需求来编程实现9~12位数字值的读数方式。

DS18B20的外形如一只三极管,引脚名称及作用如下:

GND:

接地端,

DQ:

数据输入/输出脚,与TTL电平兼容,

VDD:

可接电源,也可接地。

因为每只DS18B20都可以设置成两种供电方式,即数据总线供电方式和外部供电方式。

采用数据总线供电方式时VDD接地,可以节省一根传输线,但完成数据测量的时间较长;

采用外部供电方式则VDD接+5V,多用一根导线,但测量速度较快,内部结构如图3-4。

(2)DS18B20供电方式

DS18B20可以采用外部电源供电和寄生电源供电两种模式。

外部电源供电模式是将DS18B20的GND直接接地,DQ与但单总线相连作为信号线,VDD与外部电源正极相连。

如图3-5所示。

图中DS18B20的DQ端口通过接入一个4.7K的上拉电阻到VCC,从而实现外部电源供电方式。

寄生电源供电模式如图3-6所示:

从图中可知,DS18B20的GND和VDD均直接接地,DQ与单总线相连,单片机其中一个I/O口与DS18B20的DQ端相连。

(3)DS18B20的测温原理

DS18B20的测温原理如图3-7所示,其主要由斜率累加器、温度系数振荡器、减法计数器、温度存储器等功能部件组成。

图3-7DS18B20的测温原理

DS1820是这样测温的:

用一个高温度系数的振荡器确定一个门周期,内部计数器在这个门周期内对一个低温度系数的振荡器的脉冲进行计数来得到温度值。

计数器被预置到对应于-55℃的一个值。

如果计数器在门周期结束前到达0,则温度寄存器(同样被预置到-55℃)的值增加,表明所测温度大于-55℃。

同时,计数器被复位到一个值,这个值由斜坡式累加器电路确定,斜坡式累加器电路用来补偿感温振荡器的抛物线特性。

然后计数器又开始计数直到0,如果门周期仍未结束,将重复这一过程。

斜坡式累加器用来补偿感温振荡器的非线性,以期在测温时获得比较高的分辨率。

DS18B20内部对此计算的结果可提供0.5℃的分辨率。

温度以16bit带符号位扩展的二进制补码形式读出,

DS18B20遵循单总线协议,每次测温时都必须有4个过程]:

初始化、传送ROM操作命令、传送ROM操作命令、数据交换。

4.系统的软件设计

4.1软件设计应用环境与设计语言

本设计软件的设计是在KeilC51的环境下编译的。

KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。

KeilC51标准C编译器为8051微控制器的软件开发提供了C语言环境,同时保留了汇编代码高效、快速的特点。

4.2系统设计设计流程图

系统的流程图如图4-1所示。

图4-1系统设计流程图

5系统仿真设计

5.1Proteus软件介绍

Proteus软件是英国Labcenterelectronics公司出版的EDA工具软件。

它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。

它是目前最好的仿真单片机及外围器件的工具。

Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。

在PROTEUS绘制好原理图后,调入已编译好的目标代码文件:

*.HEX,可以在PROTEUS的原理图中看到模拟的实物运行状态和过程。

使用Proteus软件进行单片机系统仿真设计,是虚拟仿真技术和计算机多媒体技术相结合的综合运用,有利于培养学生的电路设计能力及仿真软件的操作能力;

实践证明,在使用Proteus进行系统仿真开发成功之后再进行实际制作,能极大提高单片机系统设计效率。

因此,Proteus有较高的推广利用价值。

5.2Proteus仿真图

图5-1温度报警软件仿真图

5.3硬件调试

所有器件按电路原理图焊接完成后,接上导线,放入三节电池,接通电源,按下开关。

相应的从机对应的发光二极管点亮,按下键盘,相应数码管上显示键值。

调试过程中先检查pcb版各个点是否焊接错,连线正确,确保线没有绕道一起,硬件原理图如图5-2。

图5-2焊接实物硬件图

5.4调试结果

刚开始调试并不是很顺利,虽然很小心但调试过程中仍出现了很多的问题,首先电路比较难焊接,必须再加小心以免出现问题难以排查。

还有电路中需接电源正负极的线比较多也要很仔细的去焊接。

刚开始调试按键控制出错,经过同学帮忙大家努力后终于正确的调试出了结果。

结论

这次课程设计不光是要掌握模单片机书本上的理论基础,还需要我们锻炼自己的动手能力。

用时2周,需要用到ProteusISIS绘图,同时也用到keil编程,仿真验证程序正确。

最后一步焊接硬件有点困难,因为平时没练过焊接,刚开始的矩阵键盘就焊错了,之后又重新用吸锡器吸掉,列线扫描用导线代替了。

焊接过程遇到许多问题,终于焊接完成后,又发现按键不响应,又返回去重新改程序,给单片机刷入程序第2次验证,还是没有调试正确。

最后终于发现了问题,原来是硬件焊接时,把接口焊错了,修改之后果然调试正确。

调试成功后真的很开心,因为自己焊接,硬件后面显得很粗糙,最后总结发现各个元器件的布局真的很重要,这次做单片机硬件,确实让我学到了很多东西,很感谢这次的实践机会。

这次实验从开始准备到焊接硬件完成,充实了我们的生活,让我们增长了知识,提高了学习能力,一些软件的使用,芯片的管教,电解电容的正负极,等等一些细微的东西,都需要自己去图书馆或者网上找相应的资料。

这次小课程设计对以后的课程设计都有帮助,提前锻炼了我们的能力,同时也感谢实验室的同学的指导以及高老师的指导,让我顺利的完成了课程设计。

参考文献

【1】高玉芹单片机原理与应用及C51编程技术【M】.北京:

机械工业出版社。

【2】刘泉溪单片机原理与应用实验教程【M】北京航空航天大学出版社。

【3】孙育才.MCS-51系列单片微型计算机及其应用【M】东南大学出版社

【4】叶景,基于单片机的温度控制系统的设计经验与交流,2008

【5】杨光友.单片机微型计算机原理及接口技术[M].北京:

中国水利水电出版社,2002

附录

附录1元件清单与仿真图

1.元件清单

1.万用板7*9

2.开关

3.2.2K电阻*6

4.stc89C51单片机

5.40脚IC座

6.DS18B20温度传感器

7.10K排阻

8.10K电阻*2

9.10uF电容

10.按键*3

11.12M晶振

12.30P电容*2

13.9012三极管*5

14.led灯

15.蜂鸣器

16.四位一体共阳数码管

2.系统仿真图

附录2源程序

#include<

AT89X52.h>

#defineuintunsignedint

#defineucharunsignedchar//宏定义

#defineSETP3_1//定义调整键

#defineDECP3_2//定义减少键

#defineADDP3_3//定义增加键

#defineBEEPP3_6//定义蜂鸣器

#defineALAMP1_2//定义灯光报警

#defineDQP3_7//定义DS18B20总线I/O

bitshanshuo_st;

//闪烁间隔标志

bitbeep_st;

//蜂鸣器间隔标志

sbitDIAN=P0^5;

//小数点

ucharx=0;

//计数器

signedcharm;

//温度值全局变量

ucharn;

//温度值全局变量

ucharset_st=0;

//状态标志

signedcharshangxian=38;

//上限报警温度,默认值为38

signedcharxiaxian=5;

//下限报警温度,默认值为38

//ucharcodeLEDData[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};

ucharcodeLEDData[]={0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,0x47,0xDF,0xD7,0xCF,0xDA,0x9B,0xDC,0x9B,0x8B};

/*****延时子程序*****/

voidDelay_DS18B20(intnum)

{

while(num--);

}

/*****初始化DS18B20*****/

voidInit_DS18B20(void)

unsignedcharx=0;

DQ=1;

//DQ复位

Delay_DS18B20(8);

//稍做延时

DQ=0;

//单片机将DQ拉低

Delay_DS18B20(80);

//精确延时,大于480us

//拉高总线

Delay_DS18B20(14);

x=DQ;

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

Delay_DS18B20(20);

/*****读一个字节*****/

unsignedcharReadOneChar(void)

unsignedchari=0;

unsignedchardat=0;

for(i=8;

i>

0;

i--)

{

//给脉冲信号

dat>

>

=1;

if(DQ)

dat|=0x80;

Delay_DS18B20(4);

}

return(dat);

/*****写一个字节*****/

voidWriteOneChar(unsignedchardat)

i>

i--)

DQ=dat&

0x01;

Delay_DS18B20(5);

/*****读取温度*****/

unsignedintReadTemperature(void)

unsignedchara=0;

unsignedcharb=0;

unsignedintt=0;

floattt=0;

Init_DS18B20();

WriteOneChar(0xCC);

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

WriteOneChar(0x44);

//启动温度转换

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);

voidDelay(uintnum)

while(--num);

/*****初始化定时器0*****/

voidInitTimer(void)

TMOD=0x1;

TH0=0x3c;

TL0=0xb0;

//50ms(晶振12M)

voidcheck_wendu(void)

uinta,b,c;

c=ReadTemperature()-5;

//获取温度值并减去DS18B20的温漂误差

a=c/100;

//计算得到十位数字

b=c/10-a*10;

//计算得到个位数字

m=c/10;

//计算得到整数位

n=c-a*100-b*10;

//计算得到小数位

if(m<

0){m=0;

n=0;

}//设置温度显示上限

if(m>

99){m=99;

n=9;

}//设置温度显示上限

/*****显示开机初始化等待画面*****/

voidDisp_init(void)

P0=~0x80;

//显示----

P2=0x7F;

Delay(200);

P2=0xDF;

P2=0xF7;

P2=0xFD;

P2=0xFF;

//关闭显示

/*****显示温度子程序*****/

voidDisp_Temperature(void)//显示温度

P0=~0x98;

//显示C

Delay(400);

P0=~LEDData[n];

//显示个位

P0=~LEDData[m%10];

//显示十位

DIAN=0;

//显示小数点

P0=~LEDData[m/10];

//显示百位

P2=0xff;

/*****显示报警温度子程序*****/

voidDisp_alarm(ucharbaojing)

P0=~0x98;

P0=~LEDData[baojing%10];

P0=~LEDData[baojing/10];

if(set_st==1)P0=~0xCE;

elseif(set_st==2)P0=~0x1A;

//上限H、下限L标示

/*****报警子程序*****/

voidAlarm()

if(x>

=10){beep_st=~beep_st;

x=0;

if((m>

=shangxian&

&

beep_st==1)||(m<

xiaxian&

beep_st==1))

BEEP=0;

ALAM=0;

else

BEEP=1;

ALAM=1;

/*****主函数*****/

voidmain(void)

uintz;

InitTimer();

//初始化定时器

EA=1;

//全局中断开关

TR0=1;

ET0=1;

//开启定时器0

IT0=1;

IT1=1;

check_wendu();

for(z=0;

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

当前位置:首页 > PPT模板 > 商务科技

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

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