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);
}
}