亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

標題: 學習型315M無線遙控器學習與發送的STM32程序源碼 [打印本頁]

作者: 1538762186    時間: 2018-10-20 09:12
標題: 學習型315M無線遙控器學習與發送的STM32程序源碼
能夠進行315m無線信號的學習與發送,需要配合相應的硬件


單片機源程序如下:
  1. #include "delay.h"
  2. #include "key.h"
  3. #include "sys.h"
  4. #include "usart.h"
  5. #include "exti.h"
  6. #include "timer.h"
  7. #include "IR_SendData.h"
  8. /************************************************
  9. 接收315無線模塊數據

  10. 1、輸入腳PA15
  11. 2、PA15下降沿觸發外部中斷
  12. 3、采用定時器TIM3計算脈寬
  13. ************************************************/
  14. extern u8 USART_RX_BUF[USART_REC_LEN];
  15. extern u8 WiRecBuff[5];
  16. int main(void)
  17. {               
  18.   unsigned char i=0,t=0,len=0;
  19.         delay_init();                     //延時函數初始化         
  20.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級
  21.         uart_init(115200);         //串口初始化為115200
  22.         EXTIX_Init();                         //外部中斷初始化
  23.         TIM3_Int_Init(49999,71);//10Khz的計數頻率,計數到5000為500ms  
  24.         TIM7_Int_Init(59999,71);
  25.          send_init();
  26.          KEY_Init();
  27.         while(1)
  28.         {         
  29. //按鍵315發送數據
  30.                  if(KEY0==0)
  31.                  {
  32.                                 EXTI->IMR &= ~(EXTI_Line15);         //315無線關閉接收中斷      
  33.                                 EXTI_ClearITPendingBit(EXTI_Line15); //清除LINE0上的中斷標志位         
  34.                                 delay_ms(10);     //按鍵消抖
  35.                                 senddata();       //發送315無線信號
  36.                         for(i=0;i<3;i++)
  37.                         {
  38.                         printf("\r\n發送數據:%x \r\n\r\n",WiRecBuff[i]);
  39.                         }
  40.                  }
  41.                  else
  42.                  {
  43.                                 EXTI->IMR |= EXTI_Line15;            //開啟315無線接手卸險
  44.                                 EXTI_ClearITPendingBit(EXTI_Line15); //清除LINE0上的中斷標志位         
  45.                  }
  46.                 /**     315無線發送數據           **/                    
  47.                 if(USART_RX_STA&0x8000)
  48.                 {                                          
  49.                         len=USART_RX_STA&0x3fff;//得到此次接收到的數據長度
  50.                         if((USART_RX_BUF[0]!=0x30))   //判斷首位不等于0x30,以及接收數據完成
  51.                         {
  52.                                 for(i=0;i<3;i++)
  53.                                 {
  54.                                         WiRecBuff[i]=USART_RX_BUF[i];
  55.                                         delay_ms(10);     //按鍵消抖
  56.                                 }
  57.         //                        
  58.                                 EXTI->IMR &= ~(EXTI_Line15);         //315無線關閉接收中斷      
  59.                                 EXTI_ClearITPendingBit(EXTI_Line15); //清除LINE0上的中斷標志位         

  60.                                 senddata();                           //發送315無線信號
  61.                         }
  62.                         else
  63.                          {
  64.                                 EXTI->IMR |= EXTI_Line15;            //開啟315無線接手卸險
  65.                                 EXTI_ClearITPendingBit(EXTI_Line15); //清除LINE0上的中斷標志位         
  66.                          }
  67.                         
  68.                         USART_RX_STA=0;
  69.                         memset(USART_RX_BUF, '\0', sizeof(USART_RX_BUF));  //清除串口接收數組
  70.                 }
  71.                
  72.    

  73.                  
  74.         }
  75. }
復制代碼

IR_SendData.c
  1. /*******************************************************************
  2.         使用定時器發送315無線數據
  3. *******************************************************************/
  4. #include "IR_SendData.h"
  5. #include "delay.h"
  6. #include "led.h"
  7. #include "usart.h"
  8. /********************************************************************

  9. 1、315發送: 24位 數據
  10. 2、A: 0x0c
  11. 3、B:0xc0
  12. 4、C:0x03
  13. 5、D:0x30

  14. *********************************************************************/
  15. u8 WiRecBuff[5];

  16. extern unsigned char send_bit;     //定時器溢出中斷標志位
  17. unsigned char  REM_Table[14]={1,0,1,0,1,0,1,0,1,0,1,0,1,0};//發送高低電緩沖區

  18. /********************************************************************
  19. 1、 14ms  :0x36af   14000-1
  20. 2、 1.2ms :0x4af    1200-1
  21. 3、 600us :0X257    600-1
  22. *********************************************************************/
  23. unsigned int Time_Table[14]={0x36af,0x36af,0x4af,0X257,0x4af};//  14ms  1`2ms   600us


  24. extern u8  USART_RX_BUF[USART_REC_LEN];

  25. /*串口接收數據    轉為發送*/
  26. //void RecBuff_change(void)
  27. //{
  28. //        unsigned char i=0;
  29. //        if(USART_RX_BUF[0]!=0x30)
  30. //        {
  31. //                for(i=0;i<3;i++)
  32. //                {
  33. //                        WiRecBuff[i]=USART_RX_BUF[i];
  34. //                        delay_us(100);
  35. //                }
  36. //        }
  37. //}
  38. /********************************************************************

  39. 315無線發送IO口初始化

  40. *********************************************************************/
  41. void send_init(void)
  42. {
  43. GPIO_InitTypeDef  GPIO_InitStructure;
  44.          
  45. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);         //使能PC端口時鐘
  46.         
  47. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;                                 //PC.0 端口配置
  48. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽輸出
  49. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度為50MHz
  50. GPIO_Init(GPIOC, &GPIO_InitStructure);                                         //根據設定參數初始化GPIOC.0
  51. GPIO_SetBits(GPIOC,GPIO_Pin_0);                                                 //PC.0 輸出高

  52. }

  53. void send_foot(void)    //發送14ms的引導嗎
  54. {
  55.                 unsigned char i;

  56.                 for(i=0;i<2;i++)
  57.         {
  58.                 Send=REM_Table[i];         //發送高低電
  59.                 send_bit=0;                //定時器溢出中斷標志位清零
  60.                 TIM7->CNT = 0;             //計數器數值清零
  61.                 TIM7->ARR = Time_Table[i]; //設置定時器計數值
  62.                 TIM7->CR1 |= 0x01;         //開啟TIM3定時器
  63.     while(send_bit==0);               //等待溢出中斷
  64.                 //TIM3->CR1 &= ~(0x01);           //關閉定時器3        
  65.         }

  66. }

  67. void bit_1(void)       //高電平1.2ms+低電平500us表示:邏輯1
  68. {
  69.                 unsigned char i;
  70.         for(i=0;i<2;i++)
  71.         {
  72.                 Send=REM_Table[i];
  73.                 send_bit=0;
  74.                 TIM7->CNT = 0;
  75.                 TIM7->ARR = Time_Table[i+2];
  76.                 TIM7->CR1 |= 0x01;     //開啟TIM3定時器
  77.                 while(send_bit==0);        
  78. //    while(TIM_GetITStatus(TIM3, TIM_IT_Update) == RESET);               
  79.         }
  80. }

  81. void bit_0(void)      //高電平500us+低電平1.2ms 表示:邏輯0
  82. {
  83.         unsigned char i;
  84.         for(i=0;i<2;i++)
  85.         {
  86.                 Send=REM_Table[i];
  87.                 send_bit=0;
  88.                 TIM7->CNT = 0;
  89.                 TIM7->ARR = Time_Table[i+3];
  90.                 TIM7->CR1 |= 0x01;     //開啟TIM3定時器
  91.                 while(send_bit==0);        
  92. //    while(TIM_GetITStatus(TIM3, TIM_IT_Update) == RESET);               
  93.                
  94.         }

  95. }

  96. void senddata(void)      //發送引導碼+24數據
  97. {
  98.         u8 i,j;
  99. //        RecBuff_change();
  100.         send_foot();          //發送引導碼
  101.         for(i=0;i<25;i++)
  102.         {
  103. //                for(j=0;j<8;j++)
  104.                 {
  105.                         if(((WiRecBuff[i/8]<<i%8)&0x80))   //從高位到低位,判斷邏輯0還是邏輯1
  106.                         {
  107.                                 bit_1();    //發送邏輯1脈沖
  108.                         }
  109.                         else
  110.                         {
  111.                                 bit_0();    //發送邏輯0脈沖
  112.                         }
  113.                 }
  114.         }







  115. }
復制代碼


所有資料51hei提供下載:
315學習 315發送.zip (330.6 KB, 下載次數: 135)



作者: admin    時間: 2018-10-20 14:18
能分享下原理圖嗎?
作者: yfpc2006    時間: 2018-11-28 10:57
用STM32制作,成本略高,但作為學習,還是有價值的!
作者: wherestheway    時間: 2019-3-16 22:36
有STC的示例嗎?我已經讀出了數據串,怎樣發射出去?
RAW signal: 4860 1516 375 739 375 738 735 381 735 380 736 380 735 380 376 738 375 753 375 738 736 380 375 739 375 738 375 739 375 739 375 738 375 753 735 380 375 739 375 738 376 738 375 739 375 738 735 381 375 752 375 738 736 380 735 380 735 380 376 738 375 738 428 739 735 390 375 738 375 739 735 380 736 380 375 738 376 738 735 381 735 4806 1516 375 792 375 738 735 381 735 380 735 380 735 380 375 738 375 752 376 738 735 380 376 738 375 739 375 738 375 738 376 738 375 753 735 380 375 739 375 739 375 738 375 739 375 738 735 380 375 753 375 738 735 380 735 380 735 380 375 738 375 739 375 738 734 391 375 738 375 738 375 738 375 738 788 380 735 380 735 380 735 8411

作者: 哈迪斯的爸爸    時間: 2019-10-29 18:45
有接受程序嗎

作者: gglasp    時間: 2019-11-28 17:10
學習一下




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