|
#include <reg52.h>
unsigned char PWM_COUNT; //計(jì)數(shù)
unsigned int HUXI_COUNT; //占空比更新時(shí)間
unsigned char PWM_VLAUE; //占空比比對(duì)值
bit direc_flag; //占空比更新方向
void timer0_init()
{
TMOD=0x02; //模式設(shè)置,00010000,定時(shí)器0,工作于模式2(M1=1,M0=0)
TH0=0x47; //定時(shí)器溢出值設(shè)置,每隔200us發(fā)起一次中斷。
TL0=0X47;
TR0=1; //定時(shí)器0開始計(jì)時(shí)
ET0=1; //開定時(shí)器0中斷
EA=1; //開總中斷
PWM_COUNT =0;
}
void time0() interrupt 1
{
PWM_COUNT++;
HUXI_COUNT++;
if(PWM_COUNT == PWM_VLAUE) //判斷是否到了點(diǎn)亮LED的時(shí)候
LED = 1; //點(diǎn)亮LED
if(PWM_COUNT == 10) //當(dāng)前周期結(jié)束
{
LED = 0; //熄滅LED
PWM_COUNT = 0; //重新計(jì)時(shí)
}
if((HUXI_COUNT == 600) && (direc_flag == 0))
{ //占空比增加10%
HUXI_COUNT = 0;
PWM_VLAUE++;
if(PWM_VLAUE == 9) //占空比更改方向
direc_flag = 1;
}
if((HUXI_COUNT == 600) && (direc_flag == 1))
{ //占空比減少10%
HUXI_COUNT = 0;
PWM_VLAUE--;
if(PWM_VLAUE == 1) //占空比更改方向
direc_flag = 0;
}
}
void main()
{
HUXI_COUNT = 0;
PWM_COUNT = 0;
PWM_VLAUE = 5;
direc_flag = 0;
LED = 1; //默認(rèn)LED熄滅
timer0_init(); //定時(shí)器0初始化
while(1);
}
|
評(píng)分
-
查看全部評(píng)分
|