十進制與BCD碼轉換的算法詳解

手頭上在做的項目需要用到ds1302實時時鐘,ds1302讀出來的數據是BCD碼,需要轉換,寫入也是。

BCD碼

BCD是指用二進制來表示十進制數的編碼,即用4位二進制來表示一位十進制數,因此4位二進制數表示最大的十進制數9(1001),隻取十六個數中的十個數。

比如:

BCD碼:0x99(153),該BCD碼轉換成十進制是99.

算法原理

十進制是逢十進一,而十六進制是逢十六進一,它們之間的每次進位差 6 6 ,所以一個十進制數要轉換成BCD碼,要先算清多進位的位數,比如,十進制99″ role=”presentation”>99進位瞭 99/10=9 99 / 10 = 9 次,每次進位和十六進制進位相比差 6 6 ,所以一共差瞭9×6=54″ role=”presentation”>9×6=54,即 99+54=153 99 + 54 = 153 (BCD)。BCD碼轉化成十進制碼也一樣。

代碼

static uint8_t BCD2DEC(uint8_t bcd)  
{  
    return (bcd-(bcd>>4)*6);
}  

static uint8_t DEC2BCD(uint8_t dec)  
{  
    return (dec+(dec/10)*6);
} 

總結

本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!

推薦閱讀: