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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 38637|回復: 81
打印 上一主題 下一主題
收起左側

學習型萬能紅外遙控器設計與制作 含單片機源程序與PCB及原理圖

  [復制鏈接]
跳轉到指定樓層
樓主
ID:228524 發表于 2018-5-21 16:57 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
基于51單片機的萬能紅外遙控器的設計資料分享給51hei的朋友們
這個單片機選擇的是STC15F2K60S2型高速單片機,這個遙控器主要分為兩種模式
(1)遙控模式
        在這個模式下這個遙控器可以遙控其他的紅外設備,和正常的遙控器一樣。
(2)學習模式
        這個模式是獲取其他遙控器的用戶碼以及鍵碼,然后把獲取的用戶碼和鍵碼儲存到單片機的EEPROM中,所以這個遙控器具有掉電不丟失的功能。
最后一點就是介紹一下遙控器的小燈的功能。小燈起的是指示的功能,在剛開機的時候,如果是遙控模式小燈閃兩下,學習模式小燈閃三下。在遙控模式下按鍵按一下,小燈閃一下。在學習模式下,紅外接收頭接收到一幀數據小燈閃兩下,連續接收兩幀數據小燈閃四下。按鍵按一下小燈閃一下。

制作出來的實物圖如下:


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


單片機學習型遙控器的源程序如下:
  1. /*
  2. 單片機型號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重載值的高字節
  16. uint8 T0RL = 0;    //T0重載值的低字節
  17. uint8 LED_Control = 0;

  18. bit irflag = 0;           //"紅外接收標志,收到一幀正確數據后置1"

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

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

  29.         if(Mode_CHO)                //判斷要使用什么模式
  30.         {
  31.                 MODE = 1;       //遙控模式
  32.                 PWM_Init();            //產生38K載波
  33.                 LED_Control = 2;    //小燈閃爍2次         代表控制模式
  34.         }
  35.         else
  36.         {
  37.                 MODE = 0;                //學習模式
  38.                 InitInfrared();            //紅外線接收初始化
  39.                 LED_Control = 3; //小燈閃爍2次          代表學習模式
  40.         }
  41.         while (1)
  42.         {
  43.                 KeyDriver();            //按鍵驅動
  44.                 if(irflag&&(CodeBuff<16))         //irflag接收完成標志,
  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();                                                 //接收第一個字節
  55.                         }
  56.                         if(timebyte<500)                                                        //在短時間內收到第二個字節則接收
  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;                                                 //接收第二個字節
  65.                         }
  66.                         timebyte=0;//從接收到第一幀數據開始計時
  67.                         LED_Control += 2; //小燈閃爍2次          接收完成一次小燈閃爍兩次
  68.                 }
  69.         }
  70. }
  71. /* 配置并啟動T0,ms-T0定時時間 */
  72. void ConfigTimer2()
  73. {
  74. //    AUXR &= ~0x04;                  //定時器2為12T模式
  75. //    T2L = 0X60;                     //初始化計時值
  76. //    T2H = 0Xf0;
  77. //    AUXR |= 0x10;                   //定時器2開始計時   
  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++;//計算字節之間的時間
  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();   //執行按鍵掃描
  108. }
  109. //中斷服務程序
  110. void Interrupt38KPWM() interrupt 3           //中斷入口
  111. {
  112.         IR = !IR;  
  113. //  IE2 &= ~0x04;                   //若需要手動清除中斷標志,可先關閉中斷,此時系統會自動清除內部的中斷標志
  114. //  IE2 |= 0x04;                    //然后再開中斷即可
  115. }
  116. /* "INT1中斷服務函數,執行紅外接收及解碼 "*/
  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.     //"接收并判定引導碼的9ms低電平"
  124.     time = GetLowTime();
  125.     if ((time<8500*2) || (time>9500*2))  //"時間判定范圍為8.5~9.5ms,"                //((time<7833) || (time>8755))
  126.     {                                //"超過此范圍則說明為誤碼,直接退出 "
  127.         IE1 = 0;   //"退出前清零INT1中斷標志"
  128.         return;
  129.     }
  130.     //"接收并判定引導碼的4.5ms高電平"
  131.     time = GetHighTime();
  132.     if ((time<4000*2) || (time>5000*2))  //"時間判定范圍為4.0~5.0ms,"                //((time<3686) || (time>4608))
  133.     {                                //"超過此范圍則說明為誤碼,直接退出"
  134.         IE1 = 0;
  135.         return;
  136.     }
  137.     //"接收并判定后續的4字節數據"
  138.     for (i=0; i<4; i++)  //"循環接收4個字節"
  139.     {
  140.         for (j=0; j<8; j++)  //"循環接收判定每字節的8個bit"
  141.         {
  142.             //"接收判定每bit的560us低電平 "
  143.             time = GetLowTime();
  144.             if ((time<340*2) || (time>780*2)) //"時間判定范圍為340~780us,        "                 //((time<313) || (time>718))
  145.             {                             //"超過此范圍則說明為誤碼,直接退出"
  146.                 IE1 = 0;
  147.                 return;
  148.             }
  149.             //"接收每bit高電平時間,判定該bit的值"
  150.             time = GetHighTime();
  151.             if ((time>340*2) && (time<780*2)) //"時間判定范圍為340~780us,"                //((time>313) && (time<718))
  152.             {                             //"在此范圍內說明該bit值為0"
  153.                 byt >>= 1;   //"因低位在先,所以數據右移,高位為0"
  154.             }
  155.             else if ((time>1460*2) && (time<1900*2)) //"時間判定范圍為1460~1900us,"        //((time>1345) && (time<1751))
  156.             {                                    //"在此范圍內說明該bit值為1"
  157.                 byt >>= 1;   //"因低位在先,所以數據右移, "
  158.                 byt |= 0x80; //"高位置1"
  159.             }
  160.             else  //"不在上述范圍內則說明為誤碼,直接退出"
  161.             {
  162.                 IE1 = 0;
  163.                 return;
  164.             }
  165.         }
  166.         ircode[i] = byt;  //"接收完一個字節后保存到緩沖區"
  167.     }
  168.     irflag = 1;  //"接收完畢后設置標志"
  169.     IE1 = 0;     //"退出前清零INT1中斷標志"
  170. ……………………

  171. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼


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


評分

參與人數 4黑幣 +89 收起 理由
INVIO + 30 共享資料的黑幣獎勵!
jjjjhh + 4 贊一個!
pen_2B + 5 很給力!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏68 分享淘帖 頂16 踩
回復

使用道具 舉報

沙發
ID:227422 發表于 2018-6-27 21:59 | 只看該作者
不錯,我想下載
回復

使用道具 舉報

板凳
ID:282747 發表于 2018-7-2 13:11 | 只看該作者
我也想下載看看
回復

使用道具 舉報

地板
ID:325642 發表于 2018-7-4 19:26 | 只看該作者
這個不錯哦
回復

使用道具 舉報

5#
ID:290576 發表于 2018-8-22 13:45 | 只看該作者
謝謝樓主分享
回復

使用道具 舉報

6#
ID:390052 發表于 2018-8-25 22:16 來自手機 | 只看該作者
好東西,謝謝分享
回復

使用道具 舉報

7#
ID:199210 發表于 2018-9-6 10:59 | 只看該作者
有做成成品的嗎,謝謝分享。
回復

使用道具 舉報

8#
ID:398219 發表于 2018-9-15 10:14 | 只看該作者
非常好,下載下來學習一下
回復

使用道具 舉報

9#
ID:380389 發表于 2018-9-16 12:04 | 只看該作者
贊  很實用   感謝分享
回復

使用道具 舉報

10#
ID:401532 發表于 2018-9-23 11:55 | 只看該作者
不錯,我想下載
回復

使用道具 舉報

11#
ID:399179 發表于 2018-9-23 19:58 來自手機 | 只看該作者
感謝樓主分享!
回復

使用道具 舉報

12#
ID:227832 發表于 2018-10-1 17:05 | 只看該作者

感謝樓主分享!
回復

使用道具 舉報

13#
ID:227832 發表于 2018-10-9 22:40 | 只看該作者
謝謝樓主分享
回復

使用道具 舉報

14#
ID:154310 發表于 2018-12-31 22:33 | 只看該作者
太厲害了
回復

使用道具 舉報

15#
ID:438499 發表于 2019-1-1 07:00 | 只看該作者
非常好,學習學習!
回復

使用道具 舉報

16#
ID:475903 發表于 2019-2-12 14:12 | 只看該作者
好貼
回復

使用道具 舉報

17#
ID:483019 發表于 2019-3-5 10:02 | 只看該作者
終于找到了,謝謝樓主
回復

使用道具 舉報

18#
ID:471632 發表于 2019-3-6 10:45 | 只看該作者
這個用c51不行嗎?
回復

使用道具 舉報

19#
ID:487502 發表于 2019-3-10 10:50 | 只看該作者
非常感謝,學習中。
回復

使用道具 舉報

20#
ID:487159 發表于 2019-3-11 00:41 來自手機 | 只看該作者
好帖,值得學習
回復

使用道具 舉報

21#
ID:487294 發表于 2019-3-11 17:57 | 只看該作者
樓主在嗎,有問題想向你請教呀
回復

使用道具 舉報

22#
ID:487294 發表于 2019-3-11 17:59 | 只看該作者
樓主在嗎,想請教一些問題
回復

使用道具 舉報

23#
ID:487926 發表于 2019-4-19 19:19 | 只看該作者

這個原理圖為什么沒有最小系統
回復

使用道具 舉報

24#
ID:56665 發表于 2019-4-23 19:16 | 只看該作者
謝謝分享!
回復

使用道具 舉報

25#
ID:519862 發表于 2019-4-23 19:39 | 只看該作者
有搞成功的嘛
回復

使用道具 舉報

26#
ID:146746 發表于 2019-4-24 19:49 | 只看該作者
感謝樓主
回復

使用道具 舉報

27#
ID:522698 發表于 2019-4-27 06:38 | 只看該作者
謝謝樓主分享
回復

使用道具 舉報

28#
ID:484435 發表于 2019-4-27 10:59 | 只看該作者
感謝樓主分享
回復

使用道具 舉報

29#
ID:296138 發表于 2019-4-27 11:57 來自手機 | 只看該作者
厲害了
回復

使用道具 舉報

30#
ID:305245 發表于 2019-4-27 14:18 | 只看該作者
正需要,想做一個學習型遙控器
回復

使用道具 舉報

31#
ID:19690 發表于 2019-4-28 00:16 來自手機 | 只看該作者
非常感謝樓主學習了
回復

使用道具 舉報

32#
ID:535270 發表于 2019-5-11 13:06 | 只看該作者
感謝作者
回復

使用道具 舉報

33#
ID:266802 發表于 2019-5-26 20:39 | 只看該作者
樓主,這個學子之后斷電會保留學習之后的信號嗎
回復

使用道具 舉報

34#
ID:128463 發表于 2019-6-1 16:03 | 只看該作者

好東西,謝謝分享!!
回復

使用道具 舉報

35#
ID:189311 發表于 2019-6-9 22:14 | 只看該作者
想下載,黑幣不夠怎么辦
回復

使用道具 舉報

36#
ID:574438 發表于 2019-6-29 11:03 | 只看該作者
不錯,,好東西
回復

使用道具 舉報

37#
ID:561138 發表于 2019-7-1 15:46 來自手機 | 只看該作者
學習下,贊
回復

使用道具 舉報

38#
ID:579784 發表于 2019-7-8 10:47 | 只看該作者
分享能送我黑幣嗎
回復

使用道具 舉報

39#
ID:312300 發表于 2019-7-25 08:21 | 只看該作者
感謝樓主無私分享!!!
回復

使用道具 舉報

40#
ID:445367 發表于 2019-8-6 20:16 | 只看該作者
資料很棒,正是需要的
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 网站国产 | 亚洲欧美综合精品另类天天更新 | 亚洲精品视频免费观看 | 欧美高清一区 | 免费黄色大片 | 国产视频中文字幕在线观看 | 一区二区三区在线播放视频 | 99欧美精品| 伊人免费在线观看高清 | 免费成人国产 | 亚洲精品久久久久久久久久吃药 | 久久天天 | 国产一区二区精 | 国产精产国品一二三产区视频 | 成人在线观看免费爱爱 | 天堂成人国产精品一区 | 中文字幕在线不卡播放 | 日日草夜夜草 | 精品国产一区二区在线 | 日韩福利 | 国产精品毛片一区二区在线看 | 超碰导航| 国产在线视频一区二区董小宛性色 | 久久av网 | 天天av网 | 香蕉大人久久国产成人av | 亚洲欧美在线观看 | 国产区一区二区三区 | 日本天天操 | 激情欧美一区二区三区中文字幕 | 特级黄色毛片 | aaa在线 | 成人在线免费观看视频 | 国产精品亚洲视频 | 精品一区二区在线观看 | 伦理二区| 成人免费在线 | 精品一区二区久久久久久久网站 | 国产精品久久久久久久久 | 综合网伊人 | 精品欧美一区二区精品久久久 |