以下內容來源于《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]; // 最低位顯示 }
|