您的位置 首页 电子

根据8952单片机的红外解码(TC9012F编码)

红外操作免去了和机器接触。第一是方便,第二也很自然的可以将用户与管理着分离(使用功能在遥控上,调试功能在机器上)。所以免不了在自己

红外操作免去了和机器触摸。第一是便利,第二也很天然的能够将用户与办理着别离(运用功能在遥控上,调试功能在机器上)。所以免不了在自己的电子钟规划中加入了红外。加的多,学得也多嘛。

尽管要点在后边,可是先上个程序

参阅总结后,第一次参阅概括出源程序如下:

#include
#include
#include
////////////////////////////////////////////////

sbit ir=P3^2;//红外接口标志

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

unsigned char irtime;//电平宽度(以定时器来记载)
bit irpro_ok,irok;
unsigned char ircord[4];
unsigned char irdata[33];

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

void ir_work(void);
void ircordpro(void);

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

void tim0_isr (void) interrupt 1 using 1//定时器0中止服务函数
{
irtime++;
}

///////////////////////////////////////////////////////////////////////
void ex0_isr (void) interrupt 0 using 0//外部中止0服务函数
{
unsigned char i;
bit startflag;

if(startflag)
{
TR0=0;
if(irtime<38&&irtime>=34)//引导码判别(9MS)
i=0;
TR0=1;
//确以为引导码,初始为新的32位编码开端
irdata[i]=irtime;//i=0是引导码,后边是其他码。每次记载的是每次凹凸电平一同的脉冲宽度。
//收到到一个码算一次中止,中止完毕前清零宽度计时
irtime=0;
i++;
if(i==33)
{
irok=1;
i=0;
}
}
//第一次进入中止敞开startflag,用于第2次进入中止计时比对
else
{irtime=0;startflag=1;}

}

////////////////////////////////////////////////////////////////////
void TIM0init(void)//定时器0初始化
{

TMOD=0x02;//定时器0工作方式2,TH0是重装值,TL0是初值
TH0=0;//reload value
TL0=0;//initial value
ET0=1;//开中止
TR0=1;
}
///////////////////////////////////////////////////////////////////
void EX0init(void)
{
IT0 = 1;
EX0 = 1;
EA = 1;
}
void ir_work(void)//红外键值散转程序
{

switch(ircord[2])//判别第三个数码值(数据码,后边是反码,前面是引导码和地址码)
{
case 0:P1=0x00;break;//1 LED显现相应的按键值
case 1:P1=0xfe;break;//2
case 2:P1=0xfd;break;//3
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/dianzi/256758.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部