標(biāo)題: 學(xué)習(xí)型萬(wàn)能紅外遙控器設(shè)計(jì)與制作 含單片機(jī)源程序與PCB及原理圖 [打印本頁(yè)]

作者: 電子特工    時(shí)間: 2018-5-21 16:57
標(biāo)題: 學(xué)習(xí)型萬(wàn)能紅外遙控器設(shè)計(jì)與制作 含單片機(jī)源程序與PCB及原理圖
基于51單片機(jī)的萬(wàn)能紅外遙控器的設(shè)計(jì)資料分享給51hei的朋友們
這個(gè)單片機(jī)選擇的是STC15F2K60S2型高速單片機(jī),這個(gè)遙控器主要分為兩種模式
(1)遙控模式
        在這個(gè)模式下這個(gè)遙控器可以遙控其他的紅外設(shè)備,和正常的遙控器一樣。
(2)學(xué)習(xí)模式
        這個(gè)模式是獲取其他遙控器的用戶碼以及鍵碼,然后把獲取的用戶碼和鍵碼儲(chǔ)存到單片機(jī)的EEPROM中,所以這個(gè)遙控器具有掉電不丟失的功能。
最后一點(diǎn)就是介紹一下遙控器的小燈的功能。小燈起的是指示的功能,在剛開(kāi)機(jī)的時(shí)候,如果是遙控模式小燈閃兩下,學(xué)習(xí)模式小燈閃三下。在遙控模式下按鍵按一下,小燈閃一下。在學(xué)習(xí)模式下,紅外接收頭接收到一幀數(shù)據(jù)小燈閃兩下,連續(xù)接收兩幀數(shù)據(jù)小燈閃四下。按鍵按一下小燈閃一下。

制作出來(lái)的實(shí)物圖如下:


Altium Designer畫(huà)的學(xué)習(xí)型紅外遙控器原理圖和PCB圖如下:(51hei附件中可下載工程文件)


單片機(jī)學(xué)習(xí)型遙控器的源程序如下:
  1. /*
  2. 單片機(jī)型號(hào)STC15F2K60S2,晶振24MHZ
  3. */
  4. #include "config.h"
  5. #include "main.h"
  6. #include "keyboard.h"
  7. #include "PWM_Init.h"
  8. #include "EEPROM.h"
  9. #include "Infrared_Init.h"
  10. #include<intrins.h>

  11. uint8 IR_Send_Code[16][4];
  12. uint8 xdata IR_Send_Code2[16][4];
  13. uint8 Send_Flag[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
  14. uint16 timebyte;
  15. uint8 T0RH = 0;    //T0重載值的高字節(jié)
  16. uint8 T0RL = 0;    //T0重載值的低字節(jié)
  17. uint8 LED_Control = 0;

  18. bit irflag = 0;           //"紅外接收標(biāo)志,收到一幀正確數(shù)據(jù)后置1"

  19. unsigned char ircode[4];  //"紅外代碼接收緩沖區(qū)"

  20. bit MODE = 1;
  21. volatile unsigned char CodeBuff=30;
  22. void main()
  23. {
  24.         P1=0XFF;
  25.         LED = 1;
  26.         ConfigTimer2();    //定時(shí)器0 1KHZ
  27.         EEPROM_Init();                //把所有的EEPROM中的數(shù)據(jù)讀到緩存區(qū)中
  28.         EA=1;                            //總中斷打開(kāi)

  29.         if(Mode_CHO)                //判斷要使用什么模式
  30.         {
  31.                 MODE = 1;       //遙控模式
  32.                 PWM_Init();            //產(chǎn)生38K載波
  33.                 LED_Control = 2;    //小燈閃爍2次         代表控制模式
  34.         }
  35.         else
  36.         {
  37.                 MODE = 0;                //學(xué)習(xí)模式
  38.                 InitInfrared();            //紅外線接收初始化
  39.                 LED_Control = 3; //小燈閃爍2次          代表學(xué)習(xí)模式
  40.         }
  41.         while (1)
  42.         {
  43.                 KeyDriver();            //按鍵驅(qū)動(dòng)
  44.                 if(irflag&&(CodeBuff<16))         //irflag接收完成標(biāo)志,
  45.                 {
  46.                         irflag=0;

  47.                         if(timebyte>=500)
  48.                         {
  49.                                 IR_Send_Code[CodeBuff][0]=ircode[0];        //功能碼
  50.                                 IR_Send_Code[CodeBuff][1]=ircode[1];         //功能碼反碼
  51.                                 IR_Send_Code[CodeBuff][2]=ircode[2];         //鍵碼
  52.                                 IR_Send_Code[CodeBuff][3]=ircode[3];         //鍵碼反碼
  53.                                 Send_Flag[CodeBuff]=0;
  54.                                 EEPROM_Write();                                                 //接收第一個(gè)字節(jié)
  55.                         }
  56.                         if(timebyte<500)                                                        //在短時(shí)間內(nèi)收到第二個(gè)字節(jié)則接收
  57.                         {
  58.                                 IR_Send_Code2[CodeBuff][0]=ircode[0];        //功能碼
  59.                                 IR_Send_Code2[CodeBuff][1]=ircode[1];         //功能碼反碼
  60.                                 IR_Send_Code2[CodeBuff][2]=ircode[2];         //鍵碼
  61.                                 IR_Send_Code2[CodeBuff][3]=ircode[3];         //鍵碼反碼
  62.                                 Send_Flag[CodeBuff]=1;
  63.                                 EEPROM_Write();
  64.                                 LED_Control=5;                                                 //接收第二個(gè)字節(jié)
  65.                         }
  66.                         timebyte=0;//從接收到第一幀數(shù)據(jù)開(kāi)始計(jì)時(shí)
  67.                         LED_Control += 2; //小燈閃爍2次          接收完成一次小燈閃爍兩次
  68.                 }
  69.         }
  70. }
  71. /* 配置并啟動(dòng)T0,ms-T0定時(shí)時(shí)間 */
  72. void ConfigTimer2()
  73. {
  74. //    AUXR &= ~0x04;                  //定時(shí)器2為12T模式
  75. //    T2L = 0X60;                     //初始化計(jì)時(shí)值
  76. //    T2H = 0Xf0;
  77. //    AUXR |= 0x10;                   //定時(shí)器2開(kāi)始計(jì)時(shí)   
  78. //    IE2 |= 0x04;
  79.         AUXR &= 0xFB;                //?????12T??
  80.         T2L = 0x30;                //??????
  81.         T2H = 0xF8;                //??????
  82.         AUXR |= 0x10;                //???2????
  83.          IE2 |= 0x04;
  84. }


  85. void InterruptTimer2() interrupt 12
  86. {
  87.    static unsigned int i=0,j=0;
  88.         i++;
  89.         timebyte++;//計(jì)算字節(jié)之間的時(shí)間
  90.         if(LED_Control)
  91.         {
  92.                 if(!(i%50))
  93.                 {
  94.                         LED=!LED;
  95.                         i=0;
  96.                         j++;
  97.                 }
  98.                 if(j==(2*LED_Control))
  99.                 {
  100.                         LED_Control=0;
  101.                         LED=1;
  102.                         j=0;
  103.                 }
  104.         }
  105.         if(timebyte>600)
  106.                 timebyte=600;
  107.     KeyScan();   //執(zhí)行按鍵掃描
  108. }
  109. //中斷服務(wù)程序
  110. void Interrupt38KPWM() interrupt 3           //中斷入口
  111. {
  112.         IR = !IR;  
  113. //  IE2 &= ~0x04;                   //若需要手動(dòng)清除中斷標(biāo)志,可先關(guān)閉中斷,此時(shí)系統(tǒng)會(huì)自動(dòng)清除內(nèi)部的中斷標(biāo)志
  114. //  IE2 |= 0x04;                    //然后再開(kāi)中斷即可
  115. }
  116. /* "INT1中斷服務(wù)函數(shù),執(zhí)行紅外接收及解碼 "*/
  117. void EXINT1_ISR() interrupt 2
  118. {
  119.     unsigned char i, j;
  120.     unsigned char byt;
  121.     unsigned int time;
  122. //        LED_Control=1;
  123.     //"接收并判定引導(dǎo)碼的9ms低電平"
  124.     time = GetLowTime();
  125.     if ((time<8500*2) || (time>9500*2))  //"時(shí)間判定范圍為8.5~9.5ms,"                //((time<7833) || (time>8755))
  126.     {                                //"超過(guò)此范圍則說(shuō)明為誤碼,直接退出 "
  127.         IE1 = 0;   //"退出前清零INT1中斷標(biāo)志"
  128.         return;
  129.     }
  130.     //"接收并判定引導(dǎo)碼的4.5ms高電平"
  131.     time = GetHighTime();
  132.     if ((time<4000*2) || (time>5000*2))  //"時(shí)間判定范圍為4.0~5.0ms,"                //((time<3686) || (time>4608))
  133.     {                                //"超過(guò)此范圍則說(shuō)明為誤碼,直接退出"
  134.         IE1 = 0;
  135.         return;
  136.     }
  137.     //"接收并判定后續(xù)的4字節(jié)數(shù)據(jù)"
  138.     for (i=0; i<4; i++)  //"循環(huán)接收4個(gè)字節(jié)"
  139.     {
  140.         for (j=0; j<8; j++)  //"循環(huán)接收判定每字節(jié)的8個(gè)bit"
  141.         {
  142.             //"接收判定每bit的560us低電平 "
  143.             time = GetLowTime();
  144.             if ((time<340*2) || (time>780*2)) //"時(shí)間判定范圍為340~780us,        "                 //((time<313) || (time>718))
  145.             {                             //"超過(guò)此范圍則說(shuō)明為誤碼,直接退出"
  146.                 IE1 = 0;
  147.                 return;
  148.             }
  149.             //"接收每bit高電平時(shí)間,判定該bit的值"
  150.             time = GetHighTime();
  151.             if ((time>340*2) && (time<780*2)) //"時(shí)間判定范圍為340~780us,"                //((time>313) && (time<718))
  152.             {                             //"在此范圍內(nèi)說(shuō)明該bit值為0"
  153.                 byt >>= 1;   //"因低位在先,所以數(shù)據(jù)右移,高位為0"
  154.             }
  155.             else if ((time>1460*2) && (time<1900*2)) //"時(shí)間判定范圍為1460~1900us,"        //((time>1345) && (time<1751))
  156.             {                                    //"在此范圍內(nèi)說(shuō)明該bit值為1"
  157.                 byt >>= 1;   //"因低位在先,所以數(shù)據(jù)右移, "
  158.                 byt |= 0x80; //"高位置1"
  159.             }
  160.             else  //"不在上述范圍內(nèi)則說(shuō)明為誤碼,直接退出"
  161.             {
  162.                 IE1 = 0;
  163.                 return;
  164.             }
  165.         }
  166.         ircode[i] = byt;  //"接收完一個(gè)字節(jié)后保存到緩沖區(qū)"
  167.     }
  168.     irflag = 1;  //"接收完畢后設(shè)置標(biāo)志"
  169.     IE1 = 0;     //"退出前清零INT1中斷標(biāo)志"
  170. ……………………

  171. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼


所有資料51hei提供下載:
紅外遙控.rar (752.31 KB, 下載次數(shù): 958)



作者: lwslws201    時(shí)間: 2018-6-27 21:59
不錯(cuò),我想下載
作者: shijie240    時(shí)間: 2018-7-2 13:11
我也想下載看看
作者: 冬天的野狼    時(shí)間: 2018-7-4 19:26
這個(gè)不錯(cuò)哦
作者: wuyuwangluo    時(shí)間: 2018-8-22 13:45
謝謝樓主分享
作者: wook2008    時(shí)間: 2018-8-25 22:16
好東西,謝謝分享
作者: fate998    時(shí)間: 2018-9-6 10:59
有做成成品的嗎,謝謝分享。
作者: herui2128    時(shí)間: 2018-9-15 10:14
非常好,下載下來(lái)學(xué)習(xí)一下
作者: xsj1877578806    時(shí)間: 2018-9-16 12:04
贊  很實(shí)用   感謝分享
作者: chngok    時(shí)間: 2018-9-23 11:55
不錯(cuò),我想下載
作者: 快樂(lè)眼淚    時(shí)間: 2018-9-23 19:58
感謝樓主分享!
作者: xiong731    時(shí)間: 2018-10-1 17:05

感謝樓主分享!
作者: xiong731    時(shí)間: 2018-10-9 22:40
謝謝樓主分享
作者: KittyCircle    時(shí)間: 2018-12-31 22:33
太厲害了
作者: renzhifei    時(shí)間: 2019-1-1 07:00
非常好,學(xué)習(xí)學(xué)習(xí)!
作者: 282313283    時(shí)間: 2019-2-12 14:12
好貼

作者: wherestheway    時(shí)間: 2019-3-5 10:02
終于找到了,謝謝樓主
作者: tigerzq    時(shí)間: 2019-3-6 10:45
這個(gè)用c51不行嗎?
作者: caoailin    時(shí)間: 2019-3-10 10:50
非常感謝,學(xué)習(xí)中。
作者: 海闊天空688    時(shí)間: 2019-3-11 00:41
好帖,值得學(xué)習(xí)
作者: Doom123    時(shí)間: 2019-3-11 17:57
樓主在嗎,有問(wèn)題想向你請(qǐng)教呀
作者: Doom123    時(shí)間: 2019-3-11 17:59
樓主在嗎,想請(qǐng)教一些問(wèn)題
作者: danpianji?    時(shí)間: 2019-4-19 19:19
海闊天空688 發(fā)表于 2019-3-11 00:41
好帖,值得學(xué)習(xí)

這個(gè)原理圖為什么沒(méi)有最小系統(tǒng)

作者: m182892    時(shí)間: 2019-4-23 19:16
謝謝分享!
作者: lkning    時(shí)間: 2019-4-23 19:39
有搞成功的嘛
作者: 新手勿噴    時(shí)間: 2019-4-24 19:49
感謝樓主
作者: czjinfeng    時(shí)間: 2019-4-27 06:38
謝謝樓主分享
作者: 遷就    時(shí)間: 2019-4-27 10:59
感謝樓主分享
作者: 風(fēng)臨意識(shí)    時(shí)間: 2019-4-27 11:57
厲害了
作者: 13828617332    時(shí)間: 2019-4-27 14:18
正需要,想做一個(gè)學(xué)習(xí)型遙控器
作者: ZSS    時(shí)間: 2019-4-28 00:16
非常感謝樓主學(xué)習(xí)了
作者: jingy    時(shí)間: 2019-5-11 13:06
感謝作者

作者: 206004430    時(shí)間: 2019-5-26 20:39
樓主,這個(gè)學(xué)子之后斷電會(huì)保留學(xué)習(xí)之后的信號(hào)嗎
作者: lyseg    時(shí)間: 2019-6-1 16:03

好東西,謝謝分享!!
作者: AmbitionXN    時(shí)間: 2019-6-9 22:14
想下載,黑幣不夠怎么辦
作者: 13786041285    時(shí)間: 2019-6-29 11:03
不錯(cuò),,好東西
作者: 杰哥仔    時(shí)間: 2019-7-1 15:46
學(xué)習(xí)下,贊
作者: student_hyq    時(shí)間: 2019-7-8 10:47
分享能送我黑幣嗎

作者: wang930626    時(shí)間: 2019-7-25 08:21
感謝樓主無(wú)私分享!。
作者: l258669449    時(shí)間: 2019-8-6 20:16
資料很棒,正是需要的
作者: zm33441234    時(shí)間: 2019-8-10 10:53
我也想看一看
作者: laoji    時(shí)間: 2019-8-26 16:46
樓主好人
作者: shuguang3302    時(shí)間: 2019-10-6 15:01
能學(xué)習(xí)空調(diào)遙控么?
作者: shuguang3302    時(shí)間: 2019-10-6 15:01
能學(xué)習(xí)空調(diào)遙控么?
作者: janzeon    時(shí)間: 2019-10-17 14:54
不錯(cuò),不錯(cuò)!很給力呀!
作者: janzeon    時(shí)間: 2019-10-17 14:55
很不錯(cuò)!學(xué)習(xí)學(xué)習(xí)!
作者: wangyifan    時(shí)間: 2019-10-21 10:21
我試了一下,沒(méi)有成功,有誰(shuí)做成功了嗎?
作者: 我不是大神1    時(shí)間: 2019-11-13 22:51
學(xué)習(xí)下啦
作者: herui2128    時(shí)間: 2020-1-11 17:50
謝謝大神分享,下載學(xué)習(xí)中
作者: 老小學(xué)生    時(shí)間: 2020-1-14 12:14
如果用3v都可以工作就完美了。
作者: QQ笑    時(shí)間: 2020-2-7 12:01
有人成功了嗎?

作者: 不吃草的牛    時(shí)間: 2020-2-7 23:37
紅外線太神奇了,現(xiàn)在還不能DIY
作者: hhdsdy    時(shí)間: 2020-2-10 12:00
待機(jī)時(shí)CPU進(jìn)入睡眠嗎?平時(shí)耗電怎么樣?可能還達(dá)不到實(shí)用狀態(tài)吧?
作者: 8zhangben    時(shí)間: 2020-2-13 20:58
不錯(cuò),,好東西,謝謝LZ分享
作者: hxszrb    時(shí)間: 2020-2-15 00:22
好東西,來(lái)學(xué)習(xí)的
作者: ABONE    時(shí)間: 2020-2-16 22:53

好東西,謝謝分享
作者: whpearl    時(shí)間: 2020-2-17 11:58
感謝分享
作者: ivwsyu    時(shí)間: 2020-2-26 15:14

我也想下載看看
作者: wsh791    時(shí)間: 2020-2-29 22:05
謝謝分享
作者: csd2020    時(shí)間: 2020-3-24 21:21
謝謝樓主
作者: lism75    時(shí)間: 2020-3-25 00:27
下載下來(lái)試試,謝謝分享
作者: yitong1979    時(shí)間: 2020-3-30 18:01
正找呢 謝謝分享
作者: 【。.】    時(shí)間: 2020-4-2 12:25
謝樓主分享
作者: Siddhartha    時(shí)間: 2020-4-3 18:34
想下載來(lái)看看
作者: 嘩啦嘩啦    時(shí)間: 2020-4-12 21:34
謝謝分享,希望對(duì)我有用
作者: 夏雨微涼    時(shí)間: 2020-4-18 21:55
wangyifan 發(fā)表于 2019-10-21 10:21
我試了一下,沒(méi)有成功,有誰(shuí)做成功了嗎?

請(qǐng)問(wèn)你還有印象嗎?當(dāng)時(shí)成功了嗎??


作者: quanhengwen    時(shí)間: 2020-4-19 05:38


感謝樓主分享!
作者: 993418064    時(shí)間: 2020-5-24 20:22
對(duì)新手來(lái)說(shuō)挺實(shí)用的,操作性好

作者: redbeanzzz    時(shí)間: 2020-6-2 22:37
謝謝樓主分享
作者: 成森林    時(shí)間: 2020-11-24 08:35
謝謝樓主,我下載了!
作者: righthe    時(shí)間: 2020-12-5 17:00
感謝無(wú)私分享,我們要向樓主學(xué)習(xí)
作者: zhangleixbyl    時(shí)間: 2020-12-16 06:26
這個(gè)挺好想做一個(gè)
作者: 冰鎮(zhèn)小年糕    時(shí)間: 2021-1-9 14:33
感謝樓主無(wú)私分享。。
作者: wjcxy3166    時(shí)間: 2021-3-10 20:34
是學(xué)習(xí)遙控的好資料,下載來(lái)看看
作者: spock7    時(shí)間: 2021-7-4 20:48
正想學(xué)習(xí)紅外,謝謝樓主分享
作者: feichangfashao    時(shí)間: 2021-8-23 14:38
謝謝,不過(guò)程序不小啊,還沒(méi)顧上看呢
作者: jiangje    時(shí)間: 2021-9-2 07:45
長(zhǎng)知識(shí)了,謝謝了!
作者: 玉萌業(yè)余發(fā)展    時(shí)間: 2021-9-21 11:11
這個(gè)好深?yuàn)W哈!學(xué)不來(lái)呢
作者: qzyhlf    時(shí)間: 2021-12-10 17:10
好資料,51黑有你更精彩!!!
作者: zydl123    時(shí)間: 2021-12-21 22:58
不錯(cuò),有時(shí)間也來(lái)制作一個(gè)
作者: lllzzzlll    時(shí)間: 2023-8-15 00:02
用到的外圍元件也不多,真是簡(jiǎn)潔實(shí)用, 真不錯(cuò)
作者: 鯨致美食    時(shí)間: 2023-10-26 13:15

我也想做一個(gè)學(xué)習(xí)型遙控器




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1