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