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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 16342|回復: 20
打印 上一主題 下一主題
收起左側(cè)

基于stm32的紅外遙控器學習與發(fā)射程序源碼

  [復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:58581 發(fā)表于 2018-7-12 15:21 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
通過載波學習紅外,并可還原發(fā)送出去

單片機源程序如下:
  1. #include "stdio.h"
  2. #include "delay.h"
  3. #include "sys.h"
  4. #include "led.h"
  5. #include "myuart.h"
  6. #include "ir.h"
  7. #include "irsend.h"
  8. #include "learn.h"
  9. #include "key.h"
  10. #include "pwm.h"
  11. #include "remoteflash.h"

  12. #include "lcd.h"


  13. /* 接口
  14. 發(fā)送指示燈 LED_SEND -- PC.0
  15. 學習指示燈 LED_COPY -- PC.1
  16. 按鍵                         K1 -- PA.3
  17.                                  K2 -- PA.4
  18.                                  K3 -- PA.5
  19.                                  K4 -- PA.6
  20.                                  K5 -- PA.7
  21. 學習按鍵        KEY -- PA.2
  22. 接收使能                 DQ -- PC.3
  23. 紅外接收引腳        OUT -- PA.1
  24. 載波38K         38K -- PA.0
  25. 發(fā)送控制             Txd -- PC.2
  26. */

  27. u8 Flag_RemoteSet = 0;
  28. u8 Flag_LearnState = 0;
  29. extern u16 PulseTab[];
  30. int main(void)               
  31. {       
  32.         u16 i;
  33.         u8 temp = 0;       
  34.         /* 延時函數(shù)初始化 */
  35.         DelayInit();
  36.         NVIC_Configuration();        //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級,2位響應(yīng)優(yōu)先級
  37.         /* MYUART 初始化 */
  38.         MY_UartInit(9600);
  39.         /* KEY 初始化 */
  40.         KEY_Init();
  41.         LearnKEY_Init();
  42.         /* PWM 初始化 */
  43.         TIM2_PWM_Init(1895,0);        //72000/(1895+1) = 37.99K
  44.         /* LED 初始化 */                      
  45.         LED_Init();
  46.         /* IR 初始化 */
  47.         IR_Init();                // 紅外接收函數(shù)
  48.         SendPort_Init();
  49.         /* TFT1.8初始化 */
  50.         LCD_PortInit();
  51.         LCD_Init();
  52. /***************************** 以下添加代碼區(qū) *****************************/
  53.         /* 設(shè)置窗口 */
  54.         LCD_SetRamAddr(0,127, 0,29);
  55.         for(i=0; i<3839; i++)        LCD_Wirte_Data16(CYAN);
  56.         ChineseChar(32,10,0,BLACK,CYAN,1);        // 遙
  57.            ChineseChar(48,10,0,BLACK,CYAN,2);        // 控
  58.            ChineseChar(64,10,0,BLACK,CYAN,3);        // 器
  59.            ChineseChar(80,10,0,BLACK,CYAN,4);        // 碼

  60.         LCD_SetRamAddr(0,127,30,89);
  61.         for(i=0; i<11520; i++)        LCD_Wirte_Data16(YELLOW);
  62.         ChineseChar(0,40,0,BLACK,YELLOW,5);        // 紅
  63.         ChineseChar(15,40,0,BLACK,YELLOW,6);// 外
  64.         ChineseChar(30,40,0,BLACK,YELLOW,7);// 協(xié)
  65.         ChineseChar(45,40,0,BLACK,YELLOW,8);// 議
  66.         LCD_ShowChar(55,40,BLACK,YELLOW,':');

  67.         LCD_SetRamAddr(0,127,90,159);
  68.         for(i=0; i<11520; i++)        LCD_Wirte_Data16(PUEPLE);
  69.         ChineseChar( 0,100,0,BLACK,PUEPLE,1);        // 紅
  70.         ChineseChar(15,100,0,BLACK,PUEPLE,2);        // 外
  71.         ChineseChar(30,100,0,BLACK,PUEPLE,9);        // 狀
  72.         ChineseChar(45,100,0,BLACK,PUEPLE,10);        // 態(tài)
  73.         LCD_ShowChar(55,100,BLACK,PUEPLE,':');
  74. /***************************** 以上添加代碼區(qū) *****************************/
  75.         LEARN_ON = 0;        // 關(guān)閉紅外接收
  76.         LED1 = 1;  // 收到脈沖指示
  77.         LED_SEND = 1;  // 發(fā)送狀態(tài)指示
  78.         LED2 = 0;
  79.         LED2 = 1;
  80.         LED3 = 1;               
  81.         LED4 = 1;
  82.         LED5 = 1;
  83. //        TFTDisplay();        // 測試
  84.           while(1)
  85.         {       
  86. /* 頁面定義 */
  87. //#define KEY1_ADDR 0x0807E000        VOL+
  88. //#define KEY2_ADDR 0x0807E800        VOL-
  89. //#define KEY3_ADDR 0x0807F000        CH+
  90. //#define KEY4_ADDR 0x0807F800        CH-
  91. //#define KEY5_ADDR 0x0807D800        POWER

  92. //#define VOL_UP        1
  93. //#define VOL_DOWN        2
  94. //#define CH_UP                3
  95. //#define CH_DOWN        4
  96. //#define PWR_ON        5       
  97.                 LED2 = 0;
  98.                 temp = KEY_Scan(0);        // 按鍵掃描,非連按模式
  99.                 /* 紅外協(xié)議檢測 */
  100.                 if(PulseTab[1]>3500 && PulseTab[1]<5500) {
  101.                         LCD_ShowString(50,65,BLACK,YELLOW,"NEC   ");
  102.                 }else{
  103.                         LCD_ShowString(50,65,BLACK,YELLOW,"Other");
  104.                 }
  105.                 /* 遙控器狀態(tài)檢測 */
  106.                 if((Flag_RemoteSet==0) && (temp!=0)) {
  107.                         LCD_ShowString(18,120,BLACK,PUEPLE,"Sending....");
  108.                 }
  109.                 if((Flag_RemoteSet==0) && (temp==0)) {
  110.                         LCD_ShowString(18,120,BLACK,PUEPLE,"Idle State ");
  111.                 }
  112. //                TFTDisplay();        // 測試
  113. //=======================學習狀態(tài)=======================//
  114.                 if(Flag_RemoteSet == 1){
  115. //                        ChineseChar(20,110,2,BLACK,PUEPLE,1);// 學
  116. //                        ChineseChar(45,110,2,BLACK,PUEPLE,2);// 習
  117. //                        ChineseChar(70,1`        10,2,BLACK,PUEPLE,3);// 中
  118. //                        LCD_ShowString(95,115,BLACK,YELLOW,"...");
  119.                         //LCD_ShowString(18,115,BLACK,PUEPLE,"Learning...");
  120.                         switch(temp){
  121.                                 case VOL_UP  :temp = 0;                 // 按鍵按下標志清零
  122.                                                           LED3 = ~LED3;         // 調(diào)試用
  123.                                                           FLASH_WriteData(KEY1_ADDR,PulseTab,200);        // 紅外脈沖寬度值保存到相應(yīng)按鍵下
  124.                                                           break;
  125.                                 case VOL_DOWN:temp = 0;                 // 按鍵按下標志清零
  126.                                                           LED3 = ~LED3;
  127.                                                           FLASH_WriteData(KEY2_ADDR,PulseTab,200);        // 紅外脈沖寬度值保存到相應(yīng)按鍵下
  128.                                                           break;
  129.                                 case CH_UP   :temp = 0;                 // 按鍵按下標志清零
  130.                                                           LED3 = ~LED3;
  131.                                                           FLASH_WriteData(KEY3_ADDR,PulseTab,200);        // 紅外脈沖寬度值保存到相應(yīng)按鍵下
  132.                                                           break;
  133.                                 case CH_DOWN :temp = 0;                 // 按鍵按下標志清零
  134.                                                           LED3 = ~LED3;
  135.                                                           FLASH_WriteData(KEY4_ADDR,PulseTab,200);        // 紅外脈沖寬度值保存到相應(yīng)按鍵下
  136.                                                           break;
  137.                                 case PWR_ON  :temp = 0;                 // 按鍵按下標志清零
  138.                                                           LED3 = ~LED3;
  139.                                                           FLASH_WriteData(KEY5_ADDR,PulseTab,200);        // 紅外脈沖寬度值保存到相應(yīng)按鍵下
  140.                                                           break;
  141.                         }
  142.                 }
  143. //=======================發(fā)送狀態(tài)=======================//
  144.                 if(Flag_RemoteSet == 0){
  145.                         //LCD_ShowString(18,115,BLACK,PUEPLE,"SendingStat");
  146.                         switch(temp){
  147.                                 case VOL_UP  :temp = 0;                 // 按鍵按下標志清零
  148.                                                           SendLight(1);  // 發(fā)送指示燈亮                                                                 
  149.                                                           //LED3 = ~LED3;         // 調(diào)試用
  150.                                                           IR_SendData(KEY1_ADDR);  // 紅外發(fā)送
  151.                                                           delay_ms(150);
  152.                                                           SendLight(0);  // 發(fā)送完熄滅
  153.                                                           break;
  154.                                 case VOL_DOWN:temp = 0;                 // 按鍵按下標志清零
  155.                                                           SendLight(1); //發(fā)送指示燈亮
  156.                                                           //LED3 = ~LED3;       
  157.                                                           IR_SendData(KEY2_ADDR);
  158.                                                           delay_ms(150);
  159.                                                           SendLight(0);
  160.                                                           break;
  161.                                 case CH_UP   :temp = 0;                 // 按鍵按下標志清零
  162.                                                           SendLight(1); //發(fā)送指示燈亮
  163.                                                           //LED3 = ~LED3;
  164.                                                           IR_SendData(KEY3_ADDR);
  165.                                                           delay_ms(150);
  166.                                                           SendLight(0);
  167.                                                           break;
  168.                                 case CH_DOWN :temp = 0;                 // 按鍵按下標志清零
  169.                                                           SendLight(1); //發(fā)送指示燈亮
  170.                                                           //LED3 = ~LED3;
  171.                                                           IR_SendData(KEY4_ADDR);
  172.                                                           delay_ms(150);
  173.                                                           SendLight(0);
  174.                                                           break;
  175.                                 case PWR_ON  :temp = 0;                 // 按鍵按下標志清零
  176.                                                           SendLight(1); //發(fā)送指示燈亮
  177.                                                           //LED3 = ~LED3;                               
  178.                                                           IR_SendData(KEY5_ADDR);
  179.                                                           delay_ms(150);
  180.                                                           SendLight(0);
  181.                                                           break;
  182.                         }
  183.                 }       
  184.         }                                                                                                                   
  185. }

復制代碼

所有資料51hei提供下載:
IR_remote.zip (382.88 KB, 下載次數(shù): 579)


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

使用道具 舉報

沙發(fā)
ID:350170 發(fā)表于 2018-7-30 15:54 | 只看該作者
樓主你好,很有用的學習資料,這里想問個問題,這個紅外發(fā)射的硬件電路,你是通過三極管b基級(即PC2口)負責控制,c集電極是38K載波信號,是這樣的嗎?
回復

使用道具 舉報

板凳
ID:350170 發(fā)表于 2018-7-30 15:58 | 只看該作者
樓主你好,資料非常有用,想問個問題,紅外發(fā)射模塊的硬件電路,是b基級(PC2口)負責控制,然后c集電極是38K載波信號嗎?
回復

使用道具 舉報

地板
ID:239219 發(fā)表于 2018-11-14 11:18 | 只看該作者
樓主你好,很有用的學習資料,這里想問個問題,這個紅外發(fā)射的硬件電路,你是通過三極管b基級(即PC2口)負責控制,c集電極是38K載波信號,是這樣的嗎?
回復

使用道具 舉報

5#
ID:305847 發(fā)表于 2019-2-28 10:31 | 只看該作者
感謝樓主的分享,我下載來參考,如果可行,真的感激
回復

使用道具 舉報

6#
ID:220853 發(fā)表于 2019-3-25 16:42 | 只看該作者

感謝樓主的分享,我下載來參考,如果可行,真的感激
回復

使用道具 舉報

7#
ID:516765 發(fā)表于 2019-5-1 07:47 | 只看該作者
下載試試看,謝謝分享
回復

使用道具 舉報

8#
ID:525814 發(fā)表于 2019-5-2 07:45 | 只看該作者
資料不錯值得學習
回復

使用道具 舉報

9#
ID:575801 發(fā)表于 2019-7-17 11:48 | 只看該作者
就想要個積分下載,以后可能用得上,先儲存
回復

使用道具 舉報

10#
ID:587282 發(fā)表于 2019-7-20 11:12 | 只看該作者
很好像下載過來看看
回復

使用道具 舉報

11#
ID:312300 發(fā)表于 2019-8-2 09:38 | 只看該作者
下載學習學習,感謝樓主分享!!!
回復

使用道具 舉報

12#
ID:17647 發(fā)表于 2019-8-2 18:52 | 只看該作者
沒有看到硬件原理圖
回復

使用道具 舉報

13#
ID:112865 發(fā)表于 2019-11-18 15:59 | 只看該作者
感謝樓主分享
回復

使用道具 舉報

14#
ID:645302 發(fā)表于 2019-11-19 20:35 | 只看該作者
非常感謝
回復

使用道具 舉報

15#
ID:342398 發(fā)表于 2019-11-24 20:41 | 只看該作者
非常感謝樓主的分享
回復

使用道具 舉報

16#
ID:520928 發(fā)表于 2020-3-21 23:05 | 只看該作者
感謝樓主的分享,我下載來參考,如果可行,真的感激
回復

使用道具 舉報

17#
ID:705415 發(fā)表于 2020-3-24 21:40 | 只看該作者
感謝樓主的分享,我下載來參考,如果可行,真的感激
回復

使用道具 舉報

18#
ID:708835 發(fā)表于 2020-3-25 15:23 | 只看該作者
非常感謝樓主分享,下載來做參考,感謝。
回復

使用道具 舉報

19#
ID:128463 發(fā)表于 2020-3-27 09:55 | 只看該作者
非常感謝樓主的分享
回復

使用道具 舉報

20#
ID:699932 發(fā)表于 2021-1-29 08:41 | 只看該作者
沒有看到硬件原理圖
回復

使用道具 舉報

21#
ID:956336 發(fā)表于 2021-7-25 16:33 | 只看該作者
@擇一城終老
好像紅外頻率是38K吧, 三極管選型需要支持38K.
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产欧美日韩一区二区三区在线观看 | 欧洲毛片| 日韩精品一区二区三区中文在线 | 亚洲成人av一区二区 | 久久久久91 | 午夜精品久久久久久久 | 亚洲国产成人在线视频 | 欧美一级毛片免费观看 | 色影视| 国产欧美精品一区二区色综合朱莉 | 国产精品久久久久久久久 | 在线观看国产 | 日本免费黄色 | 亚洲精品视频在线看 | 久久一区二区三区免费 | 成人av片在线观看 | 亚洲国产成人av | 久久一区二区三区四区五区 | 国产亚洲精品精品国产亚洲综合 | 欧美中文字幕一区二区三区亚洲 | 日韩一级二级片 | 中文视频在线 | 日韩av一区二区在线 | 男人午夜视频 | 国产视频二区 | 一级电影免费看 | av入口| 亚洲欧洲成人在线 | 日韩不卡在线观看 | 视频一区在线观看 | av一级一片| 免费看国产一级特黄aaaa大片 | 伊人网在线播放 | 免费超碰 | 中文字幕视频网 | 99精品在线观看 | 亚洲精品无 | 97久久精品| 欧美二区乱c黑人 | 久优草 | 视频二区在线观看 |