久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 6544|回復(fù): 11
打印 上一主題 下一主題
收起左側(cè)

也談51單片機(jī)紅外通信(附有四種紅外解碼源碼)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
本帖最后由 wzqwxx 于 2021-10-8 11:48 編輯

       今天談的是NEC 協(xié)議的。關(guān)于此協(xié)議請(qǐng)上百度。
       放假在家集中學(xué)習(xí)了51單片機(jī),“苦讀”了一些書(shū)箱和視頻教程。談不上談?wù)撌裁?img src="static/image/smiley/default/em52.gif" smilieid="52" border="0" alt="" />,其實(shí)就向大家匯報(bào)這段時(shí)間的學(xué)習(xí)情況,歡迎交流,提出寶貴意見(jiàn)。
      本人是第一次在貴壇發(fā)貼,定有很多不到的地方,也請(qǐng)大家批評(píng)指正。
      今天就NEC 協(xié)議,仿照教材編寫(xiě)了三種紅外解碼方案,并都在開(kāi)發(fā)板調(diào)試通過(guò),完整源碼會(huì)在附件提供。
      第一種方案是參照教程的源碼(在此稱第四方案)改寫(xiě)的,解碼部分代碼比第四方案精減了,而且不失第四方案性能,只用了幾行代碼,占用內(nèi)存也少。而第四方案正好相反。這兩種方案都是利用中斷,對(duì)前后信號(hào)兩個(gè)下降沿之間時(shí)間長(zhǎng)短、判定二進(jìn)制數(shù)據(jù)0/1位的。優(yōu)點(diǎn):利用了兩個(gè)中斷,分別是定時(shí)器0和外部中斷0,程序執(zhí)行很快,占用CPU時(shí)間很少。缺點(diǎn):占用了兩個(gè)中斷,能正確解碼NEC協(xié)議的遙控器信號(hào),也能解碼別的協(xié)議遙控器的信號(hào),當(dāng)然是亂碼。
      第二種方案,與第四種方案解碼方式不同,只利用一個(gè)外部中斷0,對(duì)信號(hào)高低電平分別測(cè)量延續(xù)時(shí)長(zhǎng),來(lái)判定二進(jìn)制數(shù)據(jù)0/1位的。優(yōu)點(diǎn):代碼少,占用內(nèi)存少,只利用了一個(gè)外部中斷。能正確解碼NEC協(xié)議的遙控器信號(hào),禁止解碼別的協(xié)議遙控器的信號(hào),不會(huì)出現(xiàn)亂碼。缺點(diǎn):占用CPU時(shí)間多,整個(gè)解碼期間不能產(chǎn)生別的中斷。
      第三種方案,綜合了一二兩種方案,揚(yáng)長(zhǎng)避短,優(yōu)勢(shì)互補(bǔ),自認(rèn)為是很好的方案。相對(duì)第四方案,優(yōu)點(diǎn):代碼少,占用內(nèi)存少,程序執(zhí)行較快,占用CPU時(shí)間較少,只利用了一個(gè)外部中斷0,能正確解碼NEC協(xié)議的遙控器信號(hào),禁止解碼別的協(xié)議遙控器的信號(hào)。缺點(diǎn):解碼頭部要延時(shí)9+4.5=13.5ms時(shí)間,有點(diǎn)長(zhǎng),CPU不能做其它任務(wù)。
      下面將前三種方案核心代碼貼出,歡迎大家評(píng)論交流,并指出錯(cuò)誤和不足   。
/*-----------------------------------------------
* 【實(shí)驗(yàn)平臺(tái)】: QX-單片機(jī)開(kāi)發(fā)板
* 【外部晶振】: 11.0592mhz        
* 【主控芯片】: STC89C52
* 【編譯環(huán)境】: Keil μVisio4         

  名稱:遙控器紅外解碼數(shù)碼管顯示
  使用:按遙控器會(huì)在數(shù)碼管上對(duì)應(yīng)顯示十六進(jìn)制鍵值

                NEC 協(xié)議下的編碼表示
                其中:引導(dǎo)碼高電平約9000us 左右,低電平約4500us 左右;
                接收端:引導(dǎo)碼低電平約9000us 左右,高電平約4500us 左右;
                用戶碼16 位,數(shù)據(jù)碼16 位,共32位;
        發(fā)送端:        數(shù)據(jù)0 是用“高電平約560us +低電平約560us”表示。
                數(shù)據(jù)1 可用“高電平約560us+低電平約1680us”表示

        接收端反轉(zhuǎn):數(shù)據(jù)0 是用“低電平約560us +高電平約560us”表示。
                   數(shù)據(jù)1 可用“低電平約560us+高電平約1680us”表示


------------------------------------------------*/





單片機(jī)源程序如下:

  1. #include<reg52.h>            //包含頭文件,頭文件包含特殊功能寄存器的定義

  2. sbit IR=P3^2;                          //紅外接口
  3. sbit beep = P2^3;//蜂鳴器接口
  4. #define DataPort P0         //定義數(shù)據(jù)端口 程序中遇到DataPort 則用P0 替換
  5. sbit LATCH1=P2^6;                //定義鎖存使能端口 段鎖存
  6. sbit LATCH2=P2^7;                //                 位鎖存

  7. unsigned char code dofly_DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
  8.                         0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  9.                                                 //0-F的碼表
  10. unsigned char  irtime;        //紅外用全局變量   計(jì)數(shù)延時(shí),識(shí)別比特位電平高低

  11. unsigned char IRcord[4];//存儲(chǔ)鍵碼

  12. void delay(unsigned int i)
  13. {
  14.         unsigned int m,n;
  15.         for(m=i;m>0;m--)
  16.                 for(n=114;n>0;n--);
  17. }

  18. void tim0_isr (void) interrupt 1 using 1  //STC89C52 11.0592M
  19. {
  20.   irtime++;  //用于計(jì)數(shù)2個(gè)下降沿之間的時(shí)間         每個(gè)溢出中斷時(shí)長(zhǎng)256*1.085us=277.7us
  21. }

  22. void EX0_ISR (void) interrupt 0 //外部中斷0服務(wù)函數(shù)
  23. {
  24.         static unsigned char  i;             //接收紅外信號(hào)處理
  25.           if( irtime <3 || irtime >54) goto end; //兩個(gè)下降沿延時(shí)過(guò)短(少于833us)或過(guò)長(zhǎng)不解碼 濾除干擾波

  26.         if(irtime > 45 && irtime < 54)//跳過(guò)引導(dǎo)碼 頭碼,9ms+4.5ms
  27.          {  
  28.                 irtime=0;
  29.                 i=0;
  30.         }                    
  31.         else{
  32.                         IRcord[i/8] >>= 1;          //i/8每處理8位換下一個(gè)元素,總的處理4個(gè)字節(jié)共32位的數(shù)據(jù)
  33.                          if(irtime > 6) IRcord[i/8] |= 0x80;           //位0電平時(shí)長(zhǎng)計(jì)數(shù)上限4,位1高電平計(jì)數(shù)上限8
  34.                     irtime = 0;                                                           //這里取6為0/1 的識(shí)別分界
  35.                     i++;
  36.                         if(i > 31){ i=0;  beep = 0;        delay(100); beep = 1; }
  37.                 }                                                 //beep 鳴叫一聲        解碼成功
  38.         end: irtime=0;                                                                           
  39. }


  40. void TIM0init(void)//定時(shí)器0初始化
  41. {
  42.         TMOD=0x02;//定時(shí)器0工作方式2,TH0是重裝值,TL0是初值
  43.         TH0=0x00; //重載值
  44.         TL0=0x00; //初始化值
  45.         ET0=1;    //開(kāi)中斷
  46.         TR0=1;   
  47. }
  48. void EX0init(void)
  49. {
  50. IT0 = 1;   //指定外部中斷0下降沿觸發(fā),INT0 (P3.2)
  51. EX0 = 1;   //使能外部中斷
  52. EA = 1;    //開(kāi)總中斷
  53. }
  54. void SMG_show(unsigned char num) //兩位數(shù)碼管顯示十六進(jìn)制鍵碼
  55. {
  56.         P0=dofly_DuanMa[num/16];           
  57.         LATCH1=1;
  58.         LATCH1=0;

  59.         P0=0xdf;           //選中第一個(gè)數(shù)碼管
  60.         LATCH2=1;
  61.         LATCH2=0;
  62.         delay(2);

  63.         P0=dofly_DuanMa[num%16];           
  64.         LATCH1=1;
  65.         LATCH1=0;

  66.         P0=0xbf;           //選中第二個(gè)數(shù)碼管
  67.         LATCH2=1;
  68.         LATCH2=0;
  69.         delay(2);
  70. }
  71. void main(void)
  72. {
  73.         EX0init(); //初始化外部中斷
  74.         TIM0init();//初始化定時(shí)器

  75.         while(1)//主循環(huán)
  76.         {
  77.                 SMG_show(IRcord[2]);//兩位數(shù)碼管顯示十六進(jìn)制鍵碼
  78.         }
  79. }
  80.   
  81.   
復(fù)制代碼
例程副本.rar (12.69 KB, 下載次數(shù): 66)

遙控器紅外解碼數(shù)碼管顯示——第一方案.jpg (200.56 KB, 下載次數(shù): 178)

遙控器紅外解碼數(shù)碼管顯示——第一方案.jpg

評(píng)分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏21 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:965487 發(fā)表于 2021-10-6 20:36 | 只看該作者
本帖最后由 wzqwxx 于 2021-10-6 20:40 編輯







例程副本.rar (12.69 KB, 下載次數(shù): 41)

紅外解碼數(shù)碼管顯示 -第3方案.rar (350.1 KB, 下載次數(shù): 66)

紅外解碼數(shù)碼管顯示 -第二方案.rar (359.96 KB, 下載次數(shù): 60)

紅外解碼數(shù)碼管顯示——第1方案.rar (257.96 KB, 下載次數(shù): 63)




回復(fù)

使用道具 舉報(bào)

板凳
ID:262 發(fā)表于 2021-10-7 03:27 | 只看該作者
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報(bào)

地板
ID:695749 發(fā)表于 2021-10-7 08:02 | 只看該作者
這種學(xué)習(xí)方式最實(shí)用,好資料,學(xué)習(xí)學(xué)習(xí)。
回復(fù)

使用道具 舉報(bào)

5#
ID:965487 發(fā)表于 2021-10-7 11:19 | 只看該作者
謝謝版主給于100黑幣獎(jiǎng)勵(lì),感謝大家精神鼓勵(lì)。

第一次在貴論壇發(fā)帖,版面有點(diǎn)亂,圖片尺寸大了。現(xiàn)在才知道發(fā)源代碼有插件的。下次會(huì)改進(jìn)。
回復(fù)

使用道具 舉報(bào)

6#
ID:82491 發(fā)表于 2022-1-24 09:03 | 只看該作者
你好請(qǐng)問(wèn)紅外相關(guān)的教程有哪些方便分享一下嗎?最近額想學(xué)習(xí)一下紅外相關(guān)的。
回復(fù)

使用道具 舉報(bào)

7#
ID:965189 發(fā)表于 2022-1-24 12:22 | 只看該作者
沒(méi)詳細(xì)看,有沒(méi)有連續(xù)碼的識(shí)別?
回復(fù)

使用道具 舉報(bào)

8#
ID:71233 發(fā)表于 2022-1-25 12:38 | 只看該作者
精神可嘉,但遺憾的是附件需要多次下載。
回復(fù)

使用道具 舉報(bào)

9#
ID:378617 發(fā)表于 2022-9-6 01:20 | 只看該作者

好用嗎?????????????
回復(fù)

使用道具 舉報(bào)

10#
ID:966606 發(fā)表于 2022-9-6 10:16 | 只看該作者
這種學(xué)習(xí)方式最實(shí)用,好資料,學(xué)習(xí)學(xué)習(xí)。
回復(fù)

使用道具 舉報(bào)

11#
ID:137736 發(fā)表于 2022-9-7 10:24 | 只看該作者

很好的例程,謝謝
回復(fù)

使用道具 舉報(bào)

12#
ID:325735 發(fā)表于 2023-3-7 17:23 | 只看該作者
能解碼空調(diào)不
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久最新精品视频 | 国产不卡视频 | 久久国产精品视频免费看 | 亚洲国产aⅴ精品 | 免费一看一级毛片 | 国产蜜臀97一区二区三区 | 久久久久久免费看 | 亚洲永久字幕 | 9久9久9久女女女九九九一九 | 亚洲在线一区二区三区 | 精品一区二区三区在线观看国产 | 亚洲一区久久 | 亚洲精品在 | 国外成人在线视频 | 毛片一级片 | 水蜜桃久久夜色精品一区 | 在线日韩福利 | av在线天堂 | 精品日韩在线 | 久久久久久久综合色一本 | 亚洲乱码一区二区三区在线观看 | 天天艹 | 国产不卡在线观看 | 亚洲精品视频免费观看 | 奇米超碰 | 羞羞网站免费观看 | 欧美日韩综合精品 | 国产精品久久久 | 真人女人一级毛片免费播放 | av天天爽 | 久久久久国产一区二区三区 | 国产精品一码二码三码在线 | 亚洲国产成人精品一区二区 | 99精品视频在线观看免费播放 | 国产精品国产三级国产aⅴ原创 | 91久久国产综合久久91精品网站 | 国产网站在线 | 色永久| 欧美日韩亚洲国产综合 | 97起碰| 亚洲美女天堂网 |