完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
` 本帖最后由 雾_盈 于 2016-8-30 09:36 编辑 六位四则运算计算器(6)算法实现二进制转BCD 雾盈 2016-8-28 一、写在前面 之前写过关于数码管十进制显示的一篇文章,但那个转十进制是用了除法取余的数学公式,像下面这样: 但这样的写法在FPGA 里并不可取,因为FPGA 里的硬件资源很宝贵,为了综合出除法器需要消耗大量的加法器,得不偿失,所以我抛弃了那样的写法,用了老师介绍的一个小算法来实现二进制转BCD的 二、 框图 三、什么是BCD 码? 要转BCD码,我们首先应该弄清楚什么是BCD码。 百度百科是这样解释的: BCD码(Binary-Coded Decimal)亦称二进码十进数或二-十进制代码。用4位二进制数来表示1位十进制数中的0~9这10个数码。是一种二进制的数字编码形式,用二进制编码的十进制代码。BCD码这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。 BCD码可分为有权码和无权码两类:有权BCD码有8421码、2421码、5421码,其中8421码是最常用的;无权BCD码有余3码,余3循环码等。 8421 简单点说: BCD码就是使用4位来表达一个十进制数字 例如,十进制数20’D 999999 = 20’B 1111_0100_0010_0011_1111,原本只有20位,现在我们用BCD码去表示这个十进制数, 就是 24’H 9 9 9 9 9 9 = 20’B1001_1001_1001_1001_1001_1001, 每个十进制9 用十六进制的四位去表示,就变成了24位数据。 示意图如下: 四、算法原理 这个算法应用了逐步移位的方式: 第一步:添加一个20位的移位寄存器用作移位寄存 因为有6个数码管显示。 第二步:二进数逐步左移 将需要转换的十进制数以二进制形式逐步左移。 第三步:大四加三 每左移一位,就要让BCD位去和4比较,如果大于4就加上3,如果不大于就继续左移,然后继续和4比较。 第四步:进数全部移完,得到结果。 举个例子:165 (取自教材中的例子) 示意图如下: 这样整个算法讲完,我们来看程序。 五、代码解释 第一段: 这里用状态机写的,闲置状态将待转换十进制存入data_r以备转换之需。 然后跳入下一状态,移位SHIFT 第二段: 加入了一个移位计数器,当移位未满20次时,每移位一次就跳入判断状态ADD,判断每个BCD位是否大于4,大于则加3,否则跳回移位SHIFT状态,继续左移。当移位满20次时,将结果输出。 |
|
相关推荐
|
|
赞!
|
|
|
|
|
|
矩阵4x4个按键,如何把识别结果按编号01-16(十进制)显示在两个七段数码管上?
518 浏览 0 评论
845 浏览 0 评论
1683 浏览 0 评论
454 浏览 0 评论
631 浏览 0 评论
1218 浏览 23 评论
5451 浏览 113 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-3 04:11 , Processed in 0.687350 second(s), Total 74, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号