|
在不改變頻率的情況下,有辦法改變呼吸燈的周期嗎,比如我寫(xiě)的程序是暗->亮->暗4s完成,現(xiàn)想改成8s,有沒(méi)有可能保持50hz的頻率改變整體的時(shí)間
單片機(jī)源程序如下:
- #include<init.h>
- #include<reg52.h>
- void init();
- u8 Tcount;
- void Init()
- {
- TMOD = 0x02; //定時(shí)器0,8位自動(dòng)重裝載,T0工作方式2
- TH0 = 0x48; //200us定時(shí),2^8-11.0592M / 12 * 200us
- TL0 = 0x48; //自動(dòng)重裝載,低八位等于高八位
- ET0 = 1; //打開(kāi)定時(shí)器0中斷允許
- EA = 1; //打開(kāi)總中斷
- TR0 = 1; //啟動(dòng)定時(shí)器0
- }
- sbit LED=P1^0;
- u8 Tcount,dutyfactor,direct,num; //一個(gè)PWM周期內(nèi)的定時(shí)器周期計(jì)數(shù),占空比,方向
- void breatheLED(); //呼吸燈主程序的函數(shù)聲明
- //呼吸燈主程序
- void breatheLED() {
- if(Tcount >= 100) { //一個(gè)PWM周期(100次*200us)
- Tcount = 0; //下一個(gè)PWM周期內(nèi),重新計(jì)數(shù)
- //根據(jù)方向判斷占空比增加或減少
- if(direct == 0) { //正方向,占空比增加
- dutyfactor++; //下一個(gè)PWM周期,占空比增加1
- } else if(direct == 1) { //負(fù)方向,占空比減少
- dutyfactor--; //下一個(gè)PWM周期,占空比減少1
- }
- }
-
- //根據(jù)占空比值判斷方向是否需要改變
- if(dutyfactor <= 0) { //占空比減少到0
- direct = 0; //正方向,占空比開(kāi)始增加
- } else if(dutyfactor >= 100) { //占空比增加到100
- direct = 1; //負(fù)方向,占空比開(kāi)始減少
- }
- //占空比:通電時(shí)間相對(duì)于總時(shí)間所占的比例(此程序中:低電平時(shí)間相對(duì)于PWM周期所占的比例)
- //一個(gè)PWM周期計(jì)數(shù)100次,占空比相當(dāng)于低電平的計(jì)數(shù)周期次數(shù)。即:0~占空比:低電平,燈亮;占空比~100:高電平,燈滅
- //在一個(gè)PWM周期內(nèi),根據(jù)周期計(jì)數(shù)是否小于占空比,判斷LED燈的亮滅
-
- if(Tcount < dutyfactor){ //周期計(jì)數(shù)值<占空比
- LED = 0; //當(dāng)前PWM周期的當(dāng)前計(jì)數(shù)周期內(nèi)燈亮
- } else {
- LED = 1; //當(dāng)前PWM周期的當(dāng)前計(jì)數(shù)周期內(nèi)燈滅
- }
- }
- void main()
- {
- Init();
- //循環(huán)實(shí)現(xiàn)呼吸燈功能
- //PWM周期:20ms;占空比:0~100;占空比每一份:200us;一次呼吸燈效果(暗->亮->暗):4s
- while(1) {
- if(TF0==1)
- {
- TF0=0;
- Tcount++; //一個(gè)PWM周期內(nèi),計(jì)數(shù)
- }
- breatheLED(); //呼吸燈效果實(shí)現(xiàn)
- display(dutyfactor);
- }
- }
復(fù)制代碼
|
|