unsigned char Hundreds,Tens,Ones;
void DecimalToBcdAscii(signed short DecimalValue)
{
Hundreds = 0;
// Initialize BCD values
Tens = 0;
Ones = 0;
Hundreds:
// Hundreds
DecimalValue = DecimalValue - 100;
if (DecimalValue < 0)
{
goto Tens1;
}
Hundreds = Hundreds + 1; // Increment
Hundreds count
goto Hundreds;
Tens1:
// Tens
DecimalValue = DecimalValue + 100;
Tens2:
DecimalValue = DecimalValue - 10;
if (DecimalValue < 0)
{
goto Ones1;
}
Tens = Tens + 1; //
Increment Tens count
goto Tens2;
Ones1:
// Ones
DecimalValue = DecimalValue + 10;
Ones2:
DecimalValue = DecimalValue - 1;
if (DecimalValue < 0)
{
goto AddAsciiOffset;
}
Ones = Ones + 1; //
Increment Ones count
goto Ones2;
AddAsciiOffset:
// Add ASCII offset
Hundreds = Hundreds + 48;
Tens = Tens + 48;
Ones = Ones + 48;
}
#include
#include
main()
{//clk=12Mhz
int i;
//算法1 耗时0.25s
for (i=0;i<1000;i++)
DecimalToBcdAscii(i);
//算法2 耗时0.42s
for (i=0;i<1000;i++)
{int t;
Hundreds=i/100;
t=i%100;
Tens=t/10;
Ones=i%10;
}
Hundreds = Hundreds + 48;
Tens = Tens + 48;
Ones = Ones + 48;
//算法3 耗时1.5s
for (i=0;i<1000;i++)
{unsigned char buf[5];
sprintf(buf,"%3d",i);
}
}