以下内容来源于《51单片机轻松入门—基于STC15W4K系列》
例12.5 动态显示的秒计数器(整数有效数值前面的0消隐) 在例12.4的数据显示过程中,整数有效数值前面的0都会被点亮,通常是不符合实际使用要求的,本例中判断整数有效位前数值是否为0,若位0则让段码输出口输出0xFF,使对应位数码管不显示,本例只能对整数有效数值前面的0消隐,小数有效数值前面的0消隐将在12章“精密电压表\通用显示器\计数器制作”部分展示完整产品的实例,本例在上例的基础上主要增加了如下代码。 #define Hidden 16 // 高位消隐码在数据表中的位置,DispTab[15]=0xff void DataProcessing() // 数据处理函数 { unsigned char tmp[6]; // 最高位tmp[5],最低位 tmp[0] tmp[0] = sec%10; // 16进制转BCD码(个位) tmp[1] = sec/10%10; // 16进制转BCD码(十位) tmp[2] = sec/100%10; // 16进制转BCD码(百位) tmp[3] = sec/1000%10; // 16进制转BCD码(千位) tmp[4] = sec/10000%10; // 16进制转BCD码(万位) tmp[5] = sec/100000%10; // 16进制转BCD码(十万位) if (tmp[5]==0) DispBuf[5] = Hidden; // 十万位消隐 else DispBuf[5]= tmp[5]; if ((tmp[5]==0)&&(tmp[4]==0))DispBuf[4]= Hidden; // 万位消隐 else DispBuf[4]= tmp[4]; if((tmp[5]==0)&&(tmp[4]==0)&&(tmp[3]==0)) DispBuf[3]= Hidden; // 千位消隐 else DispBuf[3]= tmp[3]; if((tmp[5]==0)&&(tmp[4]==0)&&(tmp[3]==0)&&(tmp[2]==0))DispBuf[2]= Hidden; //百位消隐 else DispBuf[2]= tmp[2]; if((tmp[5]==0)&&(tmp[4]==0)&&(tmp[3]==0)&&(tmp[2]==0)&&(tmp[1]==0))DispBuf[1]= Hidden; // 十位消隐 else DispBuf[1] = tmp[1]; DispBuf[0] = tmp[0]; // 最低位显示 }
|