温度报警器.docx

上传人:b****5 文档编号:12700036 上传时间:2023-04-21 格式:DOCX 页数:19 大小:186.50KB
下载 相关 举报
温度报警器.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.项目名称

项目名称:

设计制作远程温度报警器

2.项目要求

1)用keilC51、Proteux、EAXY下载软件作开发工具;

2)用AT89C51单片机作控制,采用串行通信方式传送数据。

3)主机LED作显示,显示时间、报警温度值。

4)从机LED显示,具有测试温度,高于20oC,低于0oC自动报警和传送温度数据的功能

5)信号距离8~10m

6)发挥扩充功能,如温度巡查,记录及读出报警时间、报警温度、报警位置,

清除报警数据、声音报警等。

2、任务

1)拟定总体设计制作方案;

2)拟定硬件电路;

3)编制软件流程图及设计相应源程序;

4)仿真调试远程温度报警器;

5)安装元件,制作远程温度报警器,调试功能指标;

6)完成项目评估。

 

2、总体设计思路

实现思路与框图设计

基本功能部分的实现思路是:

用一个AT89C51单片机从机,控制温度,读出数据,判断温度是否进行本地报警,发送温度数据及本地地址。

用一个AT89C51单片机作主机,控制时钟电路,读出温度数据,并显示时间,接受从机报警信号。

报警采用输出脉冲控制发光二极管实现。

采用DX18B20为单总线器件,可用一个单片机控制多个DX48B20,设计时可以用点对点双机通信构成多点温度测试报警器。

为了通信的稳定和数据的识别,用简单的通信协议:

主机、从机工作在通信方式1,波特率为9600bpx。

当温度超出正常范围,从机发送主机的编号(如06)主机发送答应信号(如主机编号06)从机接到应答后发送数据长度3,接着发送2字节尾部数据和本机编号(01),主机接送完温度数据和本机编号(3字节数)据后发送接收成功信号(如0f)。

从机受到接受成功信号后停止发送数

液晶显示

 

AT89C51

主机

时钟电路

电源电路

键盘

复位电路

通信

DS1302

DS18B20

电源电路

复位电路

时钟电路

数码管显

通信

 

AT89C51

从机

2

远程器温度报警器程序设计

发送程序

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitDQ=P3^7;

#defineduanP0

#defineweiP2

ucharmu;

ucharcodeseg_w[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

ucharcodeseg_d[]=

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

/***************延时毫秒子函数****************/

voiddelay(uintmun)

{uintx,y;

for(x=mun;x>0;x--)

for(y=10;y>0;y--);

}

/*************延时微秒函数**********************/

voiddelay_ms(uinti)

{

while(i--);

}

/************ds18b20复位信号*****************/

reset()

{

DQ=1;

delay_ms(4);

DQ=0;

delay_ms(100);

DQ=1;

delay_ms(40);

}

/***************写八位子函数************/

voidwrite_byte(ucharval)

{uchari;

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

{

DQ=0;

DQ=val&0x01;

delay_ms(10);

DQ=1;

val>>=1;

}

}

/***********读八位函数*************/

uintread_byte()

{uchari;

ucharval=0;

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

{

DQ=0;

val>>=1;

DQ=1;

if(DQ)

{

val|=0x80;

}

delay_ms(10);

}

return(val);

}

/*************读温度子函数******************/

uintread_temp()

{

uchara,b;

uinttemp,tt;

reset();

write_byte(0xcc);

write_byte(0x44);

reset();

write_byte(0xcc);

write_byte(0xbe);

a=read_byte();

b=read_byte();

temp=b;

temp<<=8;

temp=temp|a;

if(temp<0x0fff)

mu=0;

else

{temp=~temp+1;

mu=1;

}tt=temp*(0.0625);

temp=tt*10+0.5;

return(temp);

}

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

voidinit_ser()

{

TMOD=0X20;

TL1=0XFD;

TH1=0XFD;

TR1=1;

SCON=0X50;

PCON=0X00;

}

/********发送一个字符************/

voidsend(ucharzf)

{

SBUF=zf;

while(TI!

=1);

TI=0;

}

/*****************扫描**********************/

voiddisplay(ucharbai,ucharshi,ucharge,uchardian,ucharzong)

{

if(zong>999)//高位消隐

{

wei=0xff;

duan=seg_d[bai];

wei=seg_w[3];

delay(10);

}

wei=0xff;

duan=seg_d[shi];

wei=seg_w[2];

delay(10);

wei=0xff;

duan=seg_d[ge]+0x80;

wei=seg_w[1];

delay(10);

wei=0xff;

duan=seg_d[dian];

wei=seg_w[0];

delay(10);

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

main()

{uinttemp;

ucharbai,shi,ge,dian,zong;

while

(1)

{

init_ser();

temp=read_temp();//读取温度

send(temp/10);//发送温度

zong=temp;

bai=temp/1000;

shi=temp%1000/100;

ge=temp%100/10;

dian=temp%10;

display(bai,shi,ge,dian,zong);

}

}

接收程序

#include

#defineucharunsignedchar

#defineuintunsignedint

ucharbuf[]={0};

sbitRS=P2^5;//1602的数据/指令选择控制线

sbitRW=P2^6;//1602的读写控制线

sbiten=P2^7;//1602的使能控制线

ucharcodetable[]="dz1002—NO.2";

ucharcodetable1[]="0123456789c.";

#definelcd1602P0

ucharg,s,b;

sbitfm=P2^0;

sbitled=P2^1;

/*********延时子函数**************/

voiddelay(uintmun)

{uinti,j;

for(i=0;i

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

}

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

voidinit_ser()

{

TMOD=0X20;

TL1=0XFD;TH1=0XFD;TR1=1;SCON=0X50;PCON=0X00;

}

/********接收一个字符************/

voidjieshou()

{while(!

RI);

buf[0]=SBUF;RI=0;

b=buf[0]/100;

s=buf[0]%100/10;

g=buf[0]%10;}

/******************1602写命令函数*******************/

voidlcd_xm(ucharcom)

{

RS=0;//选择指令寄存器

RW=0;//选择写

lcd1602=com;

delay

(1);

EN=1;

EN=0;

}

/******************1602写数据函数********************/

voidlcd_xs(uchardat)

{

RS=1;//选择数据寄存器

RW=0;//选择写

lcd1602=dat;

delay

(1);

EN=1;

EN=0;

}

/******************1602初始化函数************************/

voidlcd_init()//1602初始化函数

{

lcd_xm(0x38);

lcd_xm(0x0c);

lcd_xm(0x06);

lcd_xm(0x01);

}

/*************二极管收到显示部分****************************/

voidLED_XS()

{

led=0;

delay(100);

led=1;

}

/***************蜂鸣器接收蜂鸣部份**************************/

voidfenming()

{

fm=0;

delay(10);

fm=1;

delay(10);

LED_XS();

fm=0;

delay(50);

fm=1;

delay(50);

LED_XS();

fm=0;

delay(100);

fm=1;

delay(100);

LED_XS();

fm=0;

delay(200);

fm=1;

delay(200);

LED_XS();

}

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

voidmain()

{

ucharn,m=0;

lcd_init();//液晶初始化

init_ser();

while

(1)

{jieshou();

lcd_xm(0x80);

for(m=0;m<16;m++)

{lcd_xs(table[m]);}

lcd_xm(0x80+0x44);

lcd_xs(table1[s]);

lcd_xs(table1[g]);

lcd_xs(table1[10]);

lcd_xs(table1[12]);

lcd_xs(table1[b]);

lcd_xs(table1[11]);n=1;

if(g<=2)

{while(n--)fenming();

}

}

}

3、原理图设计

远程器温度报警器原理图设计

4、程序设计

远程器温度报警器程序设计

5、仿真

仿真模型与结果

发送仿真模型

接收仿真模型

6、元器件的安装

安装效果图

 

7、远程温度报警器调试

调试

指标

1.报警和温度显示

2.串口通信

调试方法步骤

步骤:

1.利用KeiluVixixon2的调试功能,根据错误提示,双击提示找到错误代码,排除各种语法错误。

2通过对端口、子函数入口参数赋值、变量赋值,对存储空间、端口数据、变量数据进行观察,以单步调试的方式调试子程序和主程序。

3.编译成.HEX文件。

4.用Proteux按原理图电路,放置元件电阻(res、pullup)、电容(cap)、晶振(cryxtal)、AT89C51、DS18B20、数码管、液晶(LM016L)、发光二极管(LED)、二极管(BAX16)、、按键(button)、电位器(PTO-HK)、电源、地等。

设计仿真模型图,设置好元件属性,以发光二极管指示开锁继电器状态进行仿真调试。

5.仿真调试成功后,按原理图把元件安装焊接在实验板上,下载程序,并进行静态和动态检测。

6.烧录,hex文件到AT89C51芯片,运行程序,如不能运行,先排除各种故障(供电、复位、时钟、内外存储空间选择、软硬件端口分配是否一致等)。

7.测试远程温度报警器功能、性能分析测试是否达到性能指标。

8.如没有达到性能指标,根据性能指标,调整电路或元件参数、优化程序,重新调试、编译、下载、运行程序、测试性能指标。

 

调试

数据

记录

主机温度显示:

14°c从机温度显示:

14°c

主机温度显示:

20°c从机温度显示:

20°c

主机温度显示:

45°c从机温度显示:

45°c

 

结果及分析

在本次的的制作远程温度报警器过程中,初步掌握了对串口通信的使用和DX18B20的使用,并对单片机的了解更加的多了。

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

当前位置:首页 > 农林牧渔 > 水产渔业

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

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