高手指点下25位二进制转BCD码的方法(就是用数码管显示)
以前单片机我多除几次能弄出来 VHDL怎么弄? 你直接十进制累加 移位做除法呗 回复【楼主位】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 | |
注:表格对不齐的话复制到文本文档里即可,我处理了几遍在坛子里就是搞不定! 回复【3楼】flybabys
-----------------------------------------------------------------------
相当详细 方法看懂了,原理还没想通! 谢谢
另外还有个问题 这样写大概要多少宏单元?太多的话就不现实了. 回复【4楼】40130064
-----------------------------------------------------------------------
我用了96个,可能算比较多的了,看你的写法了! 这个办法太好,理解了 回复【3楼】flybabys
回复【楼主位】40130064
-----------------------------------------------------------------------
使用俗称的移位加3法则,规则是:
1、将该二进制数左移一位;
2、对于25位的二进制数,最大8位十进制数,从千万位开始,分别是千万,百万,十万,万,千,百,十,个位,所以如果转换为bcd码,共需要32位二进制序列缓冲,每4位为一组,按上述顺序排列;
3、如果移位后,该组的数据如果大于等于5,则对该组数据加3处理;
4、左移一位;
5、回第三步循环,直到所有数据移位完毕
看下表的一个8位二进制转bcd,引申一下即可,原理是一样的
operation | hundreds| tens|units| binary |
hex | | ......
-----------------------------------------------------------------------
茅塞顿开... 学习 我在本坛发过VHDL代码,不过我的是16位BIN转20位BCD http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4215535&bbs_page_no=1&search_mode=3&search_text=888888888888&bbs_id=9999 感谢flybabys和888888888888,非常感谢!
请问楼主用DS12C887做数码管时钟,怎么把BCD码转为十进制数在数码管上显示出来?
页:
[1]