找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2824|回复: 0
打印 上一主题 下一主题
收起左侧

unsigned int to BCD 自己想的,但是效率还是比顶尖高手慢一半

[复制链接]
跳转到指定楼层
楼主
ID:71407 发表于 2014-12-31 00:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. 约160个周期,顶尖高手的才70多个周期。(最后附)
  2. /*    unsigned char temp;
  3. D1=D2=D3=D4=D5=0;
  4. temp=((unsigned char *)&value)[0];
  5. if(temp&0x80){D1+=3;D2+=2;D3+=7;D4+=6;D5+=8;}
  6. if(temp&0x40){D1+=1;D2+=6;D3+=3;D4+=8;D5+=4;}
  7. if(temp&0x20){D2+=8;D3+=1;D4+=9;D5+=2;}
  8. if(temp&0x10){D2+=4;D3+=0;D4+=9;D5+=6;}
  9. if(temp&0x08){D2+=2;D3+=0;D4+=4;D5+=8;}
  10. if(temp&0x04){D2+=1;D3+=0;D4+=2;D5+=4;}
  11. if(temp&0x02){D3+=5;D4+=1;D5+=2;}
  12. if(temp&0x01){D3+=2;D4+=5;D5+=6;}
  13. temp=((unsigned char *)&value)[1];
  14. if(temp&0x80){D3+=1;D4+=2;D5+=8;}
  15. if(temp&0x40){D4+=6;D5+=4;}
  16. if(temp&0x20){D4+=3;D5+=2;}
  17. if(temp&0x10){D4+=1;D5+=6;}
  18. if(temp&0x08){D5+=8;}
  19. if(temp&0x04){D5+=4;}
  20. if(temp&0x02){D5+=2;}
  21. if(temp&0x01){D5+=1;}

  22. /* while(D5>=10){D5-=10;D4++;}
  23. while(D4>=10){D4-=10;D3++;}
  24. while(D3>=10){D3-=10;D2++;}
  25. while(D2>=10){D2-=10;D1++;}
  26. if(D5>=10){D4+=D5/10;D5=D5%10;}
  27. if(D4>=10){D3+=D4/10;D4=D4%10;}
  28. if(D3>=10){D2+=D3/10;D3=D3%10;}
  29. if(D2>=10){D1+=D2/10;D2=D2%10;}

  30. while(value>=1000){D1++;value=value-1000;}
  31. while(value>=100){D2++;value=value-100;}
  32. while(value>=10){D3++;value=value-10;}
  33. D4=value;*/


  34. 这个才70多周期
  35. void show_value(unsigned int x)
  36. {
  37.   unsigned char i,j,k;    //临时变量
  38.   k = x;
  39.   x = x >> 2;
  40.   i = x >> 8;
  41.   j = (i + i + i) << 1;
  42.   if (i > 41)
  43.     {
  44. i++;
  45. j+=6;
  46. }
  47.   j = j + x;
  48.   if ((unsigned char)x > j )
  49.     {
  50. i++;
  51. j+=6;
  52. }
  53.   if (j > 249)
  54.     {
  55. i++;
  56. j+=6;
  57. }
  58.   D1 = i / 10;                  //分离得到的万(10000)位
  59.   D2 = B;                       //分离得到的千(1000)位
  60.   D3 = j / 25;                  //分离得到的百(100)位
  61.   D4 = (B<<2 | k&3) / 10;       //分离得到的十(10)位
  62.   D5 = B;                       //分离得到的个(1)位
  63. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表