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