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