二進位製碼轉BCD碼

2021-07-02 14:54:58 字數 1768 閱讀 9051

在微控制器裡面,如:顯示個溫度值,這時,要取乙個數的個位、十位、百位,可以用/和 %(求商和求餘)來解決。

但是,在fpga裡面用求商和求餘將會非常消耗資源,這樣就必須用到二進位制轉bcd碼了,這裡介紹一種簡單的加3移位演算法。

注:b代表二進位制,d代表十進位制,0x代表十六進製制,bcd

為bcd

碼,下同。

1、加3

移位法

以二進位制數(0000_101 xn

)b=(10+xn)d

為例,序列輸入三位後,(0101)b=5(d)

左移一位後:(000

0_101xn)b=

(10+xn)d

如果(000

0_101xn)

b直接輸出顯示為:

當xn=0

時,000

0_1010=0x0a。此為錯誤的bcd碼。

採用加3

移位法,修正移位結果:

序列輸入三位後,結果大於4

(0101)b

=5(d

) 加3:(0101)b+

(0011)b

=(1000)b

--十進位制表示:

5+3=

8再左移一位後:

(1000xn)

b= (

0001_000xn)

bcd 

對應十進位制顯示:1 xn

每四位bcd

碼對應一位十進位制數,即:(

10+xn)d

,轉換成功

注:xn

為下一位序列輸入的二進位制數。

2、設計思路

這裡一共需要四個模組:計數器、移位器、加法器、暫存器輸出。

分別設計好之後,用狀態機控制它們,就完成了。

3、**結果

注:圖中clk

為時鐘,en

為高電平使能,

rst為高電平復位,

data_in

為輸入的

12位二進位製碼,以十進位制的形式顯示在時序圖;

qout

為輸出的16位

bcd碼,以十六進製制的形式顯示在時序圖,

17個時鐘上公升沿可完成轉換任務。

4、綜合結果

5、難點分析

要搞懂這個加3移位演算法,必須要按照

8位二進位制(

11101011

)轉bcd

過程圖,自己手動推導一下,才容易理解。

此演算法的難點在於,需要把輸入的二進位制數,按照每四個bit來劃分為乙個單元(所以輸入的二進位制數,位寬必須是4的倍數),然後,每個單元都要同時判斷是否大於4,大於就要加3,否則不加.

理解了這個演算法之後,那麼bcd轉二進位制就非常容易了,減3移位即可,減3可以用補碼來解決。

加3移位法只能把整數的二進位製碼轉成整數的bcd碼,小數則不行,要算小數的話,可以先乘以10的n次方,再轉bcd碼。 6、

參考文獻

基於cpld的二進位製碼轉換為二.十進位制(bcd)碼的電路――薑田華

32位二進位制數轉BCD碼

32位二進位制數轉bcd碼 基本思想是逢十進1 module bin bcd 4 clk,a,bww,bqw,baw,bsw,bw,bq,bb,bs,bg input clk input 31 0 a 二進位制輸入資料 output 3 0 bww,bqw,baw,bsw,bw,bq,bb,bs,b...

c 轉bcd碼 BCD碼 十六進製制與十進位制互轉

在做嵌入式軟體的設計中,經常會遇到十六進製制 bcd碼與十進位制之間的轉換,最近做m1卡的應用中,涉及了大量的十六進製制 bcd碼與十進位制之間的轉換。筆者通過對bcd碼 十六進製制 權的理解,輕鬆的實現了他們之間的互換。include include 功能 二進位製取反 輸入 const unsi...

Gray碼 格雷碼 二進位制

以下內容是看了matrix67的關於二進位制的blog link 的一點總結與摘錄。gray碼,中文 格雷碼 是一種特殊的編碼,相鄰兩個格雷碼的二進位制表示中有且僅有一位不同,且 n 階 gray 碼是 0 2 n 1 的乙個排列。n 階 gray 碼可以由 n 1 階 gray 碼映象翻轉之後最前...