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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于stm32的紅外解碼源程序 大家看不懂可以問我

[復制鏈接]
跳轉到指定樓層
樓主
ID:281185 發表于 2018-1-31 15:48 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
qq1175630462只需要去讀取發射部分的對應的碼值什么都能解

單片機源程序如下:
  1. #include "ir.h"
  2. #include "LED.h"
  3. #include "usart.h"
  4. #include "control.h"
  5. char IR_charge_states_after[3]={0};
  6. char IR_charge_states[3]={0};
  7. IR_OBJ  IR_DATA[7]={0};
  8. //正在接受紅外接收的狀態
  9. u8 ready_ok=0;
  10. void        IR_GPIO_Init(void)
  11. {       
  12.         GPIO_InitTypeDef   GPIO_InitStructure;
  13.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

  14.                 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;
  15.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
  16.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  17.                
  18.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
  19.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
  20.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  21.        
  22.                 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;
  23.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
  24.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  25. }

  26. //外部中斷

  27. static void IR_EXTI_Init(void)
  28. {
  29.         EXTI_InitTypeDef   EXTI_InitStructure;
  30.         NVIC_InitTypeDef   NVIC_InitStructure;       
  31.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);       
  32.         GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource4);
  33.         GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);
  34.         GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource1);
  35.        
  36.         EXTI_InitStructure.EXTI_Line=EXTI_Line0|EXTI_Line1|EXTI_Line4;
  37.         EXTI_InitStructure.EXTI_LineCmd= ENABLE;
  38.         EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
  39.         EXTI_InitStructure.EXTI_Trigger= EXTI_Trigger_Falling;
  40.         EXTI_Init(&EXTI_InitStructure);
  41.        
  42.         NVIC_InitStructure.NVIC_IRQChannel=        EXTI4_IRQn;
  43.         NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
  44.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
  45.         NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
  46.         NVIC_Init(&NVIC_InitStructure);
  47.        
  48.         NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;                                  //設置中斷優先級
  49.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  50.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  51.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  52.         NVIC_Init(&NVIC_InitStructure);
  53.        
  54. //頂
  55.         NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;                                  //設置中斷優先級
  56.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  57.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  58.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  59.         NVIC_Init(&NVIC_InitStructure);
  60. }

  61. //只用到定時器的計數功能故不開啟定時器更新中斷、不必配置中斷優先級。
  62. static void IR_TIM_Init(void)
  63. {
  64.        
  65.         TIM_TimeBaseInitTypeDef   TIM_TimeBaseStructure;

  66.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
  67.        
  68.         TIM_TimeBaseStructure.TIM_Period=59999;
  69.         TIM_TimeBaseStructure.TIM_Prescaler=719;
  70.         TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
  71.         TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
  72.         TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
  73. //        TIM_SetAutoreload(TIM2, 60000);//手動設置ARR
  74.         TIM_ITConfig(TIM2,TIM_IT_Update,DISABLE );
  75.         TIM_Cmd(TIM2, ENABLE);
  76.        
  77. }

  78. void IR_Init(void)
  79. {       
  80.          IR_GPIO_Init();
  81.          IR_EXTI_Init();
  82.          IR_TIM_Init();
  83. }
  84. //紅外解碼
  85. static void IR_RECEIVE(IR_OBJ *IR_DATA_INTENAL,char number)
  86. {
  87.         int T_val=0;
  88.         T_val=(TIM2->CNT>IR_DATA_INTENAL->ITC)?(TIM2->CNT-IR_DATA_INTENAL->ITC):(60000-IR_DATA_INTENAL->ITC+TIM2->CNT);
  89.         IR_DATA_INTENAL->ITC=TIM2->CNT;
  90.        
  91.         if(T_val>1300&&T_val<1400&&ready_ok==0)//引導碼
  92.         {
  93.                 ready_ok=1;
  94.                 IR_DATA_INTENAL->Flag_Data=0;
  95.                 IR_DATA_INTENAL->Flag_ROK=0;//receive ok
  96.                 IR_DATA_INTENAL->AdressCode=0;
  97.                 IR_DATA_INTENAL->AdressCode1=0;
  98.                 IR_DATA_INTENAL->Ir_OrderCode=0;
  99.                 IR_DATA_INTENAL->Ir_OrderCode1=0;
  100.                 IR_DATA_INTENAL->RepeatSen=0;
  101.                
  102.         }
  103.                

  104.         else if(T_val>100&&T_val<140)//低電平
  105.         {
  106.        
  107.                 if(IR_DATA_INTENAL->Flag_Data<8)
  108.                 {
  109.                        
  110.                         IR_DATA_INTENAL->AdressCode&=(u8)~(1<<IR_DATA_INTENAL->Flag_Data);
  111.                         IR_DATA_INTENAL->Flag_Data++;
  112.                 }
  113.                 else if(IR_DATA_INTENAL->Flag_Data>=8&IR_DATA_INTENAL->Flag_Data<16)
  114.                 {
  115.                        
  116.                         IR_DATA_INTENAL->AdressCode1&=(u8)~(1<<IR_DATA_INTENAL->Flag_Data);
  117.                         IR_DATA_INTENAL->Flag_Data++;
  118.                 }
  119.                 else if(IR_DATA_INTENAL->Flag_Data>=16&IR_DATA_INTENAL->Flag_Data<24)
  120.                 {
  121.                         IR_DATA_INTENAL->Ir_OrderCode&=(u8)~(1<<IR_DATA_INTENAL->Flag_Data);
  122.                         IR_DATA_INTENAL->Flag_Data++;
  123.                 }
  124.                 else if(IR_DATA_INTENAL->Flag_Data>=24&IR_DATA_INTENAL->Flag_Data<32)
  125.                 {
  126.                         IR_DATA_INTENAL->Ir_OrderCode1&=(u8)~(1<<IR_DATA_INTENAL->Flag_Data);
  127.                         IR_DATA_INTENAL->Flag_Data++;
  128.                        
  129.                
  130.                         if(IR_DATA_INTENAL->Flag_Data==32)
  131.                         {
  132.                                 IR_DATA[6].Flag_ROK=1;
  133.                                 IR_DATA[6].Flag_Data=IR_DATA_INTENAL->Flag_Data;
  134.                                 IR_DATA[6].AdressCode=IR_DATA_INTENAL->AdressCode;
  135.                                 IR_DATA[6].AdressCode1=IR_DATA_INTENAL->AdressCode1;
  136.                                 IR_DATA[6].Ir_OrderCode=IR_DATA_INTENAL->Ir_OrderCode;
  137.                                 IR_DATA[6].Ir_OrderCode1=IR_DATA_INTENAL->Ir_OrderCode1;
  138.                                 IR_DATA[6].RepeatSen=IR_DATA_INTENAL->RepeatSen;
  139.                                 IR_DATA_INTENAL->Flag_Data=0;
  140.                                 IR_DATA_INTENAL->AdressCode = 0;
  141.                                 IR_DATA_INTENAL->AdressCode1 = 0;
  142.                                 IR_DATA_INTENAL->Ir_OrderCode = 0;
  143.                                 IR_DATA_INTENAL->Ir_OrderCode1 = 0;
  144.                                 IR_DATA_INTENAL->RepeatSen = 0;
  145.                         }
  146.                 }
  147.         }
  148.        
  149.         else if(T_val>200&&T_val<240)//高電平
  150.         {
  151.                 if(IR_DATA_INTENAL->Flag_Data<8)
  152.                 {
  153.                        
  154.                         IR_DATA_INTENAL->AdressCode|=(u8)(1<<IR_DATA_INTENAL->Flag_Data);
  155.                         IR_DATA_INTENAL->Flag_Data++;
  156.                 }
  157.                 else if(IR_DATA_INTENAL->Flag_Data>=8&IR_DATA_INTENAL->Flag_Data<16)
  158.                 {
  159.                         IR_DATA_INTENAL->AdressCode1|=(u8)(1<<IR_DATA_INTENAL->Flag_Data);
  160.                         IR_DATA_INTENAL->Flag_Data++;
  161.                 }
  162.                 else if(IR_DATA_INTENAL->Flag_Data>=16&IR_DATA_INTENAL->Flag_Data<24)
  163.                 {
  164.                         IR_DATA_INTENAL->Ir_OrderCode|=(u8)(1<<IR_DATA_INTENAL->Flag_Data);
  165.                         IR_DATA_INTENAL->Flag_Data++;
  166.                 }
  167.                 else if(IR_DATA_INTENAL->Flag_Data>=24&IR_DATA_INTENAL->Flag_Data<32)
  168.                 {
  169.                         IR_DATA_INTENAL->Ir_OrderCode1|=(u8)(1<<IR_DATA_INTENAL->Flag_Data);
  170.                         IR_DATA_INTENAL->Flag_Data++;
  171.                
  172.                         if(IR_DATA_INTENAL->Flag_Data==32)
  173.                         {               
  174.                                 IR_DATA[6].Flag_ROK=1;
  175.                                 IR_DATA[6].Flag_Data=IR_DATA_INTENAL->Flag_Data;
  176.                                 IR_DATA[6].AdressCode=IR_DATA_INTENAL->AdressCode;
  177.                                 IR_DATA[6].AdressCode1=IR_DATA_INTENAL->AdressCode1;
  178.                                 IR_DATA[6].Ir_OrderCode=IR_DATA_INTENAL->Ir_OrderCode;
  179.                                 IR_DATA[6].Ir_OrderCode1=IR_DATA_INTENAL->Ir_OrderCode1;
  180.                                 IR_DATA[6].RepeatSen=IR_DATA_INTENAL->RepeatSen;
  181.                                 IR_DATA_INTENAL->Flag_Data=0;
  182.                                 IR_DATA_INTENAL->AdressCode = 0;
  183.                                 IR_DATA_INTENAL->AdressCode1 = 0;
  184.                                 IR_DATA_INTENAL->Ir_OrderCode = 0;
  185.                                 IR_DATA_INTENAL->Ir_OrderCode1 = 0;
  186.                                 IR_DATA_INTENAL->RepeatSen = 0;                       
  187.                         }
  188.                 }       
  189.                        
  190.         }
  191.         else if(T_val>1000 && T_val<1200)        //11.25ms
  192.         {
  193.           IR_DATA_INTENAL->RepeatSen++;
  194.           if(32==IR_DATA_INTENAL->Flag_Data)
  195.           {

  196.                         IR_DATA[6].Flag_ROK        =1;
  197.                         IR_DATA[6].Flag_Data        =        IR_DATA_INTENAL->Flag_Data;
  198.                         IR_DATA[6].AdressCode        =        IR_DATA_INTENAL->AdressCode;
  199.                         IR_DATA[6].AdressCode1        =        IR_DATA_INTENAL->AdressCode1;
  200.                         IR_DATA[6].Ir_OrderCode=        IR_DATA_INTENAL->Ir_OrderCode;
  201.                         IR_DATA[6].Ir_OrderCode1        =        IR_DATA_INTENAL->Ir_OrderCode1;
  202.                         IR_DATA[6].RepeatSen        =        IR_DATA_INTENAL->RepeatSen;
  203.                         IR_DATA_INTENAL->Flag_Data = 0;
  204.                         IR_DATA_INTENAL->AdressCode = 0;
  205.                         IR_DATA_INTENAL->AdressCode1 = 0;
  206.                         IR_DATA_INTENAL->Ir_OrderCode = 0;
  207.                         IR_DATA_INTENAL->Ir_OrderCode1 = 0;
  208.                         IR_DATA_INTENAL->RepeatSen = 0;
  209.           }
  210.         }
  211.         if((7==IR_DATA_INTENAL->Flag_Data)&&((IR_DATA_INTENAL->AdressCode==0x18)||(IR_DATA_INTENAL->AdressCode==0x05)||(IR_DATA_INTENAL->AdressCode==0x20)))
  212.         {
  213.                 //IR_DATA_INTENAL->Flag_RECEIVE_OK = 1;
  214.                 IR_charge_states_after[number]|=Charge_data_calc(&IR_DATA[number]);
  215.                 IR_charge_states[number]|=IR_charge_states_after[number];
  216.         }
  217. }
  218. //紅外充電座數據處理
  219. char Charge_data_calc(IR_OBJ *IR_DATA_INTENAL)
  220. {       
  221.          char temp=0;
  222.          switch(IR_DATA_INTENAL->AdressCode)
  223.         {
  224.                         case 0x18:        //充電座防碰撞保護區域
  225.                         {
  226.                                 temp=IR_Home_close;
  227.                                 break;
  228.                         }
  229.                         case 0x05:        //充電座右方發光區域
  230.                         {
  231.                                 temp=IR_Home_Right;

  232.                                 break;
  233.                         }
  234.                         case 0x20:        //充電座左方發光區域
  235.                         {
  236.                                 temp=IR_Home_Left;
  237.                                 break;
  238.                         }
  239.                         default: break;
  240.         }
  241.         IR_DATA_INTENAL->AdressCode=0; //置零
  242.         IR_DATA_INTENAL->Flag_ROK=0;
  243.         return temp;
  244. }




  245. //頂
  246. void EXTI0_IRQHandler(void)
  247. {
  248.         if(EXTI_GetITStatus(EXTI_Line0))
  249. ……………………

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

所有資料51hei提供下載:
紅外解碼部分.rar (315.39 KB, 下載次數: 94)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:44139 發表于 2018-11-20 13:03 | 只看該作者
好東西 看一看
回復

使用道具 舉報

板凳
ID:268784 發表于 2019-9-22 15:48 | 只看該作者
將近2000的查看,回復卻只有一個,都是拿來主義
回復

使用道具 舉報

地板
ID:46999 發表于 2019-10-10 18:40 | 只看該作者
記號一下,不錯
回復

使用道具 舉報

5#
ID:128463 發表于 2020-4-6 12:17 | 只看該作者
謝謝分享!!!
回復

使用道具 舉報

6#
ID:102688 發表于 2020-4-9 20:57 | 只看該作者
挺有參考意義的資料,感謝分享,
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久另类 | 最新国产精品 | 黄色免费av | 日本在线观看网址 | 波多野结衣精品 | 91精品国产乱码久久久久久 | 精品国产一区二区三区性色av | 久久国产精99精产国高潮 | 亚洲狠狠爱 | 国产精品久久久久久久久久软件 | 国产aa | 欧美视频免费在线 | 成人高潮片免费视频欧美 | 久久亚洲91 | 亚洲欧美在线一区 | 欧美久久免费观看 | 欧美精品乱码久久久久久按摩 | 五月激情久久 | 日韩欧美在线不卡 | 亚洲视频中文字幕 | 性欧美精品一区二区三区在线播放 | 中国xxxx性xxxx产国 | 黄色av网站免费看 | 欧美精品一区久久 | 亚洲精品av在线 | 国产欧美在线播放 | 一级免费看片 | 亚洲精品久 | 综合久久综合久久 | 国产亚洲精品精品国产亚洲综合 | 激情三区 | 日韩精品久久一区 | 亚洲精品日韩在线 | 视频在线一区二区 | 亚洲精品久久久久久宅男 | 综合国产第二页 | www.色综合| 日本精品久久久一区二区三区 | 久草.com | 欧洲妇女成人淫片aaa视频 | 3p视频在线观看 |