找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3129|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

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

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:71407 發(fā)表于 2014-12-31 00:03 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  1. 約160個(gè)周期,頂尖高手的才70多個(gè)周期。(最后附)
  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. 這個(gè)才70多周期
  35. void show_value(unsigned int x)
  36. {
  37.   unsigned char i,j,k;    //臨時(shí)變量
  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;                       //分離得到的個(gè)(1)位
  63. }
復(fù)制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表