?? ir.h
字號(hào):
/*****紅外解碼程序(原理編程版本)********/
#include <at89x52.h>
#define uchar unsigned char
uchar Byte,Decode,i,j,k;
uchar idata Code[4];//定義4個(gè)數(shù)組,用來(lái)存儲(chǔ)代碼,Code[0]為系統(tǒng)碼,Code[1]為系統(tǒng)反碼,Code[2]為數(shù)據(jù)碼,Code[3]為數(shù)據(jù)反碼
#define In P3_2 //外部0中斷,紅外線入口
delay0_9ms() //延時(shí)0.9ms,用來(lái)判斷開(kāi)頭碼,和延時(shí)判斷電平高低
{
unsigned char j,k;
for(j=18;j>0;j--)
for(k=20;k>0;k--);
}
delay4_5ms() //延時(shí)4.5ms用來(lái)越過(guò)結(jié)束碼
{
unsigned char i,j;
for(i=10;i>0;i--)
for(j=225;j>0;j--);
}
delays() //延時(shí)
{
unsigned char i,j;
for(i=0;i<100;i++)
for(j=0;j<80;j++);
}
/**********外部0中斷服務(wù)程序(紅外)*************************/
int0() interrupt 0
{
EA=0; //關(guān)閉總中斷,CPU只運(yùn)行此段程序,因?yàn)榻獯a程序?qū)r(shí)間要求比較高
for(k=0;k<10;k++)
{
delay0_9ms();
if(In==1) {break;} //不是開(kāi)頭碼,則跳出
else if(k==9) //說(shuō)明已經(jīng)延時(shí)9*0.9=8.1ms
{
while(In==0); //當(dāng)?shù)碗娖綍r(shí),等待9ms-8.1ms
delay4_5ms(); //越過(guò)4.5ms束碼
for(i=0;i<4;i++) //分別讀取4數(shù)據(jù),系統(tǒng)碼,系統(tǒng)反碼,數(shù)據(jù)碼,數(shù)據(jù)反碼
{
for(j=1;j<=8;j++) //8bit數(shù)據(jù)傳輸
{
while(In==0); //低電平等待,高電平繼續(xù)
delay0_9ms(); //出現(xiàn)高電平后,延時(shí)900us,判斷
if(In==1) //1則1
{
delay0_9ms();
Byte=Byte|0x80;//低位先進(jìn),高位先接
if(j<8) {Byte=Byte>>1;} //低位先進(jìn),數(shù)據(jù)右移
}
else if(j<8) {Byte=Byte>>1;} //0則0
}
Code[i]=Byte; //Code[0]為系統(tǒng)碼,Code[1]為系統(tǒng)反碼,Code[2]為數(shù)據(jù)碼,Code[3]為數(shù)據(jù)反碼
Byte=0; //數(shù)據(jù)清零,為下次接收數(shù)據(jù)準(zhǔn)備
}
}
}
EA=1; //打開(kāi)總中斷,以上程序所需時(shí)間約為60ms
delays();
Decode=Code[3]; //數(shù)據(jù)反碼送給解碼值
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -