40130064 发表于 2010-6-4 14:40:55

高手指点下25位二进制转BCD码的方法(就是用数码管显示)

以前单片机我多除几次能弄出来 VHDL怎么弄?

longquan 发表于 2010-6-4 15:10:32

你直接十进制累加

wajlh 发表于 2010-6-4 17:14:48

移位做除法呗

flybabys 发表于 2010-6-10 09:22:34

回复【楼主位】40130064
-----------------------------------------------------------------------

使用俗称的移位加3法则,规则是:
1、将该二进制数左移一位;
2、对于25位的二进制数,最大8位十进制数,从千万位开始,分别是千万,百万,十万,万,千,百,十,个位,所以如果转换为BCD码,共需要32位二进制序列缓冲,每4位为一组,按上述顺序排列;
3、如果移位后,该组的数据如果大于等于5,则对该组数据加3处理;
4、左移一位;
5、回第三步循环,直到所有数据移位完毕
看下表的一个8位二进制转BCD,引申一下即可,原理是一样的
Operation | Hundreds|   Tens|Units|   Binary      |
HEX       |         |         |         |       F F         |
Start   |         |         |         |   1 1 1 1 1 1 1 1 |
Shift1    |         |         |         | 1 1 1 1 1 1 1 1   |
Shift2    |         |         |       1 | 1 1 1 1 1 1 1   |
Shift3    |         |         |   1 1 1 | 1 1 1 1 1         |
Add3      |         |         | 1 0 1 0 | 1 1 1 1 1         |
Shift4    |         |       1 | 0 1 0 1 | 1 1 1 1         |
Add3      |         |       1 | 1 0 0 0 | 1 1 1 1         |
Shift5    |         |   1 1 | 0 0 0 1 | 1 1 1             |
Shift6    |         |   1 1 0 | 0 0 1 1 | 1 1               |
Add3      |         | 1 0 0 1 | 0 0 1 1 | 1 1               |
Shift7    |       1 | 0 0 1 0 | 0 1 1 1 | 1               |
Add3      |       1 | 0 0 1 0 | 1 0 1 0 | 1               |
Shift8    |   1 0 | 0 1 0 1 | 0 1 0 1 |                   |
BCD       |2      |   5   |    5    |                   |

注:表格对不齐的话复制到文本文档里即可,我处理了几遍在坛子里就是搞不定!

40130064 发表于 2010-6-10 09:51:41

回复【3楼】flybabys
-----------------------------------------------------------------------

相当详细 方法看懂了,原理还没想通! 谢谢

另外还有个问题 这样写大概要多少宏单元?太多的话就不现实了.

flybabys 发表于 2010-6-11 18:40:53

回复【4楼】40130064
-----------------------------------------------------------------------

我用了96个,可能算比较多的了,看你的写法了!

luojinsheng 发表于 2011-3-3 18:33:05

这个办法太好,理解了

cxlspp 发表于 2011-5-23 13:22:48

回复【3楼】flybabys
回复【楼主位】40130064   
-----------------------------------------------------------------------
使用俗称的移位加3法则,规则是:
1、将该二进制数左移一位;
2、对于25位的二进制数,最大8位十进制数,从千万位开始,分别是千万,百万,十万,万,千,百,十,个位,所以如果转换为bcd码,共需要32位二进制序列缓冲,每4位为一组,按上述顺序排列;
3、如果移位后,该组的数据如果大于等于5,则对该组数据加3处理;
4、左移一位;
5、回第三步循环,直到所有数据移位完毕
看下表的一个8位二进制转bcd,引申一下即可,原理是一样的
operation | hundreds|   tens|units|   binary      |
hex       |         | ......
-----------------------------------------------------------------------

茅塞顿开...

yywin 发表于 2011-5-23 15:13:06

学习

NJ8888 发表于 2011-5-23 15:39:18

我在本坛发过VHDL代码,不过我的是16位BIN转20位BCD

NJ8888 发表于 2011-5-23 15:43:25

http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4215535&bbs_page_no=1&search_mode=3&search_text=888888888888&bbs_id=9999

chahu1227 发表于 2011-10-20 16:20:04

感谢flybabys和888888888888,非常感谢!

zjsdlt2013 发表于 2014-9-26 19:58:48


请问楼主用DS12C887做数码管时钟,怎么把BCD码转为十进制数在数码管上显示出来?
页: [1]
查看完整版本: 高手指点下25位二进制转BCD码的方法(就是用数码管显示)