找回密碼
         注冊會員
        搜索附件  
        MCU資訊論壇 附件中心 單片機論壇 51單片機論壇 5_111576_2fa67ef9897d969.jpg

        5_111576_2fa67ef9897d969.jpg

         

        數(shù)碼管顯示32位紅外遙控按鍵編碼值(原創(chuàng)):
        看了工人大哥關于紅外遙控器的帖子,打算自己也做一個,但是自己沒有LCD屏幕,所以用LED數(shù)碼管代替,還有和工人大哥的遙控器不同的是我手上是32位的遙控器。所以在網(wǎng)絡上找了32編碼遙控器的資料;


        紅外線遙控是目前使用很廣泛的一種通信和遙控技術。由于紅外線遙控裝置具有體積小、功耗低、功能強、成本低等特點,因而,繼彩電、錄像機之后,在錄音機、音響設備、空凋機以及玩具等其它小型電器裝置上也紛紛采用紅外線遙控。工業(yè)設備中,在高壓、輻射、有毒氣體、粉塵等環(huán)境下,采用紅外線遙控不僅完全可靠而且能有效地隔離電氣干擾。

        紅外線是太陽光線中眾多不可見光線中的一種,由德國科學家霍胥爾于1800年發(fā)現(xiàn),又稱為紅外熱輻射,他將太陽光用三棱鏡分解開,在各種不同顏色的色帶位置上放置了溫度計,試圖測量各種顏色的光的加熱效應。結果發(fā)現(xiàn),位于紅光外側的那支溫度計升溫最快。因此得到結論:太陽光譜中,紅光的外側必定存在看不見的光線,這就是紅外線。也可以當作傳輸之媒界。 太陽光譜上紅外線的波長大于可見光線,波長為0.751000μm。紅外線可分為三部分,即近紅外線,波長為0.751.50μm之間;中紅外線,波長為1.506.0μm之間;遠紅外線,波長為6.0l000μm 之間。
        真正的紅外線夜視儀是光電倍增管成像,與望遠鏡原理全完不同,白天不能使用,價格昂貴且需電源才能工作。

         【紅外遙控系統(tǒng)】   通用紅外遙控系統(tǒng)由發(fā)射和接收兩大部分組成,應用編/解碼專用集成電路芯片來進行控制操作,如圖1所示。發(fā)射部分包括鍵盤矩陣、編碼調(diào)制、LED紅外發(fā)送器;接收部分包括光、電轉換放大器、解調(diào)、解碼電路。









        【遙控發(fā)射器及其編碼】   紅外遙控發(fā)射器專用芯片很多,根據(jù)編碼格式可以分成兩大類,這里我們以運用比較廣泛,解碼比較容易的一類來加以說明,現(xiàn)以日本NECuPD6121G組成發(fā)射電路為例說明編碼原理。當發(fā)射器按鍵按下后,即有遙控碼發(fā)出,所按的鍵不同遙控編碼也不同。這種遙控碼具有以下特征:

          采用脈寬調(diào)制的串行碼,以脈寬為0.565ms、間隔0.56ms、周期為1.125ms的組合表示二進制的“0”;以脈寬為0.565ms、間隔1.685ms、周期為2.25ms的組合表示二進制的“1”,其波形如圖2所示。








        上述“0”“1”組成的32位二進制碼經(jīng)38kHz的載頻進行二次調(diào)制以提高發(fā)射效率,達到降低電源功耗的目的。然后再通過紅外發(fā)射二極管產(chǎn)生紅外線向空間發(fā)射,如圖3所示,連發(fā)波形如圖4所示。







        UPD6121G產(chǎn)生的遙控編碼是連續(xù)的32位二進制碼組,其中前16位為用戶識別碼,能區(qū)別不同的電器設備,防止不同機種遙控碼互相干擾。該芯片的用戶識別碼固定為十六進制01H;后16位為8位操作碼(功能碼)及其反碼。UPD6121G最多額128種不同組合的編碼。

          當遙控器在按鍵按下后,周期性地發(fā)出同一種32位二進制碼,周期約為108ms。一組碼本身的持續(xù)時間隨它包含的二進制“0”“1”的個數(shù)不同而不同,大約在4563ms之間,圖4為發(fā)射波形圖。

          當一個鍵按下超過36ms,振蕩器使芯片激活,將發(fā)射一組108ms的編碼脈沖,108ms發(fā)射代碼由一個起始碼(9ms,一個結果碼(4.5ms,8位地址碼(9ms~18ms,8位地址碼(9ms~18ms,8位數(shù)據(jù)碼(9ms~18ms)和這8位數(shù)據(jù)的反碼(9ms~18ms)組成。如果鍵按下超過108ms仍未松開,接下來發(fā)射的代碼(連發(fā)代碼)將僅由起始碼(9ms)和結束碼(2.5ms)組成。
         代碼格式(以接收代碼為準,接收代碼與發(fā)射代碼反向)
            位定義




        單發(fā)代碼格式



        連發(fā)代碼格式





        注:代碼寬度算法:

          16位地址碼的最短寬度:1.12×16=18ms 16位地址碼的最長寬度:2.24ms×16=36ms

          已知8位數(shù)據(jù)代碼及其8位反代碼的寬度和不變:(1.12ms+2.24ms)×8=27ms

          ∴ 32位代碼的寬度為(18ms+27ms)~(36ms+27ms)

          1解碼的關鍵是如何識別“0”“1”,從位的定義我們可以發(fā)現(xiàn)“0”“1”均以0.56ms的低電平開始,不同的是高電平的寬度不同,“0”0.56ms,“1”1.68ms,所以必須根據(jù)高電平的寬度區(qū)別“0”“1”。如果從0.56ms低電平過后,開始延時,0.56ms以后,若讀到的電平為低,說明該位為“0”,反之則為“1”,為了可靠起見,延時必須比0.56ms長些,但又不能超過1.12ms,否則如果該位為“0”,讀到的已是下一位的高電平,因此取(1.12ms+0.56ms/2=0.84ms最為可靠,一般取0.84ms左右均可。
          2根據(jù)碼的格式,應該等待9ms的起始碼和4.5ms的結果碼完成后才能讀碼。

         



        下面是我寫的程序,程序分成兩個部分,分開寫的,一個部分是主程序數(shù)碼管顯示main(),一個部分是遙控器解碼程序IRInit(),


        第一部分;

        /*注意這里在數(shù)碼管上顯示的是十進制數(shù)字,把其轉換為十六進制就是遙控器的各個按鍵的編碼*/

        #include<reg52.h>
        sbit key=P1^3;
        unsigned int number=0;
        unsigned char j,n,i=0;
        unsigned int ledout[10];
        unsigned char code led_num[]={0xfc,0x60,0xda,0xf2,0x66,
        0xb6,0xbe,0xe0,0xfe,0xf6 }; //共陽數(shù)碼管的0-9編碼
        unsigned char code led_duan[]={0xfe,0xfd,0xfb,0xf7,
        0xef,0xdF,0xbF,0x7F}; //段選信號編碼,我這里是直接用一個i/o口接的八個數(shù)碼管的共陰極

        extern void IRInit();//外部函數(shù)申明
        void main()
        {
        while(1)
        { ledout[7]=led_num[number%10];
        ledout[6]=led_num[number/10%10];
        ledout[5]=led_num[number/100%10];
        ledout[4]=led_num[number/1000%10];
        ledout[3]=led_num[number%10];
        ledout[2]=led_num[number/10%10];
        ledout[1]=led_num[number/100%10];
        ledout[0]=led_num[number/1000%10];
        for(j=0;j<9;j++) //數(shù)碼管動態(tài)顯示,number的值;
        {
        P0=led_duan[j];
        P2=ledout[j];
        for(n=0;n<200;n++);
        }
        IRInit(); //調(diào)用解碼程序,把遙控編碼負值給number;
        }

        }




        下面是第二部分;


        #include <reg51.h>
        sbit IRIN = P3^2; //紅外接收器數(shù)據(jù)線
        void IRdelay(char x); //x*0.14MS
        unsigned char IRCOM[7];
        extern unsigned int number; //外部變量聲明


        void IRInit()
        {
        IE |= 0x81; //允許總中斷中斷,使能 INT0 外部中斷
        TCON |= 0x01; //觸發(fā)方式為脈沖負邊沿觸發(fā)

        IRIN=1; //I/O口初始化
        }


        void IR_IN() interrupt 0
        {
        unsigned char j,k,N=0;
        EX0 = 0;
        IRdelay(15);
        if (IRIN==1)
        { EX0 =1;
        return;
        }
        //確認IR信號出現(xiàn)
        while (!IRIN) //等IR變?yōu)楦唠娖剑^9ms的前導低電平信號。
        {IRdelay(1);}

        for (j=0;j<4;j++) //收集四組數(shù)據(jù)
        {
        for (k=0;k<8;k++) //每組數(shù)據(jù)有8位
        {
        while (IRIN) //等 IR 變?yōu)榈碗娖剑^4.5ms的前導高電平信號。
        {IRdelay(1);}
        while (!IRIN) //等 IR 變?yōu)楦唠娖?
        {IRdelay(1);}
        while (IRIN) //計算IR高電平時長
        {
        IRdelay(1);
        N++;
        if (N>=30)
        { EX0=1;
        return;} //0.14ms計數(shù)過長自動離開。
        } //高電平計數(shù)完畢
        IRCOM[j]=IRCOM[j] >> 1; //數(shù)據(jù)最高位補“0”
        if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;} //數(shù)據(jù)最高位補“1”
        N=0;
        }
        }

        if (IRCOM[2]!=~IRCOM[3]) //判斷接收的第三組數(shù)據(jù)和四組數(shù)據(jù)是否相反
        { EX0=1;
        return; }
        EX0 = 1;
        }
        /**********************************************************/
        void IRdelay(unsigned char x) //x*0.14MS
        {
        unsigned char i;
        while(x--)
        {
        for (i = 0; i<13; i++) {}
        }
        }



        一下是實物效果圖;因為一個手要拿手機,所以效果不好!














        因為本人剛剛學習單片機不久,所以編程能力可能不怎么的,希望大家看看給點意見,謝謝,在這里還要謝謝工人大哥!!








        這里面是圖片資料
        5_111576_2fa67ef9897d969.jpg

        QQ|手機版|MCU資訊論壇 ( 京ICP備18035221號-2 )|網(wǎng)站地圖

        GMT+8, 2025-5-5 08:47 , Processed in 0.043522 second(s), 9 queries , Redis On.

        Powered by Discuz! X3.5

        © 2001-2025 Discuz! Team.

        一区二区国产精品| 久久精品一区二区三区不卡| 久久青草国产精品一区| 国产一区二区三区久久精品| 国产精品毛片一区二区| 天美传媒麻豆精品下载| 久久精品国产亚洲AV电影| 日韩欧美精品不卡| 欧美精品黑人粗大视频| 日本伊人精品一区二区三区| 亚洲精品国产成人99久久| 亚洲精品乱码久久久久久不卡| 久久久久久九九99精品| 国产69精品久久久久99| 伊人 久久 精品| 国产香蕉精品视频在| 日韩人妻无码精品无码中文字幕| 精品一区二区三区在线观看视频 | 99久久99这里只有免费的精品| 国产呦小j女精品视频| 极品身材小美女啪啪自拍| 国产精品久久久久影院色| 欧洲精品一区二区三区在线观看| 精品国产第一国产综合精品| 精品一区二区三区免费观看| 久久久久久亚洲Av无码精品专口| 国产三级精品三级在线观看专1| 亚洲精品成人片在线播放| 欧美大片日韩精品| 国产无遮挡又黄又爽网站| 欧美精品一区二区三区视频| 宅男宅女精品国产AV天堂| 国产精品影音先锋| 91大神在线电影| 国产精品性爱| 97热久久免费频精品99| 亚洲av无码成人精品区在线播放 | 国产精品嫩草影院久久| 无码精品日韩中文字幕| 久久www免费人成精品香蕉| 国产精品人成在线播放新网站|