100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 红外测距模块 51单片机_基于51单片机的红外发射和接收程序。

红外测距模块 51单片机_基于51单片机的红外发射和接收程序。

时间:2019-04-14 04:51:50

相关推荐

红外测距模块 51单片机_基于51单片机的红外发射和接收程序。

在项目开发时为了实现远程通信,需要用到无线通信,无线遥控方式可分为无线电波式、声控式、超声波式和红外线式。由于无线电式容易对其它电视机和无线电通讯设备造成干扰,而且,系统本身的抗干扰性能也很差,误动作多,所以未能大量使用。超声波式频带较窄,易受噪声干扰,系统抗干扰能力差以及声控式识别正确率低,难度大而未能大量采用。红外遥控方式是以红外线作为载体来传送控制信息的,同时随着电子技术的发展,单片机的出现,催生了数字编码方式的红外遥控系统的快速发展。另外,红外遥控具有很多的优点,例如红外线发射装置采用红外发光二极管,遥控发射器易于小型化且价格低廉;采用数字信号编码和二次调制方式,不仅可以实现多路信息的控制,增加遥控功能,提高信号传输的抗干扰性,减少误动作,而且功率消耗低;红外线不会向室外泄露,不会产生信号串扰;反应速度快、传输效率高、工作稳定可靠等。所以现在很多无线遥控方式都采用红外遥控方式。这里把红外发射和接收的程序分享给大家。

红外发射程序

#include

#include

#define uchar unsigned char

#define uint unsigned int

sbit key1=P3^3;

sbit key2=P3^4;

sbit key3=P3^5;

sbit LED=P1^0; //发射指示灯

sbit out=P3^7;

uchar i,a,num1;

void init()//初始化作用

{ key1=1;

key2=1;

key3=1; }

void delay(uchar aa)

{ uchar bb,cc;

for(bb=aa;bb>0;bb--)

for(cc=200;cc>0;cc--); }

void delayms(uchar aa)//延时程序

{

for(a=aa;a>0;a--)

{

_nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_(); }

}

void khz(uchar aa)//是发射38KHZ的程序

{

for(a=aa;a>0;a--) //这个for语句可以得到准确的26.3波特率

{

out=0;

i=7; //低了17us

while(i>0)i--; // 38kHZ

out=1;

//高了9us 17+9=26us 比26.3快一点点

}

}

void fashu(uchar num)

{ khz(116);//发射3ms 38khz

delayms(125);

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

{

khz(40);

if(num&0x01)

delayms(93);//delay 1.5ms

else

delayms(65);//delay 1ms

num=num>>1;

}

khz(20); }

void tishi()

{

LED=0;

delay(50);

LED=1;

delay(50);

LED=0;

delay(50);

LED=1; }

void keyscan()//按键扫描

{

if(key1==0)

{

_nop_();_nop_();_nop_();_nop_();

_nop_();_nop_();_nop_();_nop_();

if(key1==0)

{

while(!key1);

fashu(0xf3);

tishi();

}

}

if(key2==0)

{

_nop_();_nop_();_nop_();_nop_();

_nop_();_nop_();_nop_();_nop_();

if(key2==0)

{

while(!key2);

fashu(0x3f);

tishi();

} }

if(key3==0)

{

_nop_();_nop_();_nop_();_nop_();

_nop_();_nop_();_nop_();_nop_();

if(key3==0)

{

while(!key3);

fashu(0xf5);

tishi();

} } }

void main()

{

init();

while(1)

{

keyscan();

} }

红外接收程序

#include

#include

#define uchar unsigned char

#define uint unsigned int

sbit led1=P1^0;

sbit led2=P1^1;

sbit led3=P1^2;

sbit in=P3^2;

uchar i,a,num;

bit fleg;

void init()

{

fleg=1;

in=1;

EA=1;

EX0=1;

IT0=1; }

void delayms(uchar aa)

{

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

{

_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();

} }

void main()

{

init();

while(1); }

void sieasdf() interrupt 0

{

EX0=0;

for(a=5;a>0;a--)

{

delayms(35);//延时0.5ms 判断5次 5*0.5=2.5ms

if(in)fleg=0;

}

if(fleg)

{

delayms(72);//延时1ms 判断是不是高电平了

if(in)

{

delayms(115);//延时让它超过2ms; 2.5+1+1.623=5.123ms 开始读数据

delayms(118);//若偏移一位,可以去掉。

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

{

while(!in);

delayms(86);//延时1.188ms 判断IO高低,从而得0或1

num=num>>1;

if(in)

{

num=num|0x80;

delayms(31);//延时0.6ms 因为上面延时1.2ms+0.6 刚好跳过1.5ms

}

}

P2=num; } }

fleg=1;

EX0=1; }

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。