|
數字分離 比如把123456這個整數進行分離,方便按位顯示在數碼管上
思路:1、把這個數對10取模 123456%10 結果是 6 就把第一位分離出來了
2、把這個數除10后再進行對10取模 123456/10 結果12345 再12345%10 結果是5 就把第二位分離出來了
3、進行這樣的循環 這個數是6位就循環6次,把結果存放在一組變量中,這樣就把這個數的各位都進行分離出來了
4、數字首位為0,數碼管不顯示0,數字當中或末尾是0則顯示0
5、經過循環語句后,就把數字每位的數據儲存在了數字顯示緩存數字Ledbuff[]中了
程序:
void ShowNumber(unsigned long num) //顯示數字函數,參數是1個長整形的數字num
{
signed char i; //定義變量i用于循環數的位數
unsigned char buf[6]; //定義一個數組用于保存分離出來各位的數據
for(i=0; i<6; i++)
{
buf[i] = num % 10;
num = num / 10;
} //上面2個語句就是循環6次,把1個6位數進行按位分離后存放在數組buf中
for(i=5; i>=1; i--) //進行首位是零,不顯示
{
if(buf[i] == 0) //如果首位是零,則把數碼管顯示緩存數據為0XFF,由于是共陽極數碼管,如果數據是0xff 則數碼管不顯示
{
LedBuff[i] = 0xFF;
}
else //如果首位不是零,則跳出循環
break;
}
for(; i>=0; i--) //i繼承了上面語句的數值,把該位的數字通過Ledchar[buf[i]]數組,進行轉換為該數字的顯示數據并賦值給數碼管顯示緩存
{
LedBuff[i] = LedChar[buf[i]];
}
}
unsigned char code LedChar[]={ //0-F在數碼管上顯示的數據表用數組存放
0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
};
unsigned char LedBuff[6] = { //每位數字顯示的數據儲存數組緩存,設置初始值是0xff
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
};
|
|