基于单片机的温度检测报警与万年历系统.docx

上传人:b****6 文档编号:5605612 上传时间:2022-12-28 格式:DOCX 页数:19 大小:306.08KB
下载 相关 举报
基于单片机的温度检测报警与万年历系统.docx_第1页
第1页 / 共19页
基于单片机的温度检测报警与万年历系统.docx_第2页
第2页 / 共19页
基于单片机的温度检测报警与万年历系统.docx_第3页
第3页 / 共19页
基于单片机的温度检测报警与万年历系统.docx_第4页
第4页 / 共19页
基于单片机的温度检测报警与万年历系统.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

基于单片机的温度检测报警与万年历系统.docx

《基于单片机的温度检测报警与万年历系统.docx》由会员分享,可在线阅读,更多相关《基于单片机的温度检测报警与万年历系统.docx(19页珍藏版)》请在冰豆网上搜索。

基于单片机的温度检测报警与万年历系统.docx

基于单片机的温度检测报警与万年历系统

 

基于单片机的温度检测报警与万年历系统

 

摘要·······················································1

一、设计要求与方案论证

1.1设计要求···········································1

1.2系统方案选择和论证·································1

1.3电路最终方案确定···································1

二、电子万年历与温度采集报警硬件设计和实现

2.1系统设计···········································2

2.1.1系统设计框图································2

2.1.2系统硬件需求介绍·····························3

2.2系统硬件各模块作用·································3

2.2.1单片机核心控制模块···························4

2.2.2数字温度传感器模块···························4

2.2.3彩屏显示电路模块·····························5

2.2.4蜂鸣器电路模块·························5

2.3系统电路图设计·······································6

2.3.1系统电路原理框图和原理图······················7

三、软件设计与分析

3.1系统软件流程图·······································8

3.1.1DS18B20程序流程图·······························8

四、系统测试

4.1测试工具·············································9

4.2软件测试·············································9

4.3硬件测试·············································10

参考文献·····················································11

附录一:

程序清单·············································12

附录二:

PCB电路图············································13

 

基于单片机的温度检测报警与万年历系统

摘要

温度检测报警系统也是在日常生活和工业应用非常广泛的工具,能实时采集周围的温度信息进行显示,程序内部设定有报警上下限,根据应用环境不同可设定不同的报警上下限。

此系统是基于STC89C52单片机设计的,包含液晶显示模块,DS18B20温度采集模块,键盘扫描模块,报警模块。

STC89C52作为控制核心,具有功耗低,功能强等特点,电压可选3到5V电源供电。

显示模块采用彩屏动态显示,对于显示数字、字母和汉字最为合适,而且与单片机连线简单,占用IO口相对较少。

温度检测报警模块采用数字式温度传感器DS18B20,该芯片具有精度高,测量范围广等优点,易与单片机连接,模块电路组成简单并同时具有温度报警功能。

关键词:

STC89C52,DS18B20,彩屏显示,采集周围设备温度、温度报警

 

一、设计要求与方案论证

1.1设计要求

1.1.1实时温度检测并显示

1.1.2具有时间调节设置功能,以及时间预设报警、温度报警等功能。

1.1.3可以保存上次设定的报警温度及报警方式。

1.2系统方案选择和论证

STC89C52单片机作为核心控制体,该单片机具有高可靠,超低价,低功耗,无法解密等优点。

该单片机属于双列直插式封装的PDI40口管脚。

具有4个输入输出端口,分别为PORT0,PROT1,PROT2,PROT3,其中P0口是一组8位漏极开路型双向IO口,校验时,要求接上拉电阻。

其他三个内部有30K的电阻,所以不用再外接电阻。

此单片机具有6个中断,其中包括三个定时器中断,二个外部中断,一个串口中断,为全双工通信口。

内部有静态非易失EEPROM和看门狗。

片内含8Kbbytes的可反复檫写的只读程序存储器(PEROM)和256bytes的随机存取数据存储器(RAM),功能强大,适合许多较为复杂的控制应用场合。

相比较其他芯片来说比较适合学生试验所用,故采用此单片机作为核心控制芯片。

DS18B20是数字式温度传感器,采用单总线通信协议。

DS18B20具有体积小,硬件开销低,抗干扰能力强,精度高附加功能强,封装形式多样等特点。

适合各种狭小空间内设备的数字测温和控制。

同时单线可挂接多个元件,因为每个元件都有唯一的一个64位光刻ROM编码,家族码为28H,可以多个也可单个操作。

电压测量范围是3.0V到5.5V。

内部含有EEPROM,其报警上、下限温度值和设定的分辨率倍数在芯片掉电的情况不丢失。

并且内部带有AD转换电路,技术较为成熟,所以采用此芯片最为合适。

采用彩屏显示各种数字信息较为合适,通过对单片机的编程来控制DS18B20芯片的读写操作来获取相应的信息,通过对定时器T0的编程可以实现时钟的形成,再通过对彩屏的编程控制将获取到的信息通过一系列转换从而全部显示到彩屏上。

最后达到有温度采集报警和电子万年历等功能。

1.3最终方案确定

核心控制体:

STC89C52单片机

数字式温度传感器:

DS18B20

总共设有四个按键,为节约资源考虑,每个按键都有多种功能。

每个按键分别标号为A,B,C,D.第一次按下B,C都没有反应,首先按下A键可选择指针位置,B,C键为加减键,D设置报警方式。

操作简单,按键灵活。

二、温度采集报警与电子万年历硬件设计和实现

2.1系统设计框图

图1系统组成框图

2.1.2系统硬件需求介绍

STC89C52单片机一片,DS18B20数字式温度传感器一个,+5V无源蜂鸣器二个,12MHZ晶振一个,多个按键和开关,常用电容电阻,连接线,三极管,二极管若干,滑动变阻器一个。

2.2系统硬件各模块作用

2.2.1单片机核心控制模块

核心控制器件选用STC89C52单片机。

STC89C52单片机为40管脚双列直插芯片,它是一种高性能,低功耗的8位CMOS微处理器芯片,市场应用最多。

而且价格便宜,控制方便,便于应用有4个I/O口分别为P1,P2,P3,P4。

其中每一个管脚都能做独立的输入输出管脚,它的第9脚位复位管脚,接上电容和上拉电阻再带个开关构成复位电路。

18,19管脚接外部晶振和两个微调电容构成外部晶振电路。

单片机,复位电路,晶振,5V电源构成单片机最小系统。

其中与AT89S52单片机管脚容。

图1单片机最小电路

图2为单片机最小电路,其中晶振频率可以根据自己需要进行选择,范围在0-24MHZ,常用12MHZ。

复位电路得电容一般用10UF,但并不唯一,只要RC所得时间大于两个机器周期即可。

还有其P0内部无上拉电阻,所以在执行输出功能时,外部必须接上拉电阻(一般10K即可)。

P0口有的作用,接上液晶的DB0-DB7(数据总线)控制着向液晶发送8位并行数据。

P2^7接上DS18B20的单数据线,发送并接受数据,地址的操作。

P3^0到P3^3作为独立按键口。

P1^7口控制蜂鸣器的报警,当温度、到达限定值时会发出高低电平脉冲,以至发出报警声音。

2.2.2数字温度传感器模块

(1)用Pt100外围电路接法麻烦,需要A/D转换,不好调试,计算量大,编程麻烦。

(2)数字温度传感器选用DS18B20,采用单总线通信协议,接法简单,精度高,容易编程。

故选用DS18B20

DS18B20主要特性有:

1、适应电压范围更宽,电压范围:

3.0~5.5V,在寄生电源方式下可由数据线供电。

2、独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。

3、DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温

4、DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内。

5、温范围-55℃~+125℃,在-10~+85℃时精度为0.5℃。

6、可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温。

7、在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快。

8、测量结果直接输出数字温度信号,以"一线总线"串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力。

9、负压特性:

电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。

DS1820的操作指令分为ROM操作命令和存储器操作命令:

(1)、ROM操作命令及其含义

SkipROM指令代码(CCh):

此命令执行后的存储器操作将针对在线的所有DS1820。

AlarmSearch指令代码(ECh):

当温度值高于TH或低于TL中的数值时,此命令可以读出报警的DS1820。

 

(2)、存储器操作指令代码及其含义 

ReadScratchpad指令代码(BEh):

读取温度寄存器的温度值。

CopyScratchpad指令代码(48h):

将温度寄存器的数值拷贝到EERAM中,保证温度值不丢失。

ConvertT指令代码(44h):

启动在线DS1280做温度A/D转换。

RecallE2指令代码(B8h):

将EERAM中的数值拷贝到温度寄存器中。

温度测量步骤如下:

(1).ReadROM(33 h),每次对DS1820进行操作之前都要对它进行初始化,主要目的在于确定传感器已经连接到单总线上。

(2).SearchROM(F0h),这条指令使处理器用排除的方法去辨别总线上的DS1820。

(3).MatchROM(55h),只有准确的符合64位ROM序列的DS1820才能响应其后的指令,当然,单点测温时可以使用Skip ROM(CCh)指令来跳过这一步。

(4).ConvertT(44h),发完指令后应查询总线上的电平,当电平位高时温度转换完成。

(5).ReadScratchpad(BEh),将读指令发出后,就可从总线上读得表示温度的2字节二进制数

由于采用单总线数据传输方式,DS18B20的数据I/O均由同一条线完成,因此,对读写的操作时序要求严格。

为了保证DS18B20的严格I/O时序。

需要做较精确的延时。

它的各种时序如下图所示:

DS18B20初始化时序

图2DS18B20温度传感器

DS18B20采用+5V电源供电

图3彩屏液晶部分电路连接图

2.2.3蜂鸣器电路模块

图4温度报警

蜂鸣器用CS9013三极管驱动,蜂鸣器用5V的无源蜂鸣器,,同时在三极管基极串接个限流电阻,数据端口接P1^7(由单片机的P1^7直接输出驱动)。

2.3系统电路图设计

2.3.1系统原理框图和原理图

图8系统原理框图

下面是系统硬件电路连线图(原理图)

图4总原理图

三、软件测试与分析

3.1.1主程序流程图

 

 

3.1.2DS18B20程序流程图

 

四、系统测试

4.1测试工具

Pcb电路板

4.2软件测试

数字式温度传感器功能强大,芯片简化了硬件电路设计的同时也无形加大了软件编写的复杂程度,为方便程序的调试和提高效率,故将软件编写分模块进行,先将实时时钟模块一步步调试,按照时序图将读写函数写好后,会显示秒部分,并准时走,但液晶屏不稳定,有一些乱码和光标乱闪。

经检查发现有些发生地址重叠的冲突,写按键部分程序是发现调节好后在最后刷新屏幕时调节好的时间没有读取到,不断调节,不断烧写进学习板,然后看结果,最终发现时没有将调节好的时间读取到寄存器中。

加上温度传感器部分后发现在调节时间时出现乱码和不稳定现象,光标乱跳的现象。

经过不断检查软件,发现在按键调节时软件读取温度值的标志位是允许的,也就是说它在调节时间时又在动态显示周围环境中的温度值,这样会导致光标不稳定的现象。

经过再添加keyxuan标志允许位时,这个问题得到很好的解决。

在软件编写的过程中遇到非常多的问题,远远不止这些。

4.3硬件测试

首先单片机最小系统的设计几乎都是统一的,DS18B20接线灵活,IO口的设置具有多样性,用杜邦线将彩屏与单片机学习板按照电路原理图连接好,经过不断的软件,硬件的反复修改,最终实现了软件编写的目标功能!

 

参考资料

一、例说51单片机(C语言版),人民邮电出版社。

二、全国大学生电子设计竞赛单片机应用技能精解,电子工业出版社。

三、快速精通AltiumDesigner6电路图和PCB设计,化学工业出版社。

四、郭天祥视频讲解《十天征服单片机》,与配套资料。

 

附录一:

PCB电路图:

附录二:

部分程序

主程序:

voidmain(void)

{

in=Byte_read(0x2000);

delay_05ms

(1);

T1_init();

CS=1;

delayms(5);

RES=0;

delayms(5);

RES=1;

delayms(5);

ILI9325_Initial();

ClearScreen(0xf800);

while

(1)

{

datachange();/////////数据处理及及显示函数///////////

buttonscan();

select();

shanshuo();

}

}

DS18B20温度采集程序:

/******************************************************************/

/*函数声明*/

/******************************************************************/

voiddelay1(ucharMS);

unsignedintReadTemperature(void);

voidInit_DS18B20(void);

unsignedcharReadOneChar(void);

voidWriteOneChar(unsignedchardat);

voiddelay(unsignedinti);

voidtimechuli();

voidT1_init()

{

TMOD=0x11;

TH0=0xef;

TL0=0xf0;

IE=0x82;

TR0=1;

TH1=0x3c;

TL1=0xb0;

ET1=1;

EA=1;

TR1=1;

count=0;

}

voidzhongduan()interrupt3

{

TH1=0x3c;

TL1=0xb0;

count111++;

shanjishu++;

//shanjishu1();

timechuli();

}

/******************************************************************/

/*定时器中断*/

/******************************************************************/

voidtim(void)interrupt1using1//中断,用于数码管扫描和温度检测间隔

{

TH0=0xef;//定时器重装值

TL0=0xf0;

num++;

if(num==50)

{

num=0;

flag_get=1;//标志位有效

second++;

if(second>=60)

{

second=0;

minute++;

}

}

}

/******************************************************************/

/*延时函数*/

/******************************************************************/

voiddelay(unsignedinti)//延时函数

{

while(i--);

}

/******************************************************************/

/*初始化*/

/******************************************************************/

voidInit_DS18B20(void)

{

unsignedcharx=0;

DQ=1;//DQ复位

delay(8);//稍做延时

DQ=0;//单片机将DQ拉低

delay(80);//精确延时大于480us

DQ=1;//拉高总线

delay(10);

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

delay(5);

}

/******************************************************************/

/*读一个字节*/

/******************************************************************/

unsignedcharReadOneChar(void)

{

unsignedchari=0;

unsignedchardat=0;

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

{

DQ=0;//给脉冲信号

dat>>=1;

DQ=1;//给脉冲信号

if(DQ)

dat|=0x80;

delay(5);

}

return(dat);

}

/******************************************************************/

/*写一个字节*/

/******************************************************************/

voidWriteOneChar(unsignedchardat)

{

unsignedchari=0;

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

{

DQ=0;

DQ=dat&0x01;

delay(5);

DQ=1;

dat>>=1;

}

delay(5);

}

/******************************************************************/

/*读取温度*/

/******************************************************************/

unsignedintReadTemperature(void)

{

unsignedchara=0;

unsignedintb=0;

unsignedintt=0;

Init_DS18B20();

WriteOneChar(0xCC);//跳过读序号列号的操作

WriteOneChar(0x44);//启动温度转换

delay(200);

Init_DS18B20();

WriteOneChar(0xCC);//跳过读序号列号的操作

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

a=ReadOneChar();//低位

b=ReadOneChar();//高位

b<<=8;

t=a+b;

return(t);

}

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

当前位置:首页 > 经管营销 > 经济市场

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

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