基于红外线的温度声光报警系统Word格式文档下载.doc

上传人:b****3 文档编号:15505896 上传时间:2022-11-02 格式:DOC 页数:15 大小:119.50KB
下载 相关 举报
基于红外线的温度声光报警系统Word格式文档下载.doc_第1页
第1页 / 共15页
基于红外线的温度声光报警系统Word格式文档下载.doc_第2页
第2页 / 共15页
基于红外线的温度声光报警系统Word格式文档下载.doc_第3页
第3页 / 共15页
基于红外线的温度声光报警系统Word格式文档下载.doc_第4页
第4页 / 共15页
基于红外线的温度声光报警系统Word格式文档下载.doc_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

基于红外线的温度声光报警系统Word格式文档下载.doc

《基于红外线的温度声光报警系统Word格式文档下载.doc》由会员分享,可在线阅读,更多相关《基于红外线的温度声光报警系统Word格式文档下载.doc(15页珍藏版)》请在冰豆网上搜索。

基于红外线的温度声光报警系统Word格式文档下载.doc

4.数码管

本方案采用的是八段共阳极数码管,通过动态扫描方式显示数据。

5.蜂鸣器

采用无源蜂鸣器,给输入引脚接上不同频率的方波,可以产生不同音阶的声音。

本实验采用1000hz。

四.方案设计过程

红外发送编码参考了nec协议并稍作修改。

定义了起始码为9ms低电平和4ms的高电平。

低电平‘0’定义为1ms的低电平和1ms的高电平,高电平‘1’定义为1ms的低电平和3ms的高电平。

38k载波采用定时器0的8位自动重装模式,初值0xf4。

在设计过程中,使用示波器测量发送接收的波形,基本一样,没有误差。

收发有效距离为1米,超过1米数据显示错误,本方案还有很大的提高空间

五.实验源程序

发送main.c

#include<

reg52.h>

sbitCarryWave=P1^7;

sbitir_send=P1^6;

voidTransData(unsignedchar_data);

voidCarrierWaveInit(void);

voiddelay_ms(unsignedintt);

voidConfigTimer0(unsignedintms);

voidTransData2(unsignedchar_data2);

externbitStart18B20();

externbitGet18B20Temp(int*temp);

bitflag1s=0;

bitres=0;

inttemp;

//读取到的当前温度值

unsignedcharT0RH=0;

//T0重载值的高字节

unsignedcharT0RL=0;

//T0重载值的低字节

unsignedcharintT,decT;

voidmain()

{

EA=1;

PT1=1;

ConfigTimer0

(1) ;

CarrierWaveInit();

Start18B20();

//启动DS18B20

while

(1)

{

TransData(intT);

TransData2(decT);

if(flag1s)//每秒更新一次温度

{

flag1s=0;

res=Get18B20Temp(&

temp);

//读取当前温度

if(res)//读取成功时,刷新当前温度显示

{

intT=temp>

>

4;

// intT=intT/16+intT%16;

//分离出温度值整数部分

decT=temp&

0xF;

//分离出温度值小数部分

decT=decT*10/16;

// a=intT/10;

//整数部分数据处理

// b=intT%10;

}

Start18B20();

//重新启动下一次转换

}

}

}

voidTransData(unsignedchar_data)

{

unsignedchari;

ir_send=0;

delay_ms(9);

ir_send=1;

//输出0

delay_ms(4);

//4ms的启动低电平

for(i=0;

i<

8;

i++)

ir_send=0;

//输出1

delay_ms

(1);

if(_data&

(1<

<

i))

{ir_send=1;

delay_ms(3);

}//1左移i位,先发低位

//如果发送1则高低电平比为1:

1

else

{ir_send=1;

delay_ms

(1);

}//如果发送0则高低电平比为1:

3

ir_send=1;

//delay_ms(300);

voidTransData2(unsignedchar_data2)

{ unsignedcharj;

for(j=0;

j<

j++)

if(_data2&

j))

ir_send=1;

/************定时器1初始化函数************

***函数名:

CarrierWaveInit()

***参数:

***功能:

38K载波信号定时器初始化

***返回值:

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

voidCarrierWaveInit(void)

EA=1;

TMOD&

=0x0f;

//清零T0的控制位

TMOD|=0x20;

//八位自动重装模式

TH1=0XF4;

//38k载波信号

TL1=0XF4;

ET1=1;

//打开

TR1=1;

/*********定时器1中断函数载波发生*********

//////////////////////////////////////////

CarrierWave()

定时器中断产生38KHZ载波信号

voidCarrierWave(void)interrupt3

CarryWave=~CarryWave;

voiddelay_ms(unsignedintt)//误差-0.651041666667us

unsignedchara,b;

for(;

t>

0;

t--)

for(b=4;

b>

b--)

for(a=43;

a>

a--);

voidConfigTimer0(unsignedintms)

unsignedlongtmp;

//临时变量

tmp=11059200/12;

//定时器计数频率

tmp=(tmp*ms)/1000;

//计算所需的计数值

tmp=65536-tmp;

//计算定时器重载值

tmp=tmp+12;

//补偿中断响应延时造成的误差

T0RH=(unsignedchar)(tmp>

8);

//定时器重载值拆分为高低字节

T0RL=(unsignedchar)tmp;

=0xf0;

TMOD|=0x01;

//配置T0为模式1

TH0=T0RH;

//加载T0重载值

TL0=T0RL;

ET0=1;

//使能T0中断

TR0=1;

//启动T0

/*T0中断服务函数,完成1秒定时*/

voidInterruptTimer0()interrupt1

staticunsignedinttmr1s=0;

//重新加载重载值

tmr1s++;

if(tmr1s>

=700)//定时1s

{

tmr1s=0;

flag1s=1;

}

}

18b20.源程序

#include<

intrins.h>

sbitIO_18B20=P

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

当前位置:首页 > 经管营销 > 财务管理

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

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