• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > 基于8952單片機的紅外解碼(TC9012F編碼)

    基于8952單片機的紅外解碼(TC9012F編碼)

    作者: 時間:2016-11-28 來源:網絡 收藏
    紅外操作免去了和機器接觸。第一是方便,第二也很自然的可以將用戶與管理著分離(使用功能在遙控上,調試功能在機器上)。所以免不了在自己的電子鐘設計中加入了紅外。加的多,學得也多嘛。

    雖然重點在后面,但是先上個程序

    本文引用地址:http://www.czjhyjcfj.com/article/201611/323082.htm

    參考總結后,第一次參考歸納出源程序如下:

    #include
    #include
    #include
    ////////////////////////////////////////////////

    sbit ir=P3^2;//紅外接口標志

    ////////////////////////////////////////////

    unsigned char irtime;//電平寬度(以定時器來記錄)
    bit irpro_ok,irok;
    unsigned char ircord[4];
    unsigned char irdata[33];

    //////////////////////////////////////////////

    void ir_work(void);
    void ircordpro(void);

    //////////////////////////////////////////////////////////////////

    void tim0_isr (void) interrupt 1 using 1//定時器0中斷服務函數
    {
    irtime++;
    }

    ///////////////////////////////////////////////////////////////////////
    void ex0_isr (void) interrupt 0 using 0//外部中斷0服務函數
    {
    unsigned char i;
    bit startflag;

    if(startflag)
    {
    TR0=0;
    if(irtime<38&&irtime>=34)//引導碼判斷(9MS)
    i=0;
    TR0=1;
    //確認為引導碼,初始為新的32位編碼開始
    irdata[i]=irtime;//i=0是引導碼,后面是其余碼。每次記錄的是每次高低電平一起的脈沖寬度。
    //收到到一個碼算一次中斷,中斷結束前清零寬度計時
    irtime=0;
    i++;
    if(i==33)
    {
    irok=1;
    i=0;
    }
    }
    //第一次進入中斷開啟startflag,用于第二次進入中斷計時比對
    else
    {irtime=0;startflag=1;}

    }

    ////////////////////////////////////////////////////////////////////
    void TIM0init(void)//定時器0初始化
    {

    TMOD=0x02;//定時器0工作方式2,TH0是重裝值,TL0是初值
    TH0=0;//reload value
    TL0=0;//initial value
    ET0=1;//開中斷
    TR0=1;
    }
    ///////////////////////////////////////////////////////////////////
    void EX0init(void)
    {
    IT0 = 1;
    EX0 = 1;
    EA = 1;
    }
    void ir_work(void)//紅外鍵值散轉程序
    {

    switch(ircord[2])//判斷第三個數碼值(數據碼,后面是反碼,前面是引導碼和地址碼)
    {
    case 0:P1=0x00;break;//1 LED顯示相應的按鍵值
    case 1:P1=0xfe;break;//2
    case 2:P1=0xfd;break;//3
    }


    上一頁 1 2 下一頁

    評論


    技術專區

    關閉
    主站蜘蛛池模板: 大邑县| 旬阳县| 棋牌| 宁南县| 慈溪市| 大名县| 彭山县| 义马市| 轮台县| 长宁县| 泸溪县| 普格县| 庆云县| 娱乐| 屏东市| 吉安市| 镇雄县| 灵璧县| 镇雄县| 玉溪市| 五常市| 巴南区| 安宁市| 竹溪县| 襄城县| 天柱县| 饶平县| 齐齐哈尔市| 神木县| 沐川县| 罗田县| 汾西县| 全州县| 定襄县| 泗洪县| 连州市| 揭阳市| 平江县| 宁安市| 喀什市| 宜宾县|