从单片机基础到程序框架(全集 2019pdf版).pdf - 第400页
疑点讲解(1 ): 这里第 2 路跑 马灯的 “S u8Step”与第 1 路跑 马灯的“Su8Step”虽然同名, 但是 , 因为 它们是静态的 局 部变量, 在两个不 同的函数 内部, 是两个不同 的变量, 这两 个变量所分配 的 RAM 内存地 址是不一样 的, 因此, 它们虽然同 名,但是不矛 盾不冲突。 */ static unsig ned char Su8Step =0; //加 stati c 修饰的局部变 量,每次进 …

vGu8TimeFlag_1=0;
vGu16TimeCnt_1=BLINK_TIME_1; //重装定时的时间
vGu8TimeFlag_1=1;
P0_0=0;
P0_1=0;
P0_2=0;
P0_3=0;
P0_4=0;
P0_5=0;
P0_6=1; //第 6 个灯熄灭
P0_7=0;
Su8Step=7; //切换到下一个步骤,精髓语句!
}
break;
case 7:
if(0==vGu16TimeCnt_1) //时间到
{
vGu8TimeFlag_1=0;
vGu16TimeCnt_1=BLINK_TIME_1; //重装定时的时间
vGu8TimeFlag_1=1;
P0_0=0;
P0_1=0;
P0_2=0;
P0_3=0;
P0_4=0;
P0_5=0;
P0_6=0;
P0_7=1; //第 7 个灯熄灭
Su8Step=0; //返回到第 0 个步骤重新开始往下走,精髓语句!
}
break;
}
}
//第 2 路跑马灯
void Led_2_Task(void)
{
/*

疑点讲解(1):
这里第 2 路跑马灯的“Su8Step”与第 1 路跑马灯的“Su8Step”虽然同名,但是,因为它们是静态的局
部变量,在两个不同的函数内部,是两个不同的变量,这两个变量所分配的 RAM 内存地址是不一样的,因此,
它们虽然同名,但是不矛盾不冲突。
*/
static unsigned char Su8Step=0; //加 static 修饰的局部变量,每次进来都会保留上一次值。
switch(Su8Step)
{
case 0:
if(0==vGu16TimeCnt_2) //时间到
{
vGu8TimeFlag_2=0;
vGu16TimeCnt_2=BLINK_TIME_2; //重装定时的时间
vGu8TimeFlag_2=1;
P1_4=1; //第 0 个灯熄灭
P1_5=0;
P1_6=0;
P3_3=0;
Su8Step=1; //切换到下一个步骤,精髓语句!
}
break;
case 1:
if(0==vGu16TimeCnt_2) //时间到
{
vGu8TimeFlag_2=0;
vGu16TimeCnt_2=BLINK_TIME_2; //重装定时的时间
vGu8TimeFlag_2=1;
P1_4=0;
P1_5=1; //第 1 个灯熄灭
P1_6=0;
P3_3=0;
Su8Step=2; //切换到下一个步骤,精髓语句!
}
break;
case 2:

if(0==vGu16TimeCnt_2) //时间到
{
vGu8TimeFlag_2=0;
vGu16TimeCnt_2=BLINK_TIME_2; //重装定时的时间
vGu8TimeFlag_2=1;
P1_4=0;
P1_5=0;
P1_6=1; //第 2 个灯熄灭
P3_3=0;
Su8Step=3; //切换到下一个步骤,精髓语句!
}
break;
case 3:
if(0==vGu16TimeCnt_2) //时间到
{
vGu8TimeFlag_2=0;
vGu16TimeCnt_2=BLINK_TIME_2; //重装定时的时间
vGu8TimeFlag_2=1;
P1_4=0;
P1_5=0;
P1_6=0;
P3_3=1; //第 3 个灯熄灭
Su8Step=0; //返回到第 0 个步骤重新开始往下走,精髓语句!
}
break;
}
}