|
本帖最后由 xing_121 于 2024-8-14 20:01 編輯
思路:設(shè)個變量j,j為Led閃爍的次數(shù),將j平分,每部分為6,即不管200ms還是500msLed都會閃爍三次(亮燈加上滅燈為一次),然后定義i,為200ms和500ms的時間標(biāo)志位,每次輪完一次大周期,記得要清零,不過j不能等于0,因為j是從1開始計的。
#include <reg52.h>
sbit Led = P2^0;
/*********
函 數(shù) 名:void Timer0Init(void)
函數(shù)功能:初始化
參 數(shù):none
返 回:none
**********/
void Timer0Init(void) //1毫秒@12.000MHz
{
TMOD &= 0xF0; //設(shè)置定時器模式
TMOD |= 0x01; //設(shè)置定時器模式
TL0 = 0x18; //設(shè)置定時初始值
TH0 = 0xFC; //設(shè)置定時初始值
TF0 = 0; //清除TF0標(biāo)志
TR0 = 1; //定時器0開始計時
ET0 = 1;
EA = 1;
}
void main()
{
Timer0Init();
while(1);
}
/**********
函 數(shù) 名:void Timer0() interrupt 1
函數(shù)功能:
參 數(shù):none
返 回:none
*********/
void Timer0() interrupt 1 //1ms
{
static unsigned char j=1;
static unsigned int i;
TL0 = 0x18; //設(shè)置定時初始值
TH0 = 0xFC; //設(shè)置定時初始值
if(j <= 6)
{
if(++i >= 200)
{
i = 0;
j++;
Led =~ Led;
}
}
else
{
if(++i >= 500)
{
i = 0;
j++;
Led =~Led;
}
}
if(j > 12)
{
j = 1;
}
} |
|