IRCOM[j]=IRCOM[j] >> 1; //第j位数据左移一位(C左移1位时高位补0)
if (N>7)
{
IRCOM[j] = IRCOM[j] | 0x80; //当N大于7时,第j位数据高位置1
}
N=0;
这是红外解码的数据帧典型处理方式之一,你可以多百度几个例程看看,给你贴个红外基本知识参考:
;******************************************************
;采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的"0";以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的"1
;上述"0"和"1"组成的32位二进制码经38kHz的载频进行二次调制以提高发射效率,
;达到降低电源功耗的目的。然后再通过红外发射二极管产生红外线向空间发射
;遥控编码是连续的32位二进制码组,其中前16位为用户识别码,能区别不同的电器设备,
;防止不同机种遥控码互相干扰。该芯片的用户识别码固定为十六进制01H
;后16位为8位操作码(功能码)及其反码。
;当一个键按下超过36ms,振荡器使芯片激活,将发射一组108ms的编码脉冲,这108ms发射代码由一个起始码(9ms),
;一个结果码(4.5ms),低8位地址码(9ms~18ms),高8位地址码(9ms~18ms),8位数据码(9ms~18ms)
;和这8位数据的反码(9ms~18ms)组成。如果键按下超过108ms仍未松开,
;接下来发射的代码(连发代码)将仅由起始码(9ms)和结束码(2.5ms)组成。
;
;解码的关键是如何识别"0"和"1",接收端而言,"0"是0.56ms的高+0.56ms的低。"1"是1.68ms的高+0.56ms的低。
;所以可以根据高电平的宽度区别"0"和"1"。当高电平出现时开始延时,0.56ms以后,若读到的电平为低,
;说明该位为"0",反之则为"1",为了可靠起见,延时必须比0.56ms长些,但又不能超过1.12ms,否则如果该位为"0",
;读到的已是下一位的高电平,因此取(1.12ms+0.56ms)/2=0.84ms最为可靠,一般取0.84ms左右均可。
;为了共用引导部分延时程序,这里用0.9ms延时。
这个不要遥控也可以实现啊,用串口发送与接收,两个单片机之间就可以达到这个效果。你提醒了我,这个我先做做试试看!谢谢你啊!我可以给你红外遥控的程序。
这个意思是要移位接收8个数据。并且存放在IRCOM[j]里面。
给个电子技术导航网站给你吧!---- 电子世家导航网站,它分类收录很多优秀的电子技术网站,在这些电子技术网站论坛里面就有很多大虾分享的资料啦!或许会对你学习电子技术有帮助。