MCU通用资源
返回
登录/注册
十进制转bcd三种算法
楼主
DC 于 2006-07-07 01:01:53
十进制转bcd三种算法
摘自:单片机坐标
作者:鞠春阳
[CODE]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);
}
} [/CODE]
回复
1楼
贝壳与海 于 2007-02-12 14:48:43
我还没用到啊!很感谢版主.
回复
2楼
hchxhot 于 2007-03-16 17:37:56
好
回复
1
电脑版
Page created in 0.0625 seconds width 2 queries.