|
本帖最后由 維超 于 2018-1-21 12:02 編輯
給個(gè)自適應(yīng)的紅外解碼實(shí)例你參考吧(非本人原創(chuàng),資料來(lái)自網(wǎng)絡(luò),感謝分享的大俠)
#include "INC\STC89C52RC.H"
#include "INC\MY_SET.H"
#include "INC\IR_NEC.H" //調(diào)用NEC解碼頭文件
sfr SE = 0x80; //數(shù)碼管段選 P0:0x80 P1:0x90
sbit WX1 = P2^0; //數(shù)碼管位顯
sbit WX2 = P2^1;
sbit WX3 = P2^2;
sbit WX4 = P2^3;
sbit WX5 = P2^4;
sbit WX6 = P2^5;
sbit WX7 = P2^6;
sbit WX8 = P2^7;
uint8c tab[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0X88,0X83,0XC6,0XA1,0X86,0X8E,0xFF};
uint8 Xn,X1,X2,X3,X4,X5,X6;
void KZ0(); //短按處理
void KZ1(); //長(zhǎng)按處理
/***************** 主函數(shù) ********************/
void main(void)
{
IR_Init(); //紅外線解碼初始化
while(1)
{
//遙控檢測(cè)
if((IR_BT==2)||(IR_BT==3))
{
if(IR_BT==2)KZ0(); //短按處理
else KZ1(); //長(zhǎng)按處理
IR_BT =0; //清有效標(biāo)志
X1 = NEC[0]/16; //更新顯示
X2 = NEC[0]%16;
X3 = NEC[1]/16;
X4 = NEC[1]%16;
X5 = NEC[2]/16;
X6 = NEC[2]%16;
}
}
}
/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
函數(shù):遙控短按處理
┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
void KZ0()
{
switch(NEC[2])
{
case 0x12: P10 = !P10; break;
case 0x05: break;
case 0x1E: break;
case 0x55: break;
case 0x01: break;
case 0x1B: break;
case 0x03: break;
case 0x6B: break;
case 0x07: break;
case 0x08: break;
case 0x09: break;
case 0x68: break;
case 0x22: break;
case 0xE6: break;
case 0x33: break;
case 0xE2: break;
default:break;
}
}
/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
函數(shù):遙控長(zhǎng)按處理
┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
void KZ1()
{
switch(NEC[2])
{
case 0x12: P14 = !P14; break;
case 0x05: break;
case 0x1E: break;
case 0x55: break;
case 0x01: break;
case 0x1B: break;
case 0x03: break;
case 0x6B: break;
case 0x07: break;
case 0x08: break;
case 0x09: break;
case 0x68: break;
case 0x22: break;
case 0xE6: break;
case 0x33: break;
case 0xE2: break;
default:break;
}
}
/*********************數(shù)碼管掃描*************************/
void XS(void)
{
if(++Xn > 7)Xn=0;
switch(Xn)
{
case 0: WX8=1; NOP; //屏蔽上個(gè)位顯
SE=tab[X1]; //送段碼
WX1=0; //開位顯
break;
case 1: WX1=1; NOP; SE=tab[X2]; WX2=0; break;
case 2: WX2=1; NOP; SE=tab[X3]; WX3=0; break;
case 3: WX3=1; NOP; SE=tab[X4]; WX4=0; break;
case 4: WX4=1; NOP; SE=tab[16]; WX5=0; break;
case 5: WX5=1; NOP; SE=tab[16]; WX6=0; break;
case 6: WX6=1; NOP; SE=tab[X5]; WX7=0; break;
case 7: WX7=1; NOP; SE=tab[X6]; WX8=0; break;
default:break;
}
}
/********************** 定時(shí)器0中斷函數(shù)************************/
void time0(void) interrupt 1
{
IR_NEC();
XS();
}
紅外線NEC解碼.rar
(53.47 KB, 下載次數(shù): 13)
2018-1-21 11:52 上傳
點(diǎn)擊文件名下載附件
|
|