- UID
- 176804
- 性别
- 男
|
我用的是家里的电视遥控器所以就不知道是什么发射器了,于是我费劲周折终于测出:引导码中4.5ms为低电平,4.5ms为高电平。脉宽0.6ms,间隔0.5ms为“0”,脉宽0.6ms,间隙1.626ms为“1”。总的一组码的发射周期为108ms。 但是我编的有问题啊,我是把结果显示在8个led灯上,但是按每个按扭的结果是一样的:(晶振11.0592) #include"reg51.h"
#define uchar unsigned char
sbit HW = P1^2; //红外接收与单片机的接口
uchar IRCode[4] = { 0,0,0,0 };
void Delay( uchar time ) //一次约为15us { // uchar t; while(--time); // for( t = 0; t < time; t++ ); }
void Decode() { uchar a, c, k;
if( !HW ) { for( k=0; k<10; k++ ) { Delay(30); if ( HW == 1 ) //如果0.45ms后HW=1,说明不是引导码 { k = 10; break; } else if( k == 9 ) //如果持续了10?.45ms=4.5ms的低电平,说明是引导码 { while( HW == 0 ); Delay(300);
for( a = 0; a < 4; a++ ) { for( c = 0; c < 8; c++ ) { while( HW == 0 ); Delay(60); IRCode[a] = IRCode[a] >> 1; if( HW == 1 ) { IRCode[a] = IRCode[a] | 0x80; Delay(60); } } } }
} }
void main() { P0 = 0; while(1) { Decode(); P0 = IRCode[2]; } }
搞了很久,实在看不出为什么,请各位大虾帮帮忙!!
|
|