数码管高位消0

部分程序:

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单片机》)

猜你喜欢

转载自blog.csdn.net/weixin_49859755/article/details/108361415