差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

binary2bcd [2021/10/10 22:42]
gongyu 创建
binary2bcd [2021/10/10 22:53] (当前版本)
gongyu
行 1: 行 1:
 ## 二进制到BCD码转换 ## 二进制到BCD码转换
  
 +### 1. 理论基础
 +在单片机里面,如:显示个温度值,这时,要取一个数的个位、十位、百位,可以用/​和 %(求商和求余)来解决。
 +但是,在FPGA里面用求商和求余将会非常消耗资源,这样就必须用到二进制转BCD码了,这里介绍一种简单的加3移位算法。
 +注:B代表二进制,D代表十进制,0x代表十六进制,BCD为BCD码,​下同。
 +
 +{{ :b2bcd.png |}}
 +
 +1、加3移位法
 +
 +以二进制数(0000_101 Xn)B=(10+Xn)D为例,
 +
 +串行输入三位后,(0101)B=5(D)
 +
 +左移一位后:(0000_101Xn)B=(10+Xn)D
 +
 +如果(0000_101Xn)B直接输出显示为:
 +
 +当Xn=0时,0000_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. 代码
 <code python> <code python>
 module binary2bcd(binary_data,​tens,​ones);​ module binary2bcd(binary_data,​tens,​ones);​