基于C語言的SAA3010紅外遙控接收的源代碼
本文引用地址:http://m.butianyuan.cn/article/171080.htm
void intx0() interrupt 0 using 2 //遙控使用外部中斷0,接P3.2口
{
ykbtc=TH1;TH1=0;TL1=0;TR1=1;ET1=1;
switch(ykbnum)
{
case(0):
ykbnum=1;
break;
case(1):
if(ykbtc==6)ykbnum=2;
else ykbnum=0;
break;
case(2):
if(ykbtc==6||ykbtc==9)ykbnum=3;
else ykbnum=0;
break;
case(3):
if(ykbtc==9||ykbtc==6){ykbnum=4;}
else ykbnum=0;
break;
default:
if(ykbnum7)if(ykbtc==6)ykbnum++;
else ykbnum=0;
else
{
if(ykbtc==6){if(ykcodetemp0)ykcodetemp=ykcodetemp*2+1;
else ykcodetemp=ykcodetemp*2;
ykbnum++;
}
else if(ykbtc==9){ if(ykcodetemp0){ykbnum++;ykcodetemp=ykcodetemp*2;}
else {ykbnum+=2;ykcodetemp=ykcodetemp*2;ykcodetemp=ykcodetemp*2+1;}
}
else if(ykbtc>11ykbtc15)
{ykbnum+=2;ykcodetemp=ykcodetemp*2;ykcodetemp=ykcodetemp*2+1;}
else if(ykbtc>30){EX0=1;}
else ykbnum=0;
}
}
}
void intt1() interrupt 3 using 3 //遙控使用定時計數(shù)器1
{
if(ykdelay){ykdelay--;EX0=0;} //ykdelay不為0暫停接收
else
{
if(ykbnum==13) //遙控碼最后一位為0,補(bǔ)0
{
ykcode=ykcodetemp*=2;
ykdelay=3;
EX0=0; //暫停接收
ykok=1; //遙控數(shù)據(jù)有效
}
else if(ykbnum==14) //遙控碼最后一位為1,不用補(bǔ)
{
ykcode=ykcodetemp;
ykdelay=3;
EX0=0; //暫停接收
ykok=1; //遙控數(shù)據(jù)有效
}
else EX0=1; //ykbnum不為13,14接收無效,繼續(xù)接收
ykbnum=0;
ykcodetemp=0;
}
}
/*
// SAA3010測試主函數(shù)內(nèi)容
main()
{
YkInit();
led_test(); //4LED測試函數(shù)
for(;1;) //主程序
{
if (YkTest())
led_showhh(YkGetcode());
led_delay(10);
}
}
評論