上篇:万年历星期的算法(C语言)
下篇:DSC12887时钟的驱动程序

十进制转bcd三种算法

 

 

作者:鞠春阳

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<reg51.h>
#include<stdio.h>
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);
}
}