找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2004|回复: 1
打印 上一主题 下一主题
收起左侧

PL1167SPI通讯固定频率发信号STM8程序源码(RF认证用)

[复制链接]
跳转到指定楼层
楼主
代码用于客户产品的PL1167 RF认证用,SPI通讯PL1167,固定频率一直发一个信号。供参考
MCU:STM8S103
IDE : IAR FOR STM8


单片机源程序如下:
  1. #include "PL1167Certify.h"

  2. u8 u8DeviceMode;
  3. bool bFlagTimer100us,bFlagTimer4ms,bFlagTimer1s,bFlagTimer4ms1,bFlagAcOn,bFlagBtOffTimerOk,bFlagUartTxOn,bFlagSppCmdSend;

  4. u8 u8IntensityLevel;

  5. bool bFlagKeyPauseChk,bFlagKeyProcess,bFlagKeyLock;
  6. extern bool bFlagKeyPress;
  7. extern u8 u8KeyValue,u8KeyStatus;
  8. u8 u8KeyValueBuffer;

  9. extern bool bFlagDcPowerOn;

  10. bool bFlagRfRxGet;
  11. bool bFlagLed1,bFlagLed2,bFlagLed3,bFlagLed4,bFlagLed5,bFlagLed6,bFlagLedStatus;
  12. u8 u8LedFlashCount;

  13. u16 u16LedFlashSet[21][2]={
  14.         {0,0},
  15.         {210,50},{200,50},{190,50},{180,50},{170,50},
  16.         {160,50},{150,50},{140,50},{130,50},{120,50},
  17.         {110,50},{100,50},{90,50},{80,50},{70,50},
  18.         {60,40},{50,40},{40,30},{30,20},{20,15}
  19. };
  20. u16 u16DcCount;
  21. u16 u16DcCountBuf[6]={0,0,0,0,0,0
  22. };

  23. //u16 u16IntensLevelDuty[20]={

  24. //};
  25. u8 u8PwmCycleLargeCount,u8PwmCycleLargeCountMax;
  26. u8 u8PwmCycleLittleCount,u8PwmCycleLittleCountOffset,u8PwmCycleLittleCountEnd;
  27. u8 u8PwmOnCycleLittleCount,u8PwmOnCycleLittleCountOffset,u8PwmOnCycleLittleCountEnd;
  28. u8 u8PwmCycleMidCount,u8PwmCycleMidCountBuffer,u8PwmCycleMidRepeat,u8PwmCycleMidRepeatMax;
  29. u16 u16PwmCycleMidCount,u16PwmCycleMidCountMax;
  30. u8 u8PwmCycleLittleCountBuffer,u8PwmCycle2LittleCount;
  31. u8 u8RepeatCount;

  32. u16 u16PwmOffCycle;
  33. bool bFlagPwm2On,bFlagPwmCycleInc,bFlagPwmOnCycleInc,bFlagPwmCycleEnd;
  34. bool bFlagPwmPro3Run;
  35. bool bFlagPwmPro4Run,bFlagPwmPro4Next,bFlagPwmPro4End,bFlagPwmPro4First,bFlagPro4Second;
  36. bool bFlagPwmOffCycle;
  37. bool bFlagPwmDischarge=FALSE;
  38. u8 u8DischargeCount=0;
  39. u8 u8DischargeDuty=0;
  40. extern u16 u16Pwm1DutySet[21];
  41. extern u16 u16Pwm1Duty;
  42. u16 u16Pwm1DutySave,u16Pwm2DutySave,u16Pwm3DutySave;
  43. bool bFlagPwmPhaseEnd;
  44. u8 u8PwmCyclePhase;
  45. u8 u8RfRxBuffer[16],u8RfTxBuffer[16];
  46. u8 u8RfStatus,u8RfAckCount;
  47. bool bFlagRfReceive;

  48. u8 u8SystemMode;
  49. u8 u8Timer100us,u8Timer2ms,u8Timer4ms,u8TimerRf4ms,u8Timer1s,u8Timer1m;
  50. u8 u8Hours=0X0,u8Minutes=0X0,u8Seconds=0X0,u8Months=0X1,u8Dates=0X1;
  51. u16 u16Years=0X2014;
  52. u8 u8TimerMinutesCountDown,u8TimerSecondsCountDown;
  53. u8 u8TimerMode;

  54. main()
  55. {
  56.   MCU_init();
  57.   System_init();
  58.   system_off_init();
  59.   while(1)
  60.   {       
  61.           enableInterrupts();
  62.           if (bFlagTimer4ms)
  63.           {
  64.                         bFlagTimer4ms=FALSE;
  65.                         switch (u8SystemMode)
  66.                         {
  67.                         case SYSTEM_ON:
  68.                                
  69.                                 //if (bFlagTimer4ms1)
  70.                                 {
  71.                                         //bFlagTimer4ms1=FALSE;
  72.                                         key_pro_system_on();
  73.                                         led_pro_system_on();
  74.                                 }
  75.         send_rf_key_inc();
  76.                                 timer_count_down_pro();
  77.                                 break;
  78.                         case SYSTEM_OFF:
  79.                         default:
  80.                                 all_output_off();
  81.                                 delay(KEY_DELAY);
  82.                                 if ((KEY_INPUT)&&(u8KeyStatus==KEY_RELEASE)&&(u8RfAckCount==0)&&(!POWER_IN))
  83.                                 {
  84.                     //PULSE donot output
  85. //                   GPIO_Init(GPIOD, (GPIO_Pin_TypeDef)(GPIO_PIN_4), GPIO_MODE_OUT_PP_LOW_SLOW);
  86. //                   GPIO_Init(GPIOD, (GPIO_Pin_TypeDef)(GPIO_PIN_2|GPIO_PIN_3), GPIO_MODE_OUT_PP_HIGH_SLOW);
  87. //                   delay(20000);
  88. //                   GPIO_Init(GPIOD, (GPIO_Pin_TypeDef)(GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4), GPIO_MODE_OUT_PP_LOW_SLOW);
  89.                     pl1167_init();
  90.                     pl1167_write_reg(0x23,0x4380);
  91.                                         active_to_sleep();
  92.                                         halt();
  93.                     nop();
  94.                     nop();
  95.                     nop();
  96.                     nop();
  97.                                         sleep_to_active();
  98.                     pl1167_init();
  99.                     //pl1167_write_reg(0x23,0xc380);
  100.                                 }
  101.                 if(!bFlagDcPowerOn)
  102.                 {
  103.                     key_pro_system_off();
  104.                 }
  105.                                 break;
  106.                         }
  107.                         watchdog_reset();
  108.                         key_scan();
  109.           }
  110.   }
  111. }

  112. void
  113. device_mode1_init()
  114. {
  115.         u8DeviceMode=DEVICE_MODE1;
  116.     u8IntensityLevel=INTENS_MIN;
  117.         mode1_phase1_init();
  118. }
  119. void
  120. device_mode2_init()
  121. {
  122.         u8DeviceMode=DEVICE_MODE2;
  123.     u8IntensityLevel=INTENS_MIN;
  124.         mode2_phase1_init();

  125. }
  126. void
  127. device_mode3_init()
  128. {
  129.         u8DeviceMode=DEVICE_MODE3;
  130.     u8IntensityLevel=INTENS_MIN;
  131.         mode3_phase1_init();
  132. }
  133. void
  134. device_mode4_init()
  135. {
  136.         u8DeviceMode=DEVICE_MODE4;
  137.     u8IntensityLevel=INTENS_MIN;
  138.         u8PwmCycleLargeCount=0;
  139.         u8PwmCycleLittleCount=0;
  140.         u8PwmCycleMidCount=0;
  141.     TIM2_OC3Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE, 0x0000, TIM2_OCPOLARITY_HIGH);
  142.         u8PwmCycleLittleCountBuffer=MODE4_PWM_CYCLE_LITTLE_START;
  143.     pwm_cycle_pro3();
  144. //        pwm1_set_period(23726);
  145. //        pwm1_set_duty(0);
  146. //        pwm2_set_duty(20905);
  147. //        pwm3_set_duty(20905);
  148. }
  149. void
  150. device_mode5_init()
  151. {
  152.         u8DeviceMode=DEVICE_MODE5;
  153.     u8IntensityLevel=INTENS_MIN;
  154.         u8PwmCycleLargeCount=0;
  155.         u8PwmCycleLittleCount=0;
  156.         u8PwmCycleMidCount=0;
  157.     TIM2_OC3Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE, 0x0000, TIM2_OCPOLARITY_HIGH);
  158. //        u8PwmCycleLittleCountBuffer=MODE4_PWM_CYCLE_LITTLE_START;
  159.     pwm_cycle_pro3();

  160. }
  161. void
  162. device_mode6_init()
  163. {
  164.         u8DeviceMode=DEVICE_MODE6;
  165.     u8IntensityLevel=INTENS_MIN;
  166.     u8PwmCyclePhase=1;
  167.         mode6_phase1_init();
  168. }

  169. void
  170. discharge_pro(void)
  171. {

  172. }

  173. void
  174. key_pro_system_on()
  175. {
  176.         if (u8KeyStatus==KEY_RELEASE)
  177.         {
  178.                 bFlagKeyProcess=FALSE;
  179. /*                if (bFlagKeyPauseChk)
  180.                 {
  181.                         send_rf_key_pause();
  182.                         bFlagKeyPauseChk=FALSE;
  183.                 }*/
  184.         }
  185.         if ((u8KeyStatus!=KEY_RELEASE)&&(bFlagKeyProcess==FALSE))
  186.         {
  187.                 switch (u8KeyValue)
  188.                 {
  189.                 case KEY_ON:
  190.                        
  191. //                        if (u8KeyStatus==KEY_KEEP_1S)
  192. //                        {
  193.                                 bFlagKeyPauseChk=FALSE;
  194.                                 system_off_init();
  195.                                 //send_rf_key_off();
  196.                                 bFlagKeyProcess=TRUE;
  197. //                        }
  198. //                        else
  199. //                                bFlagKeyPauseChk=TRUE;

  200.                         //rfTxBufferFill();
  201.                         break;
  202.                 default:
  203.                         break;
  204.                        
  205.                 }
  206.         }
  207. }

  208. void
  209. key_pro_system_off()
  210. {
  211.         if (u8KeyStatus==KEY_RELEASE)
  212.         {
  213.                 bFlagKeyProcess=FALSE;
  214.         }
  215.         if ((u8KeyStatus!=KEY_RELEASE)&&(bFlagKeyProcess==FALSE))
  216.         {
  217.                 bFlagKeyProcess=TRUE;
  218.                 switch (u8KeyValue)
  219.                 {
  220.                 case KEY_ON:
  221.                         system_on_init();

  222.                         send_rf_key_on();
  223.                         break;
  224.                 default:
  225.                         break;
  226.                        
  227.                 }
  228.         }
  229. }
  230. void
  231. led_pro_system_on()
  232. {
  233.         if (u8LedFlashCount>u16LedFlashSet[u8IntensityLevel][1])
  234.         {
  235.                 led_off();
  236.         }
  237.         else
  238.                 led_on();
  239.         u8LedFlashCount++;
  240.         if (u8LedFlashCount>u16LedFlashSet[u8IntensityLevel][0])
  241.         {
  242.                 u8LedFlashCount=0;
  243.         }
  244. }
  245. void
  246. led_pro_device_mode()
  247. {
  248.         led_flag_clear();
  249.         switch (u8DeviceMode)
  250.     {
  251.     case DEVICE_MODE1:
  252.                 bFlagLed1=TRUE;
  253.                 break;
  254.     case DEVICE_MODE2:
  255.                 bFlagLed2=TRUE;
  256.                 break;
  257.     case DEVICE_MODE3:
  258.                 bFlagLed1=TRUE;
  259.                 bFlagLed2=TRUE;
  260.                 break;
  261.     case DEVICE_MODE4:
  262.                 bFlagLed3=TRUE;
  263.                 break;
  264.     case DEVICE_MODE5:
  265.                 bFlagLed4=TRUE;
  266.                 break;
  267.     case DEVICE_MODE6:
  268.                 bFlagLed3=TRUE;
  269.                 bFlagLed4=TRUE;
  270.                 break;
  271.     default:
  272.                 break;
  273.     }

  274. }
  275. void
  276. led_flag_clear()
  277. {
  278.         bFlagLed1=FALSE;
  279. }


  280. void
  281. mode_phase_inc(u8 u8PhaseMax)
  282. {       
  283.         u8PwmCyclePhase++;
  284.         if (u8PwmCyclePhase>u8PhaseMax)
  285.         {
  286.                 u8PwmCyclePhase=1;
  287.         }
  288. }

  289. void
  290. mode1_phase1_init()
  291. {
  292.         u8PwmCyclePhase=1;
  293.         u8PwmCycleLittleCount=0;
  294.         u8PwmCycleLittleCountBuffer=MODE1_PWM_CYCLE_LITTLE_START;
  295.         u8PwmCycleLittleCountEnd=MODE1_PWM_CYCLE_LITTLE_END;
  296.         bFlagPwmCycleInc=TRUE;
  297.         u8PwmCycleLittleCountOffset=MODE1_PWM_CYCLE_LITTLE_OFFSET;

  298.         u8PwmOnCycleLittleCountEnd=MODE1_PWM_ON_CYCLE_LITTLE_END;
  299.         u8PwmOnCycleLittleCount=MODE1_PWM_ON_CYCLE_LITTLE_START;
  300.         bFlagPwmOnCycleInc=TRUE;
  301.         u8PwmOnCycleLittleCountOffset=MODE1_PWM_ON_CYCLE_LITTLE_OFFSET;

  302.         u8PwmCycleMidRepeat=1;
  303.         u8PwmCycleMidRepeatMax=MODE1_PWM_CYCLE_MID_REPEAT_MAX;
  304.         u16PwmCycleMidCount=1;
  305.         u16PwmCycleMidCountMax=MODE1_PWM_CYCLE_MID_MAX;

  306.         //clear flag for phase end/cycle end
  307.         bFlagPwmPhaseEnd=FALSE;
  308.         bFlagPwmCycleEnd=FALSE;
  309. }

  310. void mode2_phase1_init()
  311. {
  312.         u8PwmCyclePhase=1;
  313.         u8PwmCycleLittleCount=0;
  314.         u8PwmCycleLittleCountBuffer=MODE2_PWM_CYCLE_LITTLE_START;
  315.         u8PwmCycleLittleCountEnd=MODE2_PWM_CYCLE_LITTLE_END;
  316.         bFlagPwmCycleInc=FALSE;
  317.         u8PwmCycleLittleCountOffset=MODE2_PWM_CYCLE_LITTLE_OFFSET;

  318.         u8PwmOnCycleLittleCountEnd=MODE2_PWM_ON_CYCLE_LITTLE_END;
  319.         u8PwmOnCycleLittleCount=MODE2_PWM_ON_CYCLE_LITTLE_START;
  320.         bFlagPwmOnCycleInc=TRUE;
  321.         u8PwmOnCycleLittleCountOffset=MODE2_PWM_ON_CYCLE_LITTLE_OFFSET;

  322.         u8PwmCycleMidRepeat=1;
  323.         u8PwmCycleMidRepeatMax=MODE2_PWM_CYCLE_MID_REPEAT_MAX;
  324.         u16PwmCycleMidCount=1;
  325.         u16PwmCycleMidCountMax=MODE2_PWM_CYCLE_MID_MAX;

  326.         //clear flag for phase end/cycle end
  327.         bFlagPwmPhaseEnd=FALSE;
  328.         bFlagPwmCycleEnd=FALSE;

  329. }
  330. void mode2_phase5_init()
  331. {
  332.         u8PwmCyclePhase=5;

  333.         u8PwmCycleLittleCount=0;
  334.         u8PwmCycleLittleCountBuffer=202;
  335.         u8PwmCycleLittleCountEnd=202;
  336.     bFlagPwmCycleInc=TRUE;
  337.         u8PwmCycleLittleCountOffset=0;

  338.         u8PwmOnCycleLittleCountEnd=202;
  339.         u8PwmOnCycleLittleCount=202;
  340.         bFlagPwmOnCycleInc=FALSE;
  341.         u8PwmOnCycleLittleCountOffset=0;

  342.         u8PwmCycleMidRepeat=1;
  343.         u8PwmCycleMidRepeatMax=1;
  344.     u16PwmCycleMidCountMax=1;
  345.     u16PwmCycleMidCount=1;

  346.         //clear flag for phase end/cycle end
  347.         bFlagPwmPhaseEnd=FALSE;
  348.         bFlagPwmCycleEnd=FALSE;

  349. }

  350. void mode3_phase1_init()
  351. {
  352.         u8PwmCyclePhase=1;
  353.         u8PwmCycleLittleCount=0;
  354.         u8PwmCycleLittleCountBuffer=MODE3_PWM_CYCLE_LITTLE_START;
  355.         u8PwmCycleLittleCountEnd=MODE3_PWM_CYCLE_LITTLE_END;
  356.         bFlagPwmCycleInc=TRUE;
  357.         u8PwmCycleLittleCountOffset=MODE3_PWM_CYCLE_LITTLE_OFFSET;

  358.         u8PwmOnCycleLittleCountEnd=MODE3_PWM_ON_CYCLE_LITTLE_END;
  359.         u8PwmOnCycleLittleCount=MODE3_PWM_ON_CYCLE_LITTLE_START;
  360.         bFlagPwmOnCycleInc=TRUE;
  361.         u8PwmOnCycleLittleCountOffset=MODE3_PWM_ON_CYCLE_LITTLE_OFFSET;

  362.         u8PwmCycleMidRepeat=1;
  363.         u8PwmCycleMidRepeatMax=MODE3_PWM_CYCLE_MID_REPEAT_MAX;
  364.         u16PwmCycleMidCount=1;
  365.         u16PwmCycleMidCountMax=MODE3_PWM_CYCLE_MID_MAX;

  366.         //clear flag for phase end/cycle end
  367.         bFlagPwmPhaseEnd=FALSE;
  368.         bFlagPwmCycleEnd=FALSE;

  369. }
  370. void mode3_phase3_init()
  371. {
  372.         u8PwmCyclePhase=3;
  373.         u16PwmOffCycle=MODE3_PWM_OFF_CYCLE_LITTLE_MAX;
  374. }

  375. void
  376. mode6_phase1_init()
  377. {
  378.         pwm_cycle_count_reset();
  379.         u8PwmCycleLittleCountBuffer=PWM_PRO1_CYCLE_LITTLE_START;
  380.         u8PwmCycleLittleCountEnd=40;
  381.         u8PwmOnCycleLittleCountEnd=40;
  382.         u8PwmOnCycleLittleCount=40;
  383.     bFlagPwmCycleInc=FALSE;
  384.         u8PwmCycleLittleCountOffset=6;
  385.         bFlagPwmOnCycleInc=TRUE;
  386.         u8PwmOnCycleLittleCountOffset=0;
  387.         u8PwmCycleMidRepeat=1;
  388.         u8PwmCycleMidRepeatMax=PWM_PRO1_CYCLE_MID_MAX;
  389.     u16PwmCycleMidCountMax=403;
  390.     u16PwmCycleMidCount=1;
  391.         //clear flag for phase end/cycle end
  392.         bFlagPwmPhaseEnd=FALSE;
  393.         bFlagPwmCycleEnd=FALSE;
  394. }
  395. void
  396. mode6_phase3_1_init()
  397. {
  398.         pwm_cycle_count_reset();
  399.         u8PwmCycleLittleCountBuffer=82;
  400.         u8PwmCycleLittleCountEnd=82;
  401.     bFlagPwmCycleInc=TRUE;
  402.         u8PwmCycleLittleCountOffset=0;

  403.         u8PwmOnCycleLittleCountEnd=82;
  404.         u8PwmOnCycleLittleCount=82;
  405.         bFlagPwmOnCycleInc=TRUE;
  406.         u8PwmOnCycleLittleCountOffset=0;

  407.         u8PwmCycleMidRepeat=1;
  408.         u8PwmCycleMidRepeatMax=1;
  409.     u16PwmCycleMidCountMax=1;
  410.     u16PwmCycleMidCount=1;

  411.         //clear flag for phase end/cycle end
  412.         bFlagPwmPhaseEnd=FALSE;
  413.         bFlagPwmCycleEnd=FALSE;
  414. }
  415. void
  416. mode6_phase5_init()
  417. {
  418. //        pwm_cycle_count_reset();

  419.         u8PwmCycleLittleCount=0;
  420.         u8PwmCycleLittleCountBuffer=PWM_PRO1_CYCLE_LITTLE_END+2;
  421.         u8PwmCycleLittleCountEnd=PWM_PRO1_CYCLE_LITTLE_END+2;
  422.     bFlagPwmCycleInc=TRUE;
  423.         u8PwmCycleLittleCountOffset=0;

  424.         u8PwmOnCycleLittleCountEnd=PWM_PRO1_CYCLE_LITTLE_END+2;
  425.         u8PwmOnCycleLittleCount=5;
  426.         bFlagPwmOnCycleInc=TRUE;
  427.         u8PwmOnCycleLittleCountOffset=3;

  428.         u8PwmCycleMidRepeat=1;
  429.         u8PwmCycleMidRepeatMax=1;
  430.     u16PwmCycleMidCountMax=40;
  431.     u16PwmCycleMidCount=1;

  432.         //clear flag for phase end/cycle end
  433.         bFlagPwmPhaseEnd=FALSE;
  434.         bFlagPwmCycleEnd=FALSE;
  435. }
  436. void
  437. mode6_phase11_1_init()
  438. {
  439.         bFlagPwmPro3Run=TRUE;
  440. }
  441. void
  442. mode6_phase11_2_init()
  443. {
  444.         u8PwmCycleLittleCount=0;
  445.         u8PwmCycleLittleCountBuffer=PWM_PRO1_CYCLE_LITTLE_END+2;
  446.         u8PwmCycleLittleCountEnd=PWM_PRO1_CYCLE_LITTLE_END+2;
  447.     bFlagPwmCycleInc=TRUE;
  448.         u8PwmCycleLittleCountOffset=0;

  449.         u8PwmOnCycleLittleCountEnd=PWM_PRO1_CYCLE_LITTLE_END+2;
  450.         u8PwmOnCycleLittleCount=4;
  451.         bFlagPwmOnCycleInc=TRUE;
  452.         u8PwmOnCycleLittleCountOffset=2;

  453.         u8PwmCycleMidRepeat=1;
  454.         u8PwmCycleMidRepeatMax=1;
  455.     u16PwmCycleMidCountMax=81;
  456.     u16PwmCycleMidCount=1;

  457.         //clear flag for phase end/cycle end
  458.         bFlagPwmPhaseEnd=FALSE;
  459.         bFlagPwmCycleEnd=FALSE;
  460. }
  461. void
  462. mode6_phase11_3_init()
  463. {
  464.         u8PwmCycleLittleCount=0;
  465.         u8PwmCycleLittleCountBuffer=PWM_PRO1_CYCLE_LITTLE_END+2;
  466.         u8PwmCycleLittleCountEnd=PWM_PRO1_CYCLE_LITTLE_END+2;
  467.     bFlagPwmCycleInc=TRUE;
  468.         u8PwmCycleLittleCountOffset=0;

  469.         u8PwmOnCycleLittleCountEnd=4;
  470.         u8PwmOnCycleLittleCount=PWM_PRO1_CYCLE_LITTLE_END+2;
  471.         bFlagPwmOnCycleInc=FALSE;
  472.         u8PwmOnCycleLittleCountOffset=2;

  473.         u8PwmCycleMidRepeat=1;
  474.         u8PwmCycleMidRepeatMax=1;
  475.     u16PwmCycleMidCountMax=19;
  476.     u16PwmCycleMidCount=1;

  477.         //clear flag for phase end/cycle end
  478.         bFlagPwmPhaseEnd=FALSE;
  479.         bFlagPwmCycleEnd=FALSE;
  480. }
  481. void
  482. mode6_phase17_1_init()
  483. {
  484.         bFlagPwmPro3Run=TRUE;
  485. }
  486. void
  487. mode6_phase17_2_init()
  488. {
  489.         u8PwmCycleLittleCount=0;
  490.         u8PwmCycleLittleCountBuffer=202;
  491.         u8PwmCycleLittleCountEnd=202;
  492.     bFlagPwmCycleInc=TRUE;
  493.         u8PwmCycleLittleCountOffset=0;

  494.         u8PwmOnCycleLittleCountEnd=202;
  495.         u8PwmOnCycleLittleCount=202;
  496.         bFlagPwmOnCycleInc=FALSE;
  497.         u8PwmOnCycleLittleCountOffset=0;

  498.         u8PwmCycleMidRepeat=1;
  499.         u8PwmCycleMidRepeatMax=1;
  500.     u16PwmCycleMidCountMax=1;
  501.     u16PwmCycleMidCount=1;

  502.         //clear flag for phase end/cycle end
  503.         bFlagPwmPhaseEnd=FALSE;
  504.         bFlagPwmCycleEnd=FALSE;
  505. }

  506. void
  507. mode6_phase17_1_deinit()
  508. {
  509.         bFlagPwmPro3Run=FALSE;
  510. }
  511. void
  512. rf_pro()
  513. {
  514.         if (u8RfAckCount)
  515.         {
  516.                 u8RfAckCount--;
  517.                 send_rf_ack();
  518.         }
  519.         else
  520.         {
  521.                 if(u8TimerRf4ms>5)
  522.                 {
  523.        
  524.                         pl1167_receive_data(u8RfRxBuffer,7);
  525.                         if(bFlagRfRxGet)
  526.                         {
  527.                                 bFlagRfRxGet=FALSE;
  528.                                 if (u8RfRxBuffer[6]=(u8RfRxBuffer[1]^u8RfRxBuffer[2]^u8RfRxBuffer[3]^u8RfRxBuffer[4]^u8RfRxBuffer[5]))
  529.                                 {
  530.                                         if ((u8RfRxBuffer[0]==0X06)&&(u8RfRxBuffer[1]==RF_SYNC))
  531.                                         {
  532.                                                 u8TimerRf4ms=0;
  533.                                                 u8RfTxBuffer[5]=u8RfRxBuffer[4];        //send ack every cmd
  534.                                                 switch (u8RfRxBuffer[4])
  535.                                                 {
  536.                                                 case RF_CMD_RC_OFF:
  537.                                                         system_off_init();
  538.                                                         send_rf_ack_start();
  539.                                                         break;
  540.                                                 case RF_CMD_RC_ON:
  541.                                                         system_on_init();
  542.                                                         send_rf_ack_start();
  543.                                                         break;
  544.                                                 case RF_CMD_RC_LOCK:
  545.                                                         bFlagKeyLock=TRUE;
  546.                                                         bFlagPwmDischarge=TRUE;
  547.                                                         u8DischargeCount=1;
  548.                                                         pwm1_set_period(23726);
  549.                                                         pwm1_set_duty(0);
  550.                                                         pwm2_set_duty(20904);
  551.                                                         pwm3_set_duty(20904);                                                               
  552.                                                         send_rf_ack_start();
  553.                                                         break;
  554.                                                 case RF_CMD_RC_UNLOCK:
  555.                                                         bFlagKeyLock=FALSE;
  556.                                                         u16Pwm1Duty=u16Pwm1DutySave;
  557.                                                         send_rf_ack_start();
  558.                                                         break;
  559.                                                 case RF_CMD_RC_TIMER:
  560.                                                         if (u8TimerMode>TIMER_MODE_50M)
  561.                                                         {
  562.                                                                 u8TimerMode=TIMER_MODE_10M;
  563.                                                         }
  564.                                                         else
  565.                                                                 u8TimerMode+=10;
  566.                                                         u8TimerSecondsCountDown=0;
  567.                                                         switch (u8TimerMode)
  568.                                                         {
  569.                                                         case TIMER_MODE_10M:
  570.                                                         default:
  571.                                                                 u8TimerMinutesCountDown=10;
  572.                                                                 break;
  573.                                                         case TIMER_MODE_20M:
  574.                                                                 u8TimerMinutesCountDown=20;
  575.                                                                 break;
  576.                                                         case TIMER_MODE_30M:
  577.                                                                 u8TimerMinutesCountDown=30;
  578.                                                                 break;
  579.                                                         case TIMER_MODE_40M:
  580.                                                                 u8TimerMinutesCountDown=40;
  581.                                                                 break;
  582.                                                         case TIMER_MODE_50M:
  583.                                                                 u8TimerMinutesCountDown=50;
  584.                                                                 break;
  585.                                                         case TIMER_MODE_60M:
  586.                                                                 u8TimerMinutesCountDown=60;
  587.                                                                 break;

  588.                                                         }
  589.                                                         send_rf_ack_start();
  590.                                                         break;
  591.                                                 case RF_CMD_RC_MODE:
  592.                                                         u8DeviceMode=u8RfRxBuffer[5];
  593.                                                         bFlagPwmDischarge=TRUE;
  594.                                                         u8DischargeCount=1;
  595.                             //u8DischargeDuty=180;
  596.                                                         pwm1_set_period(23726);
  597.                                                         pwm1_set_duty(0);
  598.                                                         pwm2_set_duty(20904);
  599.                                                         pwm3_set_duty(20904);                       
  600. //                                                        pwm1_set_period(200);
  601. //                                                        pwm1_set_duty(0);
  602. //                                                        pwm2_set_duty(u8DischargeDuty);
  603. //                                                        pwm3_set_duty(u8DischargeDuty);
  604.                                                         switch (u8DeviceMode)
  605.                                                         {
  606.                                                         default:
  607.                                                         case DEVICE_MODE1:
  608.                                                                 device_mode1_init();
  609.                                                                 break;
  610.                                                         case DEVICE_MODE2:
  611.                                                                 device_mode2_init();
  612.                                                                 break;
  613.                                                         case DEVICE_MODE3:
  614.                                                                 device_mode3_init();
  615.                                                                 break;
  616.                                                         case DEVICE_MODE4:
  617.                                                                 device_mode4_init();
  618.                                                                 break;
  619.                                                         case DEVICE_MODE5:
  620.                                                                 device_mode5_init();
  621.                                                                 break;
  622.                                                         case DEVICE_MODE6:
  623.                                                                 device_mode6_init();
  624.                                                                 break;
  625.                                                         }
  626.        
  627.                             u16Pwm1Duty=u16Pwm1DutySet[u8IntensityLevel];
  628.                                                         u16Pwm1DutySave=u16Pwm1Duty;
  629.                                                         send_rf_ack_start();
  630.                                                         break;
  631.                                                 case RF_CMD_RC_INTENS_INC:
  632.                                                         if (u8IntensityLevel<INTENS_MAX)
  633.                                                         {
  634.                                                                 u8IntensityLevel++;
  635.                                                         }
  636.                                                         else
  637.                                                                 u8IntensityLevel=INTENS_MAX;
  638.                                                         u16Pwm1Duty=u16Pwm1DutySet[u8IntensityLevel];
  639.                                                         u16Pwm1DutySave=u16Pwm1Duty;
  640.                                                         send_rf_ack_start();
  641.                                                         break;
  642.                                                 case RF_CMD_RC_INTENS_DEC:
  643.                                                         if (u8IntensityLevel>INTENS_MIN)
  644.                                                         {
  645.                                                                 u8IntensityLevel--;
  646.                                                         }
  647.                                                         else
  648.                                                                 u8IntensityLevel=INTENS_MIN;
  649.                                                         u16Pwm1Duty=u16Pwm1DutySet[u8IntensityLevel];
  650.                                                         u16Pwm1DutySave=u16Pwm1Duty;
  651.                                                         send_rf_ack_start();
  652.                                                         break;
  653.                                                 }
  654.                                         }
  655.                                 }
  656.                                 u8RfRxBuffer[0]=0;
  657.                                 u8RfRxBuffer[1]=0;
  658.                                 u8RfRxBuffer[2]=0;
  659.                                 u8RfRxBuffer[3]=0;
  660.                                 u8RfRxBuffer[4]=0;
  661.                                 u8RfRxBuffer[5]=0;
  662.                                 u8RfRxBuffer[6]=0;
  663.                         }
  664.                 }
  665.         }
  666. }


  667. void
  668. send_rf_key_mode()
  669. {

  670. }
  671. void
  672. send_rf_key_off()
  673. {
  674.     u8RfTxBuffer[5]=RF_CMD_DEVICE_OFF;
  675.     send_rf_ack_start();
  676. }
  677. void
  678. send_rf_key_on()
  679. {

  680. }
  681. void
  682. send_rf_key_pause()
  683. {

  684. }
  685. void
  686. send_rf_ack()
  687. {
  688.         u8RfTxBuffer[0]=0x06;
  689.         u8RfTxBuffer[1]=RF_SYNC;
  690.         u8RfTxBuffer[2]=RF_CMD_LENGTH6;
  691.         u8RfTxBuffer[3]=MAINBOARD1;
  692.         u8RfTxBuffer[4]=RF_CMD_DEVICE_ACK;
  693.         //u8RfTxBuffer[5]=0x00;
  694.         u8RfTxBuffer[6]=u8RfTxBuffer[1]^u8RfTxBuffer[2]^u8RfTxBuffer[3]^u8RfTxBuffer[4]^u8RfTxBuffer[5];
  695.         pl1167_send_data(u8RfTxBuffer,7);
  696. }
  697. void
  698. send_rf_key_inc()
  699. {
  700.         u8RfTxBuffer[0]=0x06;
  701.         u8RfTxBuffer[1]=RF_SYNC;
  702.         u8RfTxBuffer[2]=RF_CMD_LENGTH6;
  703.         u8RfTxBuffer[3]=REMOTE_CONTROL;
  704.         u8RfTxBuffer[4]=RF_CMD_RC_INTENS_INC;
  705.         u8RfTxBuffer[5]=0X00;
  706.         u8RfTxBuffer[6]=u8RfTxBuffer[1]^u8RfTxBuffer[2]^u8RfTxBuffer[3]^u8RfTxBuffer[4]^u8RfTxBuffer[5];
  707.         pl1167_send_data(u8RfTxBuffer,7);
  708. }
  709. void
  710. send_rf_ack_start()
  711. {
  712.         u8RfAckCount=RF_ACK_COUNT_MAX;
  713.         send_rf_ack();
  714. }

  715. void
  716. System_init()
  717. {
  718.         timer_reset();
  719.         pl1167_init();
  720.         bFlagDcPowerOn=false;
  721. }

  722. void
  723. system_on_init()
  724. {
  725.     GPIO_Init(GPIOD, (GPIO_Pin_TypeDef)(GPIO_PIN_4), GPIO_MODE_OUT_PP_LOW_SLOW);
  726.     GPIO_Init(GPIOD, (GPIO_Pin_TypeDef)(GPIO_PIN_2|GPIO_PIN_3), GPIO_MODE_OUT_PP_HIGH_SLOW);
  727.     delay(10000);
  728.     GPIO_Init(GPIOD, (GPIO_Pin_TypeDef)(GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4), GPIO_MODE_OUT_PP_LOW_SLOW);
  729.         /*CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER2, ENABLE);
  730.         TIM2_DeInit();
  731.         //GPIO_Init(GPIOD, (GPIO_Pin_TypeDef)(GPIO_PIN_4), GPIO_MODE_OUT_PP_LOW_FAST);
  732.         //GPIO_Init(GPIOD, (GPIO_Pin_TypeDef)(GPIO_PIN_2|GPIO_PIN_3), GPIO_MODE_OUT_PP_HIGH_FAST);
  733.     //delay(20000);
  734.         TIM2_TimeBaseInit(TIM2_PRESCALER_4, PWM1_PERIOD);
  735.         TIM2_ARRPreloadConfig(ENABLE);
  736.         TIM2_UpdateRequestConfig(TIM2_UPDATESOURCE_REGULAR);
  737.         TIM2_OC1Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE, 0x0000, TIM2_OCPOLARITY_HIGH);
  738.         TIM2_OC1PreloadConfig(ENABLE);
  739.         TIM2_OC2Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE, 0x0000, TIM2_OCPOLARITY_HIGH);
  740.         TIM2_OC2PreloadConfig(ENABLE);
  741.         TIM2_OC3Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE, 0x0000, TIM2_OCPOLARITY_HIGH);
  742.         TIM2_OC3PreloadConfig(ENABLE);

  743.         pwm1_set_duty(0);
  744.         pwm2_set_duty(0);
  745.         pwm3_set_duty(0);
  746.         pwm1_start();
  747.   */
  748.   u8SystemMode=SYSTEM_ON;
  749.         bFlagLed1=TRUE;
  750.         //device_mode1_init();
  751.         //u16Pwm1Duty=u16Pwm1DutySet[u8IntensityLevel];
  752.   
  753.         //pwm1_start();
  754.         //pl1167_receive_enable();

  755.         u8TimerMode=TIMER_MODE_20M;
  756.         u8TimerMinutesCountDown=20;
  757.         u8TimerSecondsCountDown=0;
  758.         bFlagKeyLock=FALSE;

  759.         u8RfAckCount=0;
  760. }

  761. void
  762. system_off_init()
  763. {
  764.         u8SystemMode=SYSTEM_OFF;
  765.         bFlagLed1=FALSE;
  766. //        all_output_off();
  767.         u8RfStatus=RF_IDLE;
  768.     TIM2_DeInit();
  769.     //u16Pwm1Duty=0;
  770.     //pwm1_set_duty(u16Pwm1Duty);
  771.     //pwm2_set_duty(0);
  772.     //pwm3_set_duty(0);
  773.     GPIO_Init(GPIOD, (GPIO_Pin_TypeDef)(GPIO_PIN_4), GPIO_MODE_OUT_PP_LOW_SLOW);
  774.     GPIO_Init(GPIOD, (GPIO_Pin_TypeDef)(GPIO_PIN_2|GPIO_PIN_3), GPIO_MODE_OUT_PP_HIGH_SLOW);
  775.     delay(50000);
  776.     GPIO_Init(GPIOD, (GPIO_Pin_TypeDef)(GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4), GPIO_MODE_OUT_PP_LOW_SLOW);
  777.    
  778. }
  779. void
  780. timer_reset()
  781. {
  782.         u8Timer2ms=0;
  783.         u8Timer4ms=0;
  784.         u8Timer1m=0;
  785.         u8Timer1s=0;
  786. }
  787. void
  788. timer_count_down_pro()
  789. {
  790.         if (bFlagTimer1s)
  791.         {
  792.                 bFlagTimer1s=FALSE;
  793.                 if (u8TimerSecondsCountDown>0)
  794.                 {
  795.                         u8TimerSecondsCountDown--;
  796.                 }
  797.                 else
  798.                 {
  799.                         u8TimerSecondsCountDown=59;
  800.                         if (u8TimerMinutesCountDown==0)
  801.                         {
  802.                                 system_off_init();
  803.                                 u8TimerSecondsCountDown=0;
  804.                         }
  805.                         else
  806.                                 u8TimerMinutesCountDown--;
  807.                 }
  808.         }
  809. }
  810. #pragma vector=15
  811. __interrupt void timer2_interrupt(void)
  812. {
  813.         TIM2_ClearFlag(TIM2_FLAG_UPDATE);

  814.         if (bFlagPwmDischarge)
  815.         {
  816.                 if (u8DischargeCount==0)
  817.                 {
  818.                         bFlagPwmDischarge=FALSE;
  819. ……………………

  820. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
PL1167Certify.rar (3.83 MB, 下载次数: 31)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:551093 发表于 2019-5-30 15:12 | 只看该作者
正需要,thanks
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表