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