部分程序:
while (1)
{
if (cnt >= 50) //判断T0溢出是否达到1000次
{
cnt = 0; //达到1000次后计数值清零
sec++; //秒计数自加1
//将sec按十进制位从低到高依次提取到buf数组中
buf[0] = sec%10;
buf[1] = sec/10%10;
buf[2] = sec/100%10;
buf[3] = sec/1000%10;
buf[4] = sec/10000%10;
buf[5] = sec/100000%10;
//从最高为开始,遇到0不显示,遇到非0退出循环
for (j=5; j>=1; j--)
{
if (buf[j] == 0)
LedBuff[j] = 0xFF;
else
break;
}
//将剩余的有效数字位如实转换
for ( ; j>=0; j--) //for()起始未对j操作,j即保持上个循环结束时的值
{
LedBuff[j] = LedChar[buf[j]];
}
}
举例:当sec= 001025 时,buff[5]=0,for里面的if判断为真,LedBuff[5] = 0xFF;高位第一个0不显示,buff[4]=0,if再次判断为真,LedBuff[4] = 0xFF; 第二高位0也不显示了,到第三位 buff[3]=1,if为假,else break,直接跳出循环,1后面的所有位数都不会进入到判断阶段,包括后面的0,也照常显示,所以这个地方只消除前面无效的0, 由高位到低位,一遇到有效数字就跳出for循环;
(程序摘自《手把手教你学51单片机》)