利用单片机实现红外遥控的功能,遥控器类型是car mp3的。所发出的编码有用户码、用户反码,数据码,数据反码,采用的是利用P3.2端口的下降沿触发中断函数来进行解码(数据0或者1)的判断,从而来进行接收。红外遥控器所发射出来的编码与单片机所接收的编码是属于反码的关系,这点很重要。这里我采用的接收方是hx1838集成芯片,放大与接收于一体。
#include
#include
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar code table2[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
sbit ir=P3^2;
sbit duan=P2^6;
sbit wei=P2^7;
uchar ircode[4];
uchar disp[8];
void delay_ms(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
} //11.0592M约为xms延时程序
void delay_us(uchar x)
{
uchar i;
while(x--)
{
for(i=0;i<12;i++)
{
_nop_();
}
}
} //11.0592M下的约为0.14ms延时程序
void init_int0()
{
EA=1; //打开总中断
EX0=1;//打开外部中断0
IT0=1;//设置为下降沿触发
ir=1;
}
void data_pros()
{
disp[0]=ircode[0]>>4;//高四位
disp[1]=ircode[0]&0x0f;//低四位
disp[2]=ircode[1]>>4;
disp[3]=ircode[1]&0x0f;
disp[4]=ircode[2]>>4;
disp[5]=ircode[2]&0x0f;
disp[6]=ircode[3]>>4;
disp[7]=ircode[3]&0x0f;
}
void display()
{
uchar i;
for(i=0;i<8;i++)
{
duan=1;
P0=table[disp[i]];
duan=0;
P0=0xff;
wei=1;
P0=table2[i];
wei=0;
delay_ms(5);
}
}
void main()
{
init_int0();
duan=0;
wei=0;//初始化值
while(1)
{
data_pros();
display();
}
}
void exter0() interrupt 0
{
uchar a,b,irtime;
EX0=0;
delay_us(15);//约为2ms
if(ir)
{
EX0=1;
return;
}
while(!ir);//9ms的低电平
delay_us(1); //稍微延时一下
for(a=0;a<4;a++) //四组数据
{
for(b=0;b<8;b++)//每组8位
{
while(ir);//4.5ms的高电平
delay_us(1);
while(!ir);//0.56ms的低电平
while(ir) //对高电平持续时间的计算
{
delay_us(1);
irtime++;
if(irtime>=30)
{
EX0=1;
return;
}
ircode[a]>>=1; //低位在前,高位在后
if(irtime>=8)
{
ircode[a]|=0x80;
} //判断8次,移位7次
irtime=0;
}
}
}
if(ircode[2]!=~ircode[3]) //数据码与数据反码的判断
{
EX0=1;
return;
}
EX0=1;
}
上面的就是红外遥控的简单程序了,可以在8个数码管上进行显示,同一个类型的遥控器其16位地址码都是一样的,只有数据码(键值)会有所不同。下图是TC9012的一个编码组成图。希望对大家有点帮助。
单片机在进行解码时,最重要的还是如何判断数据0或者1,其实原理是很简单的,数据0格式是0.56ms的低电平,0.565ms的高电平,而数据1是0.56ms的低电平,1.685ms的高电平,所以我们只需要对高电平的时间进行判断处理,就能够准确地分辨出数据是0还是1了。
本文档为【hx1838红外遥控】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。