差别
这里会显示出您选择的修订版和当前版本之间的差别。
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); |