羞羞小视频在线观看_羞羞视频免费入口网站_羞羞视频下载APP_男女羞羞视频软件

歡迎光臨東莞市飛江電子科技有限公司官網(wǎng)!
全國(guó)咨詢熱線

13926563901

18925580829

飛江淘寶店鋪

首頁(yè)>技術(shù)資料>其它單片機(jī)

紅外遙控解碼程序(用戶碼,用戶反碼,數(shù)據(jù)碼,數(shù)據(jù)反碼)

發(fā)布時(shí)間:2018-04-09   瀏覽量:

紅外遙控解碼程序(用戶碼,用戶反碼,數(shù)據(jù)碼,數(shù)據(jù)反碼)

(2014-12-06 20:56:41)
轉(zhuǎn)載
標(biāo)簽:

it

 

#include

#include

 

typedef unsigned char uChar8;

typedef unsigned int uInt16;

 

bit IR_OK;

bit Pro_OK;

sbit SEG_SELECT = P2^7;

sbit BIT_SELECT = P2^6;

sbit IR = P3^2;             //紅外接口

 

uChar8 g_IR_Time = 0;

uChar8 HL_PeriodArr[33] = {0};

uChar8 IRCord[4] = {0};

 

//void LedDisplay(void)

//{

//    

//}

 

void IR_Pro(void)                // 將時(shí)間値轉(zhuǎn)換為邏輯電平

{

       uChar8 ujVal;

       uChar8 uiVal; 

       uChar8 TL_Time;

       uChar8 ByteVal;

       uChar8 uNum = 1;        // 避開(kāi)第一個(gè)元素(引導(dǎo)碼)

       for(uiVal = 0; uiVal < 4; uiVal++)        //四個(gè)字節(jié)(用戶碼、用戶反碼、數(shù)據(jù)碼、數(shù)據(jù)反碼)的數(shù)據(jù)

       {

              for(ujVal = 0; ujVal < 8; ujVal++)

              {

                     TL_Time = HL_PeriodArr[uNum];

                     if(TL_Time > 6)            // 我們以中間値(1.685ms)作為判斷標(biāo)準(zhǔn),說(shuō)明是邏輯“1

                            ByteVal |= 0x80;

                     else

                            ByteVal = ByteVal;        // 說(shuō)明為邏輯“0

                     if(ujVal < 7)

                     {

                            ByteVal >>= 1;

                     }

                     uNum++;              // 判斷下一個(gè)

              }

              IRCord[uiVal] = ByteVal;

              ByteVal = 0x00;    

       }

       if(IRCord[2] == ~IRCord[3])

       {

             

              Pro_OK = 1;          // 處理工作完成  

       }

}

 

void Time0_Init(void)

{

        TMOD |= 0x02;           // 讓定時(shí)器工作在方式2,8位自動(dòng)重裝

        TH0 = 0;

        TL0 = 0;

        TR0 = 1;              // 啟動(dòng)定時(shí)器0

        ET0 = 1;

 

}

 

void EX0_Init(void)

{

       IT0 = 1;                       // 下降沿觸發(fā)

       EX0 = 1;                      // 開(kāi)外部中斷

       EA  = 1;                            // 開(kāi)總中斷

}

 

void UART_Init(void)

{

       TMOD &= 0x00;          //清空定時(shí)器1

       TMOD |= 0x21;            //定時(shí)器1工作于方式2

       TH1 = 0xfd;                 //為定時(shí)器1賦初值

       TL1 = 0xfd;                  //等價(jià)于將波特率設(shè)置為9600

       ET1 = 0;               //防止中斷產(chǎn)生不必要的干擾

       TR1 = 1;               //啟動(dòng)定時(shí)器1

       SCON |= 0x40;             //串口工作于方式1,不允許接收

}

 

void main (void)

{

       UART_Init();

       EX0_Init();

       Time0_Init();

       while(1)

       {

              if(IR_OK)             // 說(shuō)明解碼完成

              {

                     IR_OK = 0;

                     IR_Pro();              // 處理時(shí)間値

              }

              if(Pro_OK)

              {

                     Pro_OK = 0;

                     TI = 1;

                     printf("\n");

                     printf("     YuanQuan \n");

                     printf("          努力!     ");

                     printf("%x--%x--%x--%x\n",(uInt16)IRCord[0], (uInt16)IRCord[1], (uInt16)IRCord[2], (uInt16)IRCord[3]);

                     while(!TI); TI = 0;

              }

              //LedDisplay(IRCord);

       }

}

 

void Timer0_ISR(void) interrupt 1

{

       g_IR_Time++;              // 每過(guò)256 * 12/11.0592)us

}

 

 

void EX0_ISR(void) interrupt 0          // 34個(gè)下降沿存儲(chǔ)完畢,這樣紅外解碼完成

{

       // 存時(shí)間値到HL_PeriodArr[33]

       static uChar8 uCounter;                       // 計(jì)數(shù),范圍為0~32

       static bit StartFlag = 0;

 

       if(!StartFlag)                // 第一個(gè)下降沿,表示解碼開(kāi)始

       {

              StartFlag = 1;

              g_IR_Time = 0;

       }

       else if(StartFlag)           // 從第二個(gè)開(kāi)始一直到第33個(gè)下降沿

       {

              if((g_IR_Time < 50) && (g_IR_Time >= 32))           // 則說(shuō)明這里是引導(dǎo)碼

                     uCounter = 0;

              HL_PeriodArr[uCounter] = g_IR_Time;             // 存的是時(shí)間値

              g_IR_Time = 0;            // 為下次存?zhèn)幾鰷?zhǔn)備

              uCounter++;

              if(33 == uCounter)        // 說(shuō)明33次已經(jīng)存夠了

              {

                     uCounter = 0;

                     IR_OK = 1;           // 真正的存時(shí)間的任務(wù)已經(jīng)完成

                     StartFlag = 0;

              }

       }

}