新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 小巧的uPD6121G紅外遙控解碼程序

小巧的uPD6121G紅外遙控解碼程序

作者: 時間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
網(wǎng)上有很多關(guān)于uPD6121G紅外遙控解碼程序,這些都寫的很長,看起來發(fā)暈.下載下來也多數(shù)不能用.以下程序是通過檢驗的程序,只要編譯后就可以正常使用.注意這里只是個解碼程序!如果你想增加其它功能請自己添加.此程序沒有解碼UPD6121的重復碼.

以下程序使用:12MHZ晶振,AT89C52

本文引用地址:http://butianyuan.cn/article/201611/321161.htm

設(shè)計者:李國強
晶振:12MHzAT89S51
11年2月13號--2月24號編好

#include
#define uchar unsigned char
#define uint unsigned int
sbit in=P3^2;//紅外信號輸入
sbit d0=P1^0;//測試用
sbit d1=P1^1;//測試用
uchar sj[4];//放置解碼數(shù)據(jù)
uint jce;//計時
bit biaoz;

void main(void)
{uchar iii=0;
IT0=1;//負跳變觸發(fā)
EX0=1;//開外部中斷0
EA=1;//開總中斷
biaoz=0;
//EX0=0;
//while(i<1250)++i;//調(diào)試用
while(1)
{
while(biaoz)
{iii=sj[2];
//iii++;
P1=iii;
IE0=0;
EX0=1;
biaoz=0;
}

}

}


void zd() interrupt 0
{
uint su=0;
uchar i=0,ii=0;
EX0=0;
while(!in)if(++su>850) break;//計算9ms紅外信號,進行干擾排除

while(in)if(++su>2000) break;//計算4.5ms+9ms時間

if((su>1120)&&(su<1130))//如沒錯誤進入信號收入
{

while(i<4)
{
while(ii<8)
{su=0;//歸0后計時
while(!in) if(++su>55) break;//(0.612ms)計算0和1的開始時間
while(in) if(++su>160) break;//(1.767ms)計算時長為判斷0和1作準備
if(su<120)sj[i]>>=1;//su小于120判斷為0
if(su>155){sj[i]>>=1;sj[i]+=0x80;}//su大于155判斷為1
ii++;

while(in)if(++su>250) break;//(2.757ms)判斷為1后如沒有變低電平在此等待,防死循環(huán)
if(su==250)ii=8;//防止死循環(huán)和錯誤數(shù)據(jù)

}
ii=0;//為下次循環(huán)作好準備
i++;
if(su==250)i=8;//防止死循環(huán)和錯誤數(shù)據(jù)
}
//P1=sj[2];//顯示解碼數(shù)據(jù)sj[2]//如果P1口有發(fā)光管就能看到解碼后的數(shù)據(jù)

}
if(i==4)biaoz=1;
else
{IE0=0;
}EX0=1;
}



關(guān)鍵詞: uPD6121G紅外遙控解碼程

評論


技術(shù)專區(qū)

關(guān)閉