标题:
单片机使用定时器中断控制LED先200ms闪烁三次,再500ms闪烁三次,再200ms....
[打印本页]
作者:
EHJUDSZ
时间:
2024-8-12 17:02
标题:
单片机使用定时器中断控制LED先200ms闪烁三次,再500ms闪烁三次,再200ms....
要求使单片机的定时器中断控制LED先200ms闪烁三次,再500ms闪烁三次,再200ms闪烁三次,跪求一下思路
作者:
xiaobendan001
时间:
2024-8-13 07:32
弄个计数器,每50毫秒++,然后在计数器==2时反转输出,==4再反转,然后==6再反转,……==10再反转,==15再反转……
作者:
597259498
时间:
2024-8-13 08:03
定义三个变量就可以了
作者:
zmc419
时间:
2024-8-13 11:33
定义三个变量,在定时器中断中累加。主程序循环判定三个变量,到时间清零并反转LED电平。
作者:
xing_121
时间:
2024-8-13 21:58
本帖最后由 xing_121 于 2024-8-14 20:01 编辑
思路:设个变量j,j为Led闪烁的次数,将j平分,每部分为6,即不管200ms还是500msLed都会闪烁三次(亮灯加上灭灯为一次),然后定义i,为200ms和500ms的时间标志位,每次轮完一次大周期,记得要清零,不过j不能等于0,因为j是从1开始计的。
#include <reg52.h>
sbit Led = P2^0;
/*********
函 数 名:void Timer0Init(void)
函数功能:初始化
参 数:none
返 回:none
**********/
void Timer0Init(void) //1毫秒@12.000MHz
{
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x18; //设置定时初始值
TH0 = 0xFC; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1;
EA = 1;
}
void main()
{
Timer0Init();
while(1);
}
/**********
函 数 名:void Timer0() interrupt 1
函数功能:
参 数:none
返 回:none
*********/
void Timer0() interrupt 1 //1ms
{
static unsigned char j=1;
static unsigned int i;
TL0 = 0x18; //设置定时初始值
TH0 = 0xFC; //设置定时初始值
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;
}
}
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1