標(biāo)題: 求指導(dǎo)下實(shí)現(xiàn)思路 基于PWM的呼吸燈設(shè)計(jì) [打印本頁(yè)]

作者: sun小胖    時(shí)間: 2021-12-1 19:52
標(biāo)題: 求指導(dǎo)下實(shí)現(xiàn)思路 基于PWM的呼吸燈設(shè)計(jì)


作者: 田賀    時(shí)間: 2021-12-3 16:39
T0負(fù)責(zé)產(chǎn)生1000HZ的PWM,通過(guò)控制T0的定時(shí)時(shí)間影響端口電平翻轉(zhuǎn),達(dá)到控制正向脈沖寬度的作用;
T1負(fù)責(zé)控制T0的定時(shí)時(shí)間,每隔50ms影響一次T0設(shè)置,達(dá)到亮度切換的作用
作者: rayin    時(shí)間: 2021-12-7 08:33
控制PWM產(chǎn)生呼吸燈效果,就是將占空比由0調(diào)到最大,再由最大跳到0, 這個(gè)過(guò)程的周期決定閃爍頻率。
作者: cheney03    時(shí)間: 2021-12-7 08:48
  1. /***********************
  2. PWM-呼吸燈
  3. *************************/
  4. #include<reg52.h>

  5. #define led P2

  6. unsigned char t_count ; //累計(jì)每個(gè)周期中斷次數(shù)的個(gè)數(shù),滿20清零,20*100us=2ms(pwm的周期)
  7. unsigned int count ;  //累計(jì)占空比需要修改(增加還是減少)的中斷次數(shù)的個(gè)數(shù)        1200*100us=120ms
  8. unsigned char t ;  //累計(jì)高電平的個(gè)數(shù)
  9. bit flag ; //標(biāo)志位 0增加,1減少

  10. void timer0init(void)
  11. {
  12.     EA = 1;
  13.         TMOD = 0X02;
  14.         TH0 = 0Xa3;
  15.         TL0 = 0Xa3;
  16.         ET0 = 1;
  17.         TR0 = 1;
  18. }

  19. void main(void)
  20. {
  21.         t_count = 0;
  22.         count = 0;
  23.         t =10;           //占空比總50%開(kāi)始
  24. //        led = 1;

  25.         timer0init();
  26.     while(1);
  27. }
  28. /*每100us進(jìn)入一次中斷*/
  29. void timer0() interrupt 1
  30. {
  31.    t_count++;
  32.    count++;

  33.    if(t_count == t)        
  34.     {
  35.              P2 = 0x00;
  36.     }
  37.         if(t_count == 19)
  38.         {
  39.            t_count = 0;
  40.            P2 = 0xff;
  41.         }


  42.         if((count == 1200)&&(flag == 0))
  43.          {
  44.                count = 0;
  45.                t++;
  46.                if(t == 19)        //增加最大占空比 95%
  47.                  {
  48.                    flag = 1;
  49.                  }
  50.          }

  51.         if((count ==1200)&&(flag == 1))
  52.          {
  53.                 count = 0;
  54.                      t--;
  55.                     if(t ==10)        //減小到最低占空比 50%
  56.                    {
  57.                          flag = 0;
  58.                    }
  59.      }

  60. }
復(fù)制代碼

作者: 996256177    時(shí)間: 2021-12-7 10:19
設(shè)置PWM為變量,往上增加就行了




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