基于单片机的温度报警器设计.docx

上传人:b****6 文档编号:3356486 上传时间:2022-11-22 格式:DOCX 页数:8 大小:948.93KB
下载 相关 举报
基于单片机的温度报警器设计.docx_第1页
第1页 / 共8页
基于单片机的温度报警器设计.docx_第2页
第2页 / 共8页
基于单片机的温度报警器设计.docx_第3页
第3页 / 共8页
基于单片机的温度报警器设计.docx_第4页
第4页 / 共8页
基于单片机的温度报警器设计.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

基于单片机的温度报警器设计.docx

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

基于单片机的温度报警器设计.docx

基于单片机的温度报警器设计

温度报警器

1、作品介绍:

我个人设计的温度报警器是基于51单片机开发的一种能时时检测温度,并且报警的器件,它采用AT89S52单片机、DS18B20、1602液晶显示器等电学元器件,通过编写程序和一定的算法,最终实现的功能是:

开机后单片机自动运行一套程序,使DS18B20检测室内的温度,并通过一定的算法对数据采样处理,计算出室内的温度,通过1602液晶显示器显示出来,当室温超过设定的值时,单片机驱动峰鸣发出声音!

2、器件介绍:

a、AT89S52单片机:

AT89S52是一种低功耗、高性能8位微控制器,具有8K在系统可编程Flash存储器。

使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。

片上Flash允许程序存储器在系统可编程,亦适于常规编程器。

在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52在众多嵌入式控制应用系统中得到广泛应用。

b、DS18B20测温芯片:

DS18B20数字温度传感器,采用DALLAS公司生产的DS18B20可组网数字温度传感器芯片封装而成,具有耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。

DS18B20单线数字温度传感器,即“一线器件”,其具有独特的优点:

⏹    

(1)采用单总线的接口方式与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。

单总线具有经济性好,抗干扰能力强,适合于恶劣环境的现场温度测量,使用方便等优点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。

⏹    

(2)测量温度范围宽,测量精度高DS18B20的测量范围为-55℃~+125℃;在-10~+85°C范围内,精度为±°C。

⏹    (3)在使用中不需要任何外围元件。

⏹    (4)持多点组网功能多个DS18B20可以并联在惟一的单线上,实现多点测温。

⏹    (5)供电方式灵活DS18B20可以通过内部寄生电路从数据线上获取电源。

因此,当数据线上的时序满足一定的要求时,可以不接外部电源,从而使系统结构更趋简单,可靠性更高。

⏹    (6)测量参数可配置DS18B20的测量分辨率可通过程序设定9~12位。

⏹    (7)负压特性电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。

⏹(8)掉电保护功能DS18B20内部含有EEPROM,在系统掉电以后,它仍可保存分辨率及报警温度的设定值。

⏹    DS18B20具有体积更小、适用电压更宽、更经济、可选更小的封装方式,更宽的电压适用范围,适合于构建自己的经济的测温系统,因此也就被设计者们所青睐。

DS18B20管脚排列:

C、1602液晶:

1602液晶也叫1602字符型液晶它是一种专门用来显示字母、数字、符号等的点阵型液晶模块它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符。

每位之间有一个点距的间隔每行之间也有也有间隔起到了字符间距和行间距的作用,正因为如此所以他不能显示图形(用自定义CGRAM,显示效果也不好)

1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。

目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶

图片:

管脚功能:

3、程序代码:

#include<>;//将小数点的字符常量写入LCD

delaynms(50);//延时1ms给硬件一点反应时间

}

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

函数功能:

显示温度的单位(Cent)

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

voiddisplay_cent(void)

{

unsignedchari;

WriteAddress(0x4c);//写显示地址,将在第2行第13列开始显示

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

WriteData(user[i]);

WriteAddress(0x4b);

delaynms(5);

WriteData(0x00);

}

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

函数功能:

显示温度的整数部分

入口参数:

x

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

voiddisplay_temp1(unsignedcharx)

{

unsignedcharj,k,l;//j,k,l分别储存温度的百位、十位和个位

j=x/100;//取百位

k=(x%100)/10;//取十位

l=x%10;//取个位

WriteAddress(0x46);//写显示地址,将在第2行第7列开始显示

if(flag==1)//负温度时显示“—”

{

WriteData(digit[10]);//将百位数字的字符常量写入LCD

}

else{

WriteData(digit[j]);//将十位数字的字符常量写入LCD

}

WriteData(digit[k]);//将十位数字的字符常量写入LCD

WriteData(digit[l]);//将个位数字的字符常量写入LCD

delaynms(50);//延时1ms给硬件一点反应时间

}

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

函数功能:

显示温度的小数数部分

入口参数:

x

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

voiddisplay_temp2(unsignedcharx)

{

WriteAddress(0x4a);//写显示地址,将在第2行第11列开始显示

WriteData(digit[x]);//将小数部分的第一位数字字符常量写入LCD

delaynms(50);//延时1ms给硬件一点反应时间

}

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

函数功能:

主函数

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

voidmain(void)

{

unsignedcharTL;//储存暂存器的温度低位

unsignedcharTH;//储存暂存器的温度高位

unsignedcharTN;//储存温度的整数部分

unsignedcharTD;//储存温度的小数部分

LcdInitiate();//将液晶初始化

delaynms(5);//延时5ms给硬件一点反应时间

if(Init_DS18B20()==1)

display_error();

display_explain();

display_symbol();//显示温度说明

display_dot();//显示温度的小数点

display_cent();//显示温度的单位

while

(1)//不断检测并显示温度

{flag=0;

ReadyReadTemp();//读温度准备

TL=ReadOneChar();//先读的是温度值低位

TH=ReadOneChar();//接着读的是温度值高位

if((TH&0xf8)!

=0x00)//判断高五位得到温度正负标志

{

flag=1;

TL=~TL;//取反

TH=~TH;//取反

tltemp=TL+1;//低位加1

TL=tltemp;

if(tltemp>255)TH++;//如果低8位大于255,向高8位进1

TN=TH*16+TL/16;//实际温度值=(TH*256+TL)/16,即:

TH*16+TL/16

//这样得出的是温度的整数部分,小数部分被丢弃了

TD=(TL%16)*10/16;//计算温度的小数部分,将余数乘以10再除以16取整,

}

TN=TH*16+TL/16;//实际温度值=(TH*256+TL)/16,即:

TH*16+TL/16

//这样得出的是温度的整数部分,小数部分被丢弃了

TD=(TL%16)*10/16;//计算温度的小数部分,将余数乘以10再除以16取整,

//这样得到的是温度小数部分的第一位数字(保留1位小数)

display_temp1(TN);//显示温度的整数部分

display_temp2(TD);//显示温度的小数部分

delaynms(10);

}

}

4、应用:

此作品的设计虽然是为了练习单片机的使用,但是它也有一定的使用价值,比如最简单的,可以把它放在室内,检测温度。

当然也可以用在工业上,进行温度的报警控制等。

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

当前位置:首页 > 小学教育 > 语文

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

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