[MINI51] mini51学习第三贴 PWM调光灯+TIMER

[复制链接]
 楼主| cnjxlxp 发表于 2012-2-3 19:38 | 显示全部楼层 |阅读模式
本帖最后由 hotpower 于 2012-9-22 12:54 编辑

根据助学园地的PWM例子改编而成,园地的例子使用PWM过程中没有改变占空比,于是学习了一下并且加入改变占空比部分,实现PWM调光功能。。。

  1. /*---------------------------------------------------------------------------------------------------------*/
  2. /*                                                                                                         */
  3. /* Copyright(c) 2009 Nuvoton Technology Corp. All rights reserved.                                         */
  4. /*                                                                                                         */
  5. /*---------------------------------------------------------------------------------------------------------*/
  6. #include "includes.h"  //°üº¬ËùÐèµÄÍ·Îļþ
  7. uint8_t duty=99;
  8. S_DRVPWM_TIME_DATA_T sP_PWM;
  9. int8_t flag;
  10. void TMR0_Callback(void)
  11. {
  12. if(duty == 0)
  13. duty=99;
  14. duty--;
  15. PWM->CMR2 = (duty * PWM->CNR2) / 100;//change duty
  16.    flag = ~flag;
  17.    if(flag)
  18.    {
  19.        DrvGPIO_SetBit(E_PORT3, 1);  //LED0-OFF
  20.        DrvGPIO_SetBit(E_PORT3, 6);  //LED1-OFF
  21.     DrvGPIO_SetBit(E_PORT5, 2);  //LED2-OFF
  22.        DrvGPIO_SetBit(E_PORT2, 6);  //LED3-OFF
  23.    }
  24.    else
  25.    {
  26.        DrvGPIO_ClrBit(E_PORT3, 1);  //LED0-ON
  27.        DrvGPIO_ClrBit(E_PORT3, 6);  //LED1-ON
  28.        DrvGPIO_ClrBit(E_PORT5, 2);  //LED2-ON
  29.        DrvGPIO_ClrBit(E_PORT2, 6);  //LED3-ON
  30.    }
  31. }
  32. int main (void)
  33. {
  34. Set_System();     
  35.     DrvGPIO_InitFunction(FUNC_PWM2);
  36. DrvPWM_Open();
  37. sP_PWM.u8Mode = DRVPWM_AUTO_RELOAD_MODE;
  38. sP_PWM.u8HighPulseRatio = 99;      
  39. sP_PWM.u32Frequency =100;
  40. sP_PWM.i32Inverter = 0;
  41. DrvPWM_SetTimerClk(DRVPWM_TIMER2, &sP_PWM);//use method1
  42. DrvPWM_SetTimerIO(DRVPWM_TIMER2, 1);
  43. DrvPWM_Enable(DRVPWM_TIMER2);

  44. while(1)
  45. {
  46.   ;
  47. }

  48. }


  1. #include "includes.h"  //°üº¬ËùÐèµÄÍ·Îļþ
  2. void timer_init(void);
  3. /*************************************************************************************
  4. ** Function name:       Set_System
  5. ** Descriptions:        ·âװһЩ³õʼ»¯Ä£¿é
  6. ** input parameters:    none
  7. ** output parameters:   none
  8. ** Returned value:      none
  9. *************************************************************************************/
  10. void Set_System(void)
  11. {
  12.   RCC_Configuration();     //ÅäÖÃϵͳʱÖÓ
  13.   GPIO_Configuration();     //ÅäÖÃGPIO
  14.   timer_init();
  15. }
  16. /*************************************************************************************
  17. ** Function name:       RCC_Configuration
  18. ** Descriptions:        ÏµÍ³Ê±ÖÓÔ´ÉèÖÃ
  19. ** input parameters:    none
  20. ** output parameters:   none
  21. ** Returned value:      none
  22. *************************************************************************************/
  23. void RCC_Configuration(void)
  24. {
  25.    UNLOCKREG();            // ¶Ôд±£»¤Î»²Ù×÷ʱ ÐèÒªÒ»´ÎÏò0x50000 0100дÈë 0x59,0x16,0x88
  26.    DrvSYS_Open(XTL_CLK);         // Enable high external clock and use it as system clock (HCLK)
  27.    while (DrvSYS_GetChipClockSourceStatus(XTL_CLK) != 1);  //µÈ´ýÍⲿ12MHZ¾§Õñ¾ÍÐ÷
  28.    LOCKREG();                          // Ïò¡°0x5000_0100¡±Ð´ÈëÈκÎÖµ£¬¾Í¿ÉÒÔÖØËø±£»¤¼Ä´æÆ÷
  29. }
  30. /*************************************************************************************
  31. ** Function name:       GPIO_Configuration
  32. ** Descriptions:        GPIOÅäÖÃ
  33. ** input parameters:    none
  34. ** output parameters:   none
  35. ** Returned value:      none
  36. *************************************************************************************/
  37. void GPIO_Configuration()
  38. {
  39.     DrvGPIO_Open(E_PORT3, E_PIN1, E_IO_OUTPUT);    //LED0
  40. DrvGPIO_Open(E_PORT3, E_PIN6, E_IO_OUTPUT);    //LED1
  41.     DrvGPIO_Open(E_PORT5, E_PIN2, E_IO_OUTPUT);    //LED2
  42. DrvGPIO_Open(E_PORT2, E_PIN6, E_IO_OUTPUT);    //LED3
  43. }
  44. /*************************************************************************************
  45. ** Function name:       delay_ms
  46. ** Descriptions:        1ms(¾§ÕñΪ12MHZ)ÑÓʱ×Ó³ÌÐò
  47. ** input parameters:    count
  48. ** output parameters:   none
  49. ** Returned value:      none
  50. *************************************************************************************/
  51. void delay_ms(uint32_t count)
  52. {
  53.     uint32_t i,j;
  54. for(i=count;i>0;i--)
  55.     for(j=2395;j>0;j--);
  56. }
  57. void timer_init(void)
  58. {
  59.   DrvTIMER_Init();
  60.   DrvTIMER_Open(E_TMR0, 1000, E_PERIODIC_MODE); //1000/s
  61.   DrvTIMER_SetTimerEvent(E_TMR0, 100, (TIMER_CALLBACK)TMR0_Callback, 0);//100ms
  62.   DrvTIMER_EnableInt(E_TMR0);
  63.   DrvTIMER_Start(E_TMR0);
  64. }

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
xlhtracy 发表于 2012-2-6 12:46 | 显示全部楼层
:D收藏啦
hanfei69882 发表于 2012-3-29 23:10 | 显示全部楼层
支持一下
[惊涛骇浪] 发表于 2012-5-18 09:46 | 显示全部楼层
支持MINI51
jstele 发表于 2013-1-26 11:16 | 显示全部楼层
學者一下  有要用到
a437916817 发表于 2013-4-5 21:49 | 显示全部楼层
学习
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

46

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部