从单片机基础到程序框架(全集 2019pdf版).pdf - 第696页
break; case 2: if(0==Su 8BlinkFlag) //两种 状态的切换判 断 { Su8Blink Flag=1; Su8Temp_3= 10; //右起第 3 个显 示“不显 示” ( 10 代表不显示 ) } else { Su8Blink Flag=0; Su8Temp_3= Gu8EditDa ta_3; //显示“个秒 ”的临时中间 个体,属于 动态数据 。 } break; case 3: if(0==…

Su8Temp_3=Gu8EditData_3; //显示“个秒”的临时中间个体,属于动态数据。
vGu8Display_Righ_3=Su8Temp_3; //过渡需要显示的数据到底层驱动变量
}
if(1==Gu8PartUpdate_3) //局部 3 更新显示
{
Gu8PartUpdate_3=0; //及时清零,只更新一次显示即可,避免一直进来更新显示
Su8Temp_2=Gu8EditData_2; //显示“百毫秒”的临时中间个体,属于动态数据。
vGu8Display_Righ_2=Su8Temp_2; //过渡需要显示的数据到底层驱动变量
}
if(1==Gu8PartUpdate_4) //局部 4 更新显示
{
Gu8PartUpdate_4=0; //及时清零,只更新一次显示即可,避免一直进来更新显示
Su8Temp_1=Gu8EditData_1; //显示“十毫秒”的临时中间个体,属于动态数据。
vGu8Display_Righ_1=Su8Temp_1; //过渡需要显示的数据到底层驱动变量
}
if(0==vGu16BlinkTimerCnt) //某位被选中的数码管跳动闪烁的定时器
{
vGu8BlinkTimerFlag=0;
vGu16BlinkTimerCnt=BLINK_TIME; //重设定时器的定时时间
vGu8BlinkTimerFlag=1;
switch(Gu8Part) //某个局部被选中,则闪烁跳动
{
case 1:
if(0==Su8BlinkFlag) //两种状态的切换判断
{
Su8BlinkFlag=1;
Su8Temp_4=10; //右起第 4 个显示“不显示”(10 代表不显示)
}
else
{
Su8BlinkFlag=0;
Su8Temp_4=Gu8EditData_4; //显示“十秒”的临时中间个体,属于动态数据。
}

break;
case 2:
if(0==Su8BlinkFlag) //两种状态的切换判断
{
Su8BlinkFlag=1;
Su8Temp_3=10; //右起第 3 个显示“不显示”(10 代表不显示)
}
else
{
Su8BlinkFlag=0;
Su8Temp_3=Gu8EditData_3; //显示“个秒”的临时中间个体,属于动态数据。
}
break;
case 3:
if(0==Su8BlinkFlag) //两种状态的切换判断
{
Su8BlinkFlag=1;
Su8Temp_2=10; //右起第 2 个显示“不显示”(10 代表不显示)
}
else
{
Su8BlinkFlag=0;
Su8Temp_2=Gu8EditData_2; //显示“百毫秒”的临时中间个体,属于动态数据。
}
break;
case 4:
if(0==Su8BlinkFlag) //两种状态的切换判断
{
Su8BlinkFlag=1;
Su8Temp_1=10; //右起第 1 个显示“不显示”(10 代表不显示)
}
else
{
Su8BlinkFlag=0;
Su8Temp_1=Gu8EditData_1; //显示“十毫秒”的临时中间个体,属于动态数据。
}
break;

default: //都没有被选中的时候
if(Gu32SetData_Countdown<10000)
{
Su8Temp_4=10; //显示“无”
}
else
{
Su8Temp_4=Gu8EditData_4; //显示“十秒”的临时中间个体,属于动态数据。
}
Su8Temp_3=Gu8EditData_3; //显示“个秒”的临时中间个体,属于动态数据。
Su8Temp_2=Gu8EditData_2; //显示“百毫秒”的临时中间个体,属于动态数据。
Su8Temp_1=Gu8EditData_1; //显示“十毫秒”的临时中间个体,属于动态数据。
break;
}
vGu8Display_Righ_4=Su8Temp_4; //过渡需要显示的数据到底层驱动变量
vGu8Display_Righ_3=Su8Temp_3; //过渡需要显示的数据到底层驱动变量
vGu8Display_Righ_2=Su8Temp_2; //过渡需要显示的数据到底层驱动变量
vGu8Display_Righ_1=Su8Temp_1; //过渡需要显示的数据到底层驱动变量
}
}
void Wd2(void) //窗口 2 显示函数。倒计时的运行显示窗口。
{
//需要借用的中间变量,用来拆分数据位。
static unsigned char Su8Temp_4,Su8Temp_3,Su8Temp_2,Su8Temp_1; //需要借用的中间变量
if(1==Gu8WdUpdate) //如果需要整屏更新
{
Gu8WdUpdate=0; //及时清零,只更新一次显示即可,避免一直进来更新显示
//先分解数据,注意,这里分解的时候,“先整除后求余”必须用一行代码一气呵成,不能拆
//分成两行代码,否则会有隐患会有 bug。除非,把四个临时变都改成 unsigned long 类型。
//Su8Temp_4 提取“十秒”位。
Su8Temp_4=vGu32CountdownTimerCnt/10000%10; //实际精度是 0.001 秒,但显示精度是 0.01 秒
//Su8Temp_3 提取“个秒”位。
Su8Temp_3=vGu32CountdownTimerCnt/1000%10; //实际精度是 0.001 秒,但显示精度是 0.01 秒
//Su8Temp_2 提取“百毫秒”位。
Su8Temp_2=vGu32CountdownTimerCnt/100%10; //实际精度是 0.001 秒,但显示精度是 0.01 秒