新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 紅外通信—紅外遙控器NEC解碼程序

        紅外通信—紅外遙控器NEC解碼程序

        作者: 時間:2016-12-02 來源:網(wǎng)絡 收藏
        單片機芯片使用的stc89c52;找到要用的部分的的原理圖即可.這是一整個單片機開發(fā)板的電路圖其他的忽略.


        /**
        ***********************************************************************************************
        * @file main.c
        * @author xr
        * @date 2014年3月31日10:26:47
        * @version V1.2.3
        * @brief 紅外通信 NEC協(xié)議進行紅外遙控器解碼 顯示用戶碼和鍵碼到數(shù)碼管上
        * @note單片機STC89C52RC MCU晶振11.0592MHZ
        ***********************************************************************************************
        */

        #include

        本文引用地址:http://www.104case.com/article/201612/324693.htm

        //紅外輸出數(shù)據(jù)口
        sbit IRD = P3^3;//外部中斷引腳

        bit irflag = 0;
        unsigned char ircode[4];//接收解碼得到的數(shù)據(jù)

        unsigned char code LedTable[] = {
        0xC0, //"0"
        0xF9, //"1"
        0xA4, //"2"
        0xB0, //"3"
        0x99, //"4"
        0x92, //"5"
        0x82, //"6"
        0xF8, //"7"
        0x80, //"8"
        0x90, //"9"
        0x88, //"A"
        0x83, //"B"
        0xC6, //"C"
        0xA1, //"D"
        0x86, //"E"
        0x8E //"F"
        };

        unsigned char LedBuff[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};//數(shù)碼管顯示緩沖區(qū)

        unsigned char thr0, tlr0;

        void ConfigTimer0(unsigned int xms);
        void ConfigTimer1();

        void main()
        {
        ConfigTimer0(1); //定時1ms
        ConfigTimer1();

        while (1)
        {
        if (irflag)//接收到紅外數(shù)據(jù),則刷新顯示
        {
        LedBuff[5] = LedTable[ircode[0] >> 4];//取用戶碼的高4位字節(jié)
        LedBuff[4] = LedTable[ircode[0] & 0x0F];//取用戶碼的低四位字節(jié)
        LedBuff[1] = LedTable[ircode[2] >> 4];//取鍵碼的高四位
        LedBuff[0] = LedTable[ircode[2] & 0x0F];//取鍵碼的低四位
        }
        }
        }

        /**
        * @brief 定時器T0配置
        * @param 定時時間xms
        * @retval 無
        */
        void ConfigTimer0(unsigned int xms)
        {
        unsigned int tmp;
        tmp = 65536-xms*11059200/12/1000;
        thr0 = (unsigned char)(tmp >> 8);
        tlr0 = (unsigned char)(tmp & 0x00FF);
        TMOD &= 0xF0;
        TMOD |= 0x01;//T0方式1
        TH0 = thr0;
        TL0 = tlr0;
        TR0 = 1;
        EA = 1;
        ET0 = 1;
        //設置定時器T0的中斷優(yōu)先級高于外部中斷的優(yōu)先級
        //IP中斷優(yōu)先級寄存器 PT2 PS PT1 PX1 PT0 PX0
        PT0 = 1;//提高T0的優(yōu)先級,優(yōu)先進行數(shù)碼管刷新,消除數(shù)碼管顯示抖動
        }

        /**
        * @brief 數(shù)碼管刷新
        * @param 無
        * @retval 無
        */
        void refresh()
        {
        static unsigned char j = 0;

        P0 = 0xFF;//消隱
        P1 = (0x08 | j);//000 0 1 ADDR2 ADDR1 ADDR0
        P0 = LedBuff[j++];
        if (j >= 6)
        j = 0;
        }

        /**
        * @brief T0中斷服務
        * @param 無
        * @retval 無
        */
        void Timer0_ISP() interrupt 1
        {
        TH0 = thr0;
        TL0 = tlr0;
        refresh();//數(shù)碼管刷新
        }


        上一頁 1 2 下一頁

        評論


        技術專區(qū)

        關閉
        主站蜘蛛池模板: 延安市| 凤阳县| 郑州市| 林西县| 丰宁| 扶绥县| 阿瓦提县| 洱源县| 平原县| 中超| 青龙| 呼伦贝尔市| 宁晋县| 左贡县| 宜宾县| 阿合奇县| 丹巴县| 屏边| 象山县| 丰都县| 福泉市| 久治县| 石林| 永济市| 呼和浩特市| 丰都县| 株洲市| 武功县| 南丹县| 凯里市| 阳新县| 汉川市| 建平县| 焉耆| 高雄县| 广宁县| 嘉荫县| 德钦县| 开鲁县| 田东县| 嘉义市|