有个问题必须先核实,这个16位二进制数是有符号数还是无符号数?这个问题影响到电路的具体设计,因为你需要一个除法器,关于除法器的设计自行去搜索,最简单的是原码加减交叉除法器。
有了除法器,下面开始转换。
一,16位二进制数除以10,将得到的余数取低四位,得到第一个BCD码。
二,将上次除法运算的商再除以10,取余数低4位,得到第二个BCD码。
依次类推,直到商小于10,除法就做完了。16位二进制能表示的最大数是65535,所以你需要进行五次除法运算。结果是五个bcd码,一共有20位。因为你只显示两个BCD,所以将高12位的信号用或门连起来,作为溢出信号,输出给bcd码led,当溢出信号为1时,led显示E,表示错误。
说了老半天,想起你可能是说的软件实现。其实基本过程差不多,就是做除法。至于如何压缩BCD码,你可以用表示高位的bcd码乘以16或左移4位,然后与表示低位的BCD码做按位或运算,就能得到压缩的BCD码。
在软件中如何显示压缩的BCD码呢?得设计一个译码模块,先将的压缩BCD码扩展成8位一个,过程与上面相反。弄好后,然后和00110000做按位或运算,就能得到这个BCD码的ASCII码。