Welcome & Happy Holidays!
Kết quả 1 đến 2 của 2

Chủ đề: STM8 & RGBled

  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    STM8 & RGBled

    stm8 điều khiển led RGB bằng 3 kênh pwm của Timer2, anh e nào có cách viết hay hơn xin chỉ giáo!




    Mã:
    /* Includes ------------------------------------------------------------------*/
    #include "stm8s.h"
    
    /**
      * @addtogroup TIM2_PWM_DutyCycleConfiguration
      * @{
      */
    
    /* Private typedef -------------------------------------*/
    /* Private define --------------------------------------*/
    /* Private macro ---------------------------------------*/
    /* Private variables -----------------------------------*/
    uint16_t CCR1_Val = 0;
    uint16_t CCR2_Val = 0;
    uint16_t CCR3_Val = 0;
    
    /* Private function prototypes ---------------------------*/
    static void TIM2_Config(void);
    u16 d,c;
    u16 cnt1=0,cnt2=0,cnt3=0,cnt0=65000,cnt=10;   //cnt1: pwm1           cnt2:pwm2     cnt3:pwm3
    void main(void)                                                          //cnt0 cnt  2 biến tạo delay    
    {
      /* TIM2 configuration -----------------------------------------*/
      TIM2_Config(); 
    
      while (1)
      {
             //chương trình sáng dần màu x dương      
             while (1)//001        tương ứng  đỏ   xl    xd      
                {
                            for (d = 0; d < 2000; ++d) {nop();}            
                            cnt1++;
                            TIM2_SetCompare1(cnt1);//set pwm1
                            if (cnt1==999) break;       //độ sáng max   thoát vòng lập
                }
             // delay sáng xanh dương với độ sáng max     
                for (d = 0; d < cnt0; ++d)
                            {
                            for (c = 0; c < cnt; ++c);
                            }
                // các dòng lệnh sau tương tự, sáng dần...delay....tắt dần.....delay
                while (1)//011
                {
                            for (d = 0; d < 2000; ++d) {nop();}
                            cnt2++;
                            TIM2_SetCompare2(cnt2);
                            if (cnt2==999) break;
                }   
                for (d = 0; d < cnt0; ++d)
                            {
                            for (c = 0; c < cnt; ++c);
                            }           
                while (1)//010
                {
                            for (d = 0; d < 2000; ++d) {nop();}
                            cnt1--;
                            TIM2_SetCompare1(cnt1);
                            if (cnt1==0) break;
                }           
                for (d = 0; d < cnt0; ++d)
                            {
                            for (c = 0; c < cnt; ++c);
                            }
                while (1)//110
                {
                            for (d = 0; d < 2000; ++d) {nop();}
                            cnt3++;
                            TIM2_SetCompare3(cnt3);
                            if (cnt3==999) break;
                }
                for (d = 0; d < cnt0; ++d)
                            {
                            for (c = 0; c < cnt; ++c);
                            }
                while (1)//100
                {
                            for (d = 0; d < 2000; ++d) {nop();}
                            cnt2--;
                            TIM2_SetCompare2(cnt2);
                            if (cnt2==0) break;
                }   
                for (d = 0; d < cnt0; ++d)
                            {
                            for (c = 0; c < cnt; ++c);
                            }
                while (1)//101
                {
                            for (d = 0; d < 2000; ++d) {nop();}
                            cnt1++;
                            TIM2_SetCompare1(cnt1);
                            if (cnt1==999) break;
                }           
                for (d = 0; d < cnt0; ++d)
                            {
                            for (c = 0; c < cnt; ++c);
                            }
                while (1)//111
                {
                            for (d = 0; d < 2000; ++d) {nop();}
                            cnt2++;
                            TIM2_SetCompare2(cnt2);
                            if (cnt2==999) break;
                }   
                for (d = 0; d < cnt0; ++d)
                            {
                            for (c = 0; c < cnt; ++c);
                            }
                while (1)//000
                {
                            for (d = 0; d < 2000; ++d) {nop();}
                            cnt3--;
                            TIM2_SetCompare1(cnt3);
                            TIM2_SetCompare2(cnt3);
                            TIM2_SetCompare3(cnt3);
                            if (cnt3==0) break;
                }
                cnt1=0;cnt2=0;cnt3=0;
        }
    }
    
    
    /**
      * @brief  Configure TIM2 peripheral in PWM mode
      * @param  None
      * @retval None
      */
    static void TIM2_Config(void)
    {
      /* Time base configuration */
      TIM2_TimeBaseInit(TIM2_PRESCALER_1, 999);
    
      /* PWM1 Mode configuration: Channel1 */
      TIM2_OC1Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE,CCR1_Val, TIM2_OCPOLARITY_HIGH);
      TIM2_OC1PreloadConfig(ENABLE);
    
      /* PWM1 Mode configuration: Channel2 */
      TIM2_OC2Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE,CCR2_Val, TIM2_OCPOLARITY_HIGH);
      TIM2_OC2PreloadConfig(ENABLE);
    
      /* PWM1 Mode configuration: Channel3 */        
      TIM2_OC3Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE,CCR3_Val, TIM2_OCPOLARITY_HIGH);
      TIM2_OC3PreloadConfig(ENABLE);
    
      TIM2_ARRPreloadConfig(ENABLE);
    
      /* TIM2 enable counter */
      TIM2_Cmd(ENABLE);
    }
    
    #ifdef USE_FULL_ASSERT
    
    /**
      * @brief  Reports the name of the source file and the source line number
      *   where the assert_param error has occurred.
      * @param file: pointer to the source file name
      * @param line: assert_param error line source number
      * @retval None
      */
    void assert_failed(uint8_t* file, uint32_t line)
    {
      /* User can add his own implementation to report the file name and line number,
         ex: printf("Wrong parameters value: file %s on line %d
    ", file, line) */
    
      /* Infinite loop */
      while (1)
      {
      }
    }
    #endif
    
    /**
      * @}
      */
    
    /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/

    code:

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Bạn up cái sơ đồ và code anh em làm text thử như thế nào mới biết chứ nhìn cái hình thì pó tay

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •  
Múi giờ GMT +7. Bây giờ là 07:05 PM. Diễn đàn sử dụng vBulletin® Phiên bản 4.2.5.
Bản quyền của 2018 vBulletin Solutions, Inc. Tất cả quyền được bảo lưu.
Ban quản trị không chịu trách nhiệm về nội dung do thành viên đăng.