網上找的呼吸燈程序,自己仿照寫的
利用定時器產生pwm,實現呼吸燈
參考呼吸燈程序,同樣可以實現控制直流電機的速度,可以到這個網頁去看看https://www.zhihu.com/tardis/sogou/art/83373994
pwm波形:
1.gif (137.8 KB, 下載次數: 64)
下載附件
2020-8-1 22:21 上傳
單片機源程序如下:
- #include <reg52.h>
- #define uint unsigned int
- #define uchar unsigned char
- bit flag; //根據flag判斷變亮或者變暗
- uchar count; //進入中斷次數
- uchar pwm; //根據這個數值來進行點亮或熄滅
- uint updata; //根據這個值來更新占空比,周期120ms
- sbit LED=P2^0; //LED引腳
- void timer0();
- /*********定時器初始化函數***********/
- void timer0_init()
- {
- TMOD=0x02; //定時器0,方式2
- TH0=0xa3; //假設晶振為11.0592M,定時100us
- TL0=0xa3;
- ET0=1; //開定時器0中斷
- EA=1; //開總中斷
- TR0=1; //開定時器
- }
- void main()
- {
- flag=0; //初始為占空比上升
- count=0;
- pwm=10; //脈沖周期為2ms,初始占空比50%
- updata=0;
- LED=1;
- timer0_init();
- while(1);
- }
- void timer0() interrupt 1
- {
- count++;
- updata++;
- if(count==pwm)
- LED=0;
- if(count==20)
- {
- LED=1;
- count=0;
- }
- if((updata==1200)&&(flag==0)) //120ms到,根據flag更新占空比
- {
- updata=0;
- pwm++; //每次加1,占空比增加5%
- if(pwm==19)
- flag=1;
- }
- if((updata==1200)&&(flag==1))
- {
- updata=0;
- pwm--;
- if(pwm==1)
- flag=0;
- }
- }
復制代碼
3-PWM的基本參數 在上圖中,頻率F的值為1/(T1+T2),占空比D的值為T1/(T1+T2)。通過改變單位時間內脈沖的個數可以實現調頻;通過改變占空比可以實現調壓。占空比越大,所得到的平均電壓也就越大,幅值也就越大;占空比越小,所得到的平均電壓也就越小,幅值也就越小。動圖演示如圖4所示。
|