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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STM8單片機無線315&433脈寬自適應_通用解碼程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:137590 發表于 2021-7-18 11:12 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機源程序如下:

  1. /*
  2. RFINT不能用PA1 要改板 改在PC6
  3. */
  4. /* Includes ------------------------------------------------------------------*/
  5. #define MAIN_C

  6. #include "ALL.h"

  7. void Delay(u16 nCount)
  8. {
  9.   /* Decrement nCount value */
  10.   while (nCount != 0)
  11.   {
  12.     nCount--;
  13.   }
  14. }


  15. //10ms定時中斷初始  在PWM時可更改
  16. void TIME1_CONFIG(void)
  17. {
  18. /* Init TIMER 1 */
  19. CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER1, ENABLE);
  20. TIM1->IER = 0x00;//??????????? // 禁止中斷
  21. TIM1->EGR = 0x01;//??????????? // 允許產生更新事件
  22. TIM1->PSCRH = 0x0;//
  23. TIM1->PSCRL = 0x4;// 2@2MHZ  4@4MHZ
  24. TIM1->ARRH = 0x27; // 設定重裝載時的寄存器的高8位 2710=10ms  
  25. TIM1->ARRL = 0x10;
  26. //TIM2->CNTRH = 0xEA; // 設定計數器的初值
  27. //TIM2->CNTRL = 0x60; // 定時周期=1*60000=60000uS=60ms
  28. TIM1->CR1 = 0x01;// b0 = 1,允許計數器工作 ?// b1 = 0,允許更新 設置控制器,啟動定時器
  29. TIM1->IER = 0x01;// 允許更新中斷
  30. }

  31. //5ms定時中斷初始  CPU主頻2Mhz
  32. void TIME2_CONFIG(void)
  33. {
  34. /* Init TIMER 4 */
  35.   CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER2, ENABLE);
  36. TIM2->IER = 0x00;//??????????? // 禁止中斷
  37. TIM2->EGR = 0x01;//??????????? // 允許產生更新事件
  38. #ifdef FREQ_2M
  39. TIM2->PSCR = TIM2_PRESCALER_2;// 2@2M  4@4M 取決于CPU頻率
  40. #else
  41. TIM2->PSCR = TIM2_PRESCALER_4;// 2@2M  4@4M 取決于CPU頻率
  42. #endif
  43. #if 0//def GUDINGMA//臨時為固定碼增加用
  44. TIM2->PSCR = TIM2->PSCR/2;// 讓定時器速度再快一倍出來
  45. #endif


  46. TIM2->ARRH = 0xc3; // 設定重裝載時的寄存器的高8位  c350=50ms
  47. TIM2->ARRL = 0x50; //本參數配合無線
  48. //TIM2->CNTRH = 0xEA; // 設定計數器的初值
  49. //TIM2->CNTRL = 0x60; // 定時周期=1*60000=60000uS=60ms
  50. TIM2->CR1 = 0x01;// b0 = 1,允許計數器工作 ?// b1 = 0,允許更新 設置控制器,啟動定時器
  51. TIM2->IER = 0x01;// 允許更新中斷
  52. }

  53. //5ms定時中斷設置  CPU主頻2Mhz
  54. void TIM4_Config(void)
  55. {
  56. /* Init TIMER 4 */
  57.   CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER4, ENABLE);
  58. /* Init TIMER 4 prescaler: / (2^6) = 64/ */
  59. #ifdef FREQ_2M
  60.   TIM4->PSCR = TIM4_PRESCALER_64;//// 4M=128  2M=64
  61. #else
  62.   TIM4->PSCR = TIM4_PRESCALER_128;//// 4M=128  2M=64
  63. #endif
  64. /* HSI div by 1 --> Auto-Reload value: 16M/16 /64  = 1/64M, (1/64M) / 100 = 156.25*/
  65.   TIM4->ARR = 156;
  66. /* Counter value: 2, to compensate the initialization of TIMER*/
  67.   //TIM4->CNTR = 2;
  68. /* clear update flag */
  69.   TIM4->SR1 &= ~TIM4_SR1_UIF;
  70. /* Enable Counter */
  71.   TIM4->CR1 = TIM4_CR1_CEN;
  72.   TIM4->IER=1;
  73. }




  74. #define CFG_GCR_SWD ((u8)0x01) /*!< Swim disable bit mask */


  75. void INITIAL_ALL_PIN(void)
  76. {
  77. //CFG->GCR |= CFG_GCR_SWD;/*disable SWIM interface*/
  78. /*
  79. GPIO_Init(GPIOA,GPIO_PIN_ALL,GPIO_MODE_OUT_OD_LOW_SLOW);//關SET LED燈
  80. GPIO_Init(GPIOB,GPIO_PIN_ALL,GPIO_MODE_OUT_OD_LOW_SLOW);//關SET LED燈
  81. GPIO_Init(GPIOC,GPIO_PIN_ALL,GPIO_MODE_OUT_OD_LOW_SLOW);//關SET LED燈
  82. GPIO_Init(GPIOD,GPIO_PIN_ALL,GPIO_MODE_OUT_OD_LOW_SLOW);//關SET LED燈
  83. */

  84. //GPIO_Init(GPIOA,GPIOA_OUT_L,GPIO_MODE_OUT_PP_HIGH_SLOW);//關SET LED燈
  85. GPIO_Init(GPIOB,GPIOB_OUT_H,GPIO_MODE_OUT_OD_HIZ_SLOW); //關ALARM LED燈
  86. GPIO_Init(GPIOC,GPIOC_OUT_L,GPIO_MODE_OUT_PP_LOW_SLOW);//PWM
  87. GPIO_Init(GPIOC,GPIOC_IN_PU,GPIO_MODE_IN_PU_NO_IT);//按鍵中斷

  88. GPIO_Init(GPIOD,GPIOD_OUT_H,GPIO_MODE_OUT_PP_HIGH_FAST);//串口發送
  89. GPIO_Init(GPIOD,GPIOD_IN_PU,GPIO_MODE_IN_PU_NO_IT);//i2c


  90. EXTI->CR1 =(EXTI_SENSITIVITY_RISE_FALL<<4);
  91. GPIO_Init(GPIOC,GPIO_PIN_7,GPIO_MODE_IN_FL_IT);//無線接收

  92. }



  93. void UART_CONFIG(void )
  94. {
  95. UART1_Init((u32)9600, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE);
  96. UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE);
  97. UART1_ITConfig(UART1_IT_TC, DISABLE);
  98. UART1_Cmd(ENABLE);

  99. }


  100. void PUT_CHAR(uchar Data)
  101. {
  102. int i=10000;

  103. UART1->SR&=~UART1_FLAG_TC;//COM_USART[COM1]->SR&~USART_FLAG_TC;
  104. UART1->DR = Data;
  105. while((UART1->SR & UART1_FLAG_TC) == 0x00)
  106.         {if(--i==0)break;
  107.         }// 若發送寄存器不空,則等待        
  108. }

  109. const char hex[] = "0123456789ABCDEF";
  110. //********************************************************
  111. PRINT_DEC_OR_HEX(uchar format,uchar d)
  112. {
  113. uchar i;
  114. switch(format)
  115.         {case 'd':
  116.                 i=d/100;
  117.                 if(i!=0)PUT_CHAR(hex[i]);
  118.                 i=(d%100)/10;
  119.                 if(d>=100||i!=0)PUT_CHAR(hex[i]);
  120.                 PUT_CHAR(hex[d%10]);
  121.                 break;
  122.         case 'D':                                
  123.                 PUT_CHAR(hex[d/10]);
  124.                 PUT_CHAR(hex[d%10]);
  125.                 break;               
  126.         case 'x':
  127.                 PUT_CHAR(hex[d>>4]);
  128.                 PUT_CHAR(hex[d&0x0f]);
  129.                 break;
  130.         }
  131. }


  132. //********************************************************
  133. void PRINTF (uchar *pstring,uchar *arg)
  134. {
  135. uchar str;
  136. char count=0;
  137. uchar i;
  138. uint t;
  139. //PUT_CHAR ('\r');
  140. //PUT_CHAR ('\n');
  141. while(1)     /* until full pstring string read */
  142.         {
  143.         str = *pstring++;       /* until '%' or '\0' */
  144.         if(str=='%')
  145.                 {str = *pstring++;
  146.                 if(str=='i')        
  147.                                 {t=(arg[count]<<8)+arg[count+1];
  148.                                 if(t>=10000)
  149.                                         {str=t/10000;PRINT_DEC_OR_HEX('d',str);}
  150.                                 if(t>=1000)
  151.                                         {str=t%10000/1000;PRINT_DEC_OR_HEX('d',str);}
  152.                                 if(t>=100)
  153.                                         {str=t%1000/100;PRINT_DEC_OR_HEX('d',str);}
  154.                                 if(t>=10)
  155.                                         {str=t%100/10;PRINT_DEC_OR_HEX('d',str);}
  156.                                         {str=t%10;    PRINT_DEC_OR_HEX('d',str);}
  157.                                 count++;        
  158.                                 }
  159.                 else
  160.                                 PRINT_DEC_OR_HEX(str,arg[count++]);
  161.                 }
  162.         #if 0
  163.         else if(str=='
  164. )//打印數組        
  165.                 {
  166.                 str = *pstring++;
  167.                 count=0;
  168.                 while(1)
  169.                         {
  170.                         if(str=='x')        
  171.                                 {i=arg[count]>>4;                                
  172.                                 if(i==0x0b)PUT_CHAR('G');
  173.                                 else if(i==0x0A)PUT_CHAR('+');
  174.                                 else if(i>9)break;                        
  175.                                 else PUT_CHAR(hex[i]);                                
  176.                                 
  177.                                 i=arg[count]&0x0f;
  178.                                 if(i==0x0b)PUT_CHAR('G');
  179.                                 else if(i==0x0A)PUT_CHAR('+');                                
  180.                                 else if(i>9)break;                        
  181.                                 else PUT_CHAR(hex[i]);
  182.                                 }
  183.                         
  184.                         else{
  185.                                 PRINT_DEC_OR_HEX('x',arg[count]);
  186.                                 }                        
  187.                         count++;
  188.                         
  189.                         if(count>=16)break;                        
  190.                         }

  191.                
  192.                 }
  193.         #endif
  194.         else if(str==0)return;
  195.         //else if(str==0XFF)return;
  196.         else
  197.                 {
  198.                    PUT_CHAR (str);
  199.                   
  200.                 }
  201.         }
  202. }




  203. void DELAY(uint T)
  204. {
  205. while(T--);
  206. }

  207. void RF_STUDY_START(void)
  208. {
  209. SYS.study_sec=30;
  210. LED_STA_CONVER(led_study);
  211. DEBUG_COM_STREAM("\r\n等待學習",NULL);
  212. }

  213. void RF_STUDY_EXIT(void)
  214. {
  215. SYS.study_sec=0;
  216. LED_STA_CONVER(led_standby);
  217. DEBUG_COM_STREAM("\r\n退出學習",NULL);
  218. }

  219. void PER_SECOND_EXE(void)
  220. {
  221. if(TIME.b_second==0)return;
  222. TIME.b_second=0;

  223. CHECK_RF_CONTINUE_TIME();

  224. if(0!=SYS.study_sec){if(--SYS.study_sec==0)LED_STA_CONVER(led_standby);}
  225. //DEBUG_COM_STREAM("\r\n我是秒測試",NULL);
  226. }



  227. void CHECK_KEY_STUDY(void)
  228. {
  229. uchar t_50ms=0;
  230. uint i;
  231. if(p_key1==1)return;
  232. WAIT_5ms(10);
  233. if(p_key1==1)return;

  234. #ifdef DEBUG_TX
  235. RF.pulse_us=400;
  236. i=RF.pulse_us*32;
  237. DEBUG_COM_STREAM("\r\n同步%i",(u8*)&i);
  238. TX1527(&SYS_SAVE.ini_flag);
  239. return;
  240. #endif

  241. while(1)
  242.         {
  243.         if(p_key1==1)break;
  244.         WAIT_5ms(10);
  245.         if(++t_50ms>70)////3.5 sec
  246.                 {
  247.                 RF_STUDY_EXIT();                                
  248.                 RESET_EEPROM();               
  249.                 DEBUG_COM_STREAM("\r\n清空配件",NULL);
  250.                
  251.                 LED_STA_CONVER(led_key);
  252.                 LED_ALL_FLASH(1,200);//全燈長亮一次
  253.                 while(p_key1==0);
  254.                 LED_STA_CONVER(led_standby);
  255.                 return;
  256.                 }        
  257.         }

  258. if(0!=SYS.study_sec)
  259.         {RF_STUDY_EXIT();
  260.         }
  261. else
  262.         {
  263.         RF_STUDY_START();
  264.         }
  265. }


  266. void Flash_OFF_act_halt(void)
  267. {
  268.   FLASH->CR1 |= 0x04;
  269. }

  270. //啟用LPVR 如果HALT時不啟用LPVR 耗電增加140uA
  271. /*Configure the MVR to be OFF during the halt phase of HALT mode*/
  272. void MVReg_OFF_act_halt(void)
  273. {
  274.   CLK->ICKR |= 0x20;
  275. }

  276. //t必須小于50
  277. void WAIT_5ms(uchar t)
  278. {
  279. TIME.ms5_ex=0;
  280. while(TIME.ms5_ex<t);//wfi();
  281. }

  282. const uchar reg_key[]={1,9,7,8,2,0,0,8};
  283. void main(void)
  284. {
  285. #ifdef FREQ_2M
  286. CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV8);
  287. #else
  288. CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV4);
  289. #endif

  290. //CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
  291. INITIAL_ALL_PIN();

  292. TIM4_Config();
  293. TIME2_CONFIG();
  294. UART_CONFIG();
  295. READ_SYS_SAVE();

  296. RF_ARRAY_INI();
  297. enableInterrupts();        
  298. CHECK_CPU_REG();

  299. LED_STA_CONVER(led_standby);
  300. LED_ALL_FLASH(1,100);//500ms

  301. while (1)        
  302.   {
  303.     wfi();
  304.           PER_SECOND_EXE();
  305.         RF_CHECK_QUEUE();
  306.           RF_DECODE();
  307.         CHECK_KEY_STUDY();
  308.     if(UART.b_rxonoff)
  309.                   {
  310.                 UART.b_rxonoff=0;
  311.                 DEBUG_COM_STREAM("\r\n串口收到:",NULL);
  312.                 DEBUG_COM_STREAM(UART.rxbuff,NULL);
  313.                 if(memcmp(UART.rxbuff,reg_key,8)==0)
  314.                         {
  315.                         EXE_CPU_REG();
  316.                         CHECK_CPU_REG();
  317.                         }
  318.                 else if(memcmp(UART.rxbuff,"SYS?",4)==0)
  319.                         PRINT_SYS();
  320.                   }  
  321.         //TEST_TIM2();
  322.   }

  323. }

復制代碼

全部資料51hei附件下載:
脈寬自適應_通用解碼.7z (3.95 MB, 下載次數: 46)

評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人在线不卡 | 欧美精品一区在线发布 | 日本大香伊一区二区三区 | 久久精品电影 | 99爱在线观看 | av毛片| 欧美性乱| 成人精品一区二区三区中文字幕 | 欧美福利三区 | 青青草这里只有精品 | 一区二区三区高清在线观看 | av网站免费在线观看 | 亚洲欧美一区二区三区1000 | 成人亚洲视频 | 天天操网| 精品福利一区二区三区 | 一级片在线免费播放 | 九九热免费看 | 国产在线视频在线观看 | 亚洲一区播放 | 精品国产一区二区三区四区在线 | 成人免费视频观看 | 欧美久久免费观看 | 国产精品毛片av | 日韩午夜场 | 久草a√ | 成人欧美一区二区三区在线播放 | 国产中文字幕在线观看 | 精品欧美一区二区三区久久久 | 99免费在线 | 亚洲一区二区精品视频 | 久久精品中文字幕 | 91在线中文字幕 | 日韩av在线一区 | 久久精品国产亚洲一区二区三区 | www久| 五月婷婷色 | 久久久国产精品视频 | 亚洲乱码一区二区 | 日本人做爰大片免费观看一老师 | 成人影视网 |