首先定义一个变量在定时器中进行计数
unsigned short Rchangecnt=0;
void TIMER0_ISR(void) interrupt 1
{
TH0 = (65536-TH0_INIT)/256;
TL0 = (65536-TL0_INIT)%256;
Rchangecnt++;
}
呼吸灯的效果无非就是io口输出的高电平与低电平的比例按照时间的变化,进行有规律的改变
void Breath_Light(void)
{
static bit BreathFlag=0;
static bit DownFlag=0;
static char n=0;
if(Rchangecnt>160){Rchangecnt=0;n++;}
if(n>40){n=0;DownFlag=~DownFlag;}
BreathFlag=Rchangecnt/(n*4);
if(BreathFlag==0)
{
if(DownFlag==0){RED=0;}
else{RED=1;}
}
else
{
if(DownFlag==0){RED=1;}
else{RED=0;}
}
}
可调整Rchangecnt计数的值以及n的计数清零次数改变呼吸灯的快慢。注意这两个值需取合适的值才会有比较好的呼吸效果。