中级会员
 
- 积分
- 311
- 金钱
- 311
- 注册时间
- 2015-8-18
- 在线时间
- 63 小时
|
发表于 2015-12-29 13:27:57
|
显示全部楼层
这个简单,不管你3秒,还是1秒。你要稳定性高的话,我建议在中断多设几个计数器和标志位,
就是你有几个灯就设几个标志位,你有几个时间,就设几个计数器,
每个计数器对应不同时间,用到那个计数器就读那个标志位,例子
#define TIME_NUM0 20 //1S
#define TIME_NUM1 60 //3S
#define TIME_NUM2 10 //0.5S
int TimeNum0=0; 设置为全局变量(extern int TimeNum0;)
char InterFlag0=0; 设置为全局变量(extern char InterFlag0;) //闪烁时间
int TimeNum1=0; 设置为全局变量(extern int TimeNum1;)
char InterFlag1=0; 设置为全局变量(extern char InterFlag1;) //1S
int TimeNum2=0; 设置为全局变量(extern int TimeNum2;)
char InterFlag2=0; 设置为全局变量(extern char InterFlag2;) //3S
中断程序:
void IT(void)
{
1,判断中断标志位,
2,清除中断标志位,
3,
if(TimeNum0<1000)//为防止计数器溢出加的判断
{
TimeNum0++;
if((TimeNum0>=TIME_NUM0)&&(InterFlag0!=1)) //闪烁时间
{
InterFlag0=1;
}
}
if(TimeNum1<1000)//为防止计数器溢出加的判断
{
TimeNum1++;
if((TimeNum1>=TIME_NUM1)&&(InterFlag1!=1)) //1秒标志位
{
InterFlag1=1;
}
}
if(TimeNum2<1000)//为防止计数器溢出加的判断
{
TimeNum2++;
if((TimeNum2>=TIME_NUM2)&&(InterFlag2!=1)) //3秒标志位
{
InterFlag2=1;
}
}
}
这下好了你在主程序想用那个就读那个就好了。1S.3S,0.5S都有了
自己调用就可以实现你的功能了,和上面用法一样了。 |
|