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

    EEPW首頁 > 嵌入式系統 > 設計應用 > C語言寫的紅外遙控解碼程序

    C語言寫的紅外遙控解碼程序

    作者: 時間:2012-11-06 來源:網絡 收藏

    #include "STC89C51RC.H"

    sbit DQ = P4^3;
    sbit SPK = P1^0;


    #include absacc.h>

    #define seg1 XBYTE[0xffec]
    #define seg2 XBYTE[0xffed]
    #define seg3 XBYTE[0xffee]
    #define seg4 XBYTE[0xffef]
    unsigned char IRMcode[4];

    unsigned char code ledmap[]=//共陰LED數碼管譯碼表
    {
    0x3f,0x06,0x5b,0x4f,0x66,//0,1,2,3,4,
    0x6d,0x7d,0x07,0x7f,0x6f,//5,6,7,8,9,
    0x77,0x7C,0x39,0x5E,0x79,//A,b,C,d,E,
    0x71,//F,
    };

    void delay(unsigned int);

    void main()
    {
    EA = 1;
    EX2 = 1;
    while(1)
    {

    if (IRMcode[2]==~IRMcode[3]){
    seg1 = ~ledmap[IRMcode[2]/100];
    seg2 = ~ledmap[IRMcode[2]/10%10];
    seg3 = ~ledmap[IRMcode[2]%10];
    seg4 = 0xff;//熄滅
    }
    }
    }

    void Sound(void)
    {
    SPK = 0;
    delay(10000);
    SPK = 1;
    }

    void IRMint(void) interrupt 6 using 2
    {
    unsigned char count;
    unsigned int count1;
    unsigned char i,j;
    EA = 0;
    count = 9;
    while(--count)
    {
    delay(100);//440us
    if(DQ){EA = 1;return;}
    }
    while(DQ==0);//通過引導碼余下的低電平
    //以上完成引導碼4.5ms的低電平檢測

    count = 9;
    count1 = 0;
    while(--count)
    {
    delay(100);//440us
    if(DQ==0){EA = 1;return;}
    }
    while(DQ==1)//通過引導碼余下的高電平
    {
    if(count1++>1000) {
    P1=0x55;EA = 1;return;}
    }
    //以上完成引導碼4.5ms的高電平檢測

    count1 = 0;
    for(j=0;j4;j++)//有效字節數設定
    {
    for(i=0;i8;i++)//字節bit數
    {
    while(DQ==0);//通過編碼低電平
    delay(200);//延時判斷編碼高電平維持長度
    IRMcode[j]=1;
    if(DQ)IRMcode[j]|=0x01;
    while(DQ==1){//通過編碼余下的高電平
    if(count1++>2000){EA = 1;return;}
    }
    }
    }

    Sound();
    EA = 1;
    }

    //通用延時函數
    //22.1184,10 = 48.4 us (5us+43.4)
    //22.1184,100 = 439 us (43.4*10+5)
    //22.1184,1000 = 4345 us(43.4*100+5)
    //22.1184,10000 = 43450 us(43.45*1000+5)
    void delay(unsigned int t)
    {
    while(--t);
    }

    c語言相關文章:c語言教程


    紅外遙控器相關文章:紅外遙控器原理


    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 商河县| SHOW| 东光县| 德格县| 德钦县| 巫溪县| 高安市| 峨眉山市| 元氏县| 郎溪县| 渭南市| 阳泉市| 康定县| 新乡县| 岳池县| 含山县| 河曲县| 鄂温| 安陆市| 灵川县| 龙门县| 昌宁县| 英吉沙县| 长子县| 龙州县| 淮阳县| 阿图什市| 得荣县| 井研县| 霞浦县| 双鸭山市| 红安县| 沙坪坝区| 三门县| 和林格尔县| 沐川县| 天镇县| 咸丰县| 西畴县| 辽宁省| 牙克石市|