找回密碼
         注冊(cè)會(huì)員
        搜索附件  
        MCU資訊論壇 附件中心 單片機(jī)論壇 51單片機(jī)論壇 5_111576_27ece155b98fc42.jpg

        5_111576_27ece155b98fc42.jpg

         

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


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

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

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









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

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








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







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

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

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




        單發(fā)代碼格式



        連發(fā)代碼格式





        注:代碼寬度算法:

          16位地址碼的最短寬度:1.12×16=18ms 16位地址碼的最長(zhǎng)寬度:2.24ms×16=36ms

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

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

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

         



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


        第一部分;

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

        #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 }; //共陽(yáng)數(shù)碼管的0-9編碼
        unsigned char code led_duan[]={0xfe,0xfd,0xfb,0xf7,
        0xef,0xdF,0xbF,0x7F}; //段選信號(hào)編碼,我這里是直接用一個(gè)i/o口接的八個(gè)數(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ù)碼管動(dòng)態(tài)顯示,number的值;
        {
        P0=led_duan[j];
        P2=ledout[j];
        for(n=0;n<200;n++);
        }
        IRInit(); //調(diào)用解碼程序,把遙控編碼負(fù)值給number;
        }

        }




        下面是第二部分;


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


        void IRInit()
        {
        IE |= 0x81; //允許總中斷中斷,使能 INT0 外部中斷
        TCON |= 0x01; //觸發(fā)方式為脈沖負(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;
        }
        //確認(rèn)IR信號(hào)出現(xiàn)
        while (!IRIN) //等IR變?yōu)楦唠娖剑^(guò)9ms的前導(dǎo)低電平信號(hào)。
        {IRdelay(1);}

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



        一下是實(shí)物效果圖;因?yàn)橐粋€(gè)手要拿手機(jī),所以效果不好!














        因?yàn)楸救藙倓倢W(xué)習(xí)單片機(jī)不久,所以編程能力可能不怎么的,希望大家看看給點(diǎn)意見(jiàn),謝謝,在這里還要謝謝工人大哥!!








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

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

        GMT+8, 2025-5-5 09:00 , Processed in 0.048294 second(s), 9 queries , Redis On.

        Powered by Discuz! X3.5

        © 2001-2025 Discuz! Team.

        2021国产精品成人免费视频| 亚洲?V乱码久久精品蜜桃| 国产无遮挡又黄又爽免费视频| 91国语精品自产拍在线观看性色| 国产精品女同一区二区| 欧美亚洲国产精品第一页| 久久93精品国产91久久综合| 147西西午夜大胆视频| 国产a精品视频| 久久精品18| 久久精品中文字幕无码绿巨人| 四虎成人欧美精品在永久在线| 无翼乌无遮挡全彩老师挤奶爱爱帝国综合社区精品 | 四虎影视在线免费观看| 国产精品久线在线观看| 国内精品视频九九九九| 无码国产精品一区二区免费3p| 亚洲色图国产精品| 中文字幕精品视频在线| 2022精品天堂在线视频| 久久国产香蕉一区精品| 久久99精品久久久久久hb无码 | 一本久久a久久精品vr综合| 国产精品久久久久久久久| 日韩精品一区二区午夜成人版| 国产精品女同一区二区| 欧美精品区一级片免费播放| 国产剧情国产精品一区| 精品一区二区三区高清免费观看 | 99久久国产综合精品五月天喷水 | 精品无码国产自产拍在线观看蜜| 久久精品国产亚洲AV麻豆网站| 国产精品日韩深夜福利久久| 日韩精品人妻系列无码专区免费| 国产乱人伦精品一区二区在线观看| 日产精品久久久一区二区| 精品多毛少妇人妻AV免费久久 | 亚洲精品视频免费观看| 国产成人精品免费视| 亚洲国产精品自在拍在线播放| 国产成人精品日本亚洲11|