打印

关于数码管显示的问题,求效率比较高的算法!

[复制链接]
3267|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Down_Free|  楼主 | 2009-12-23 09:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
比如有一个unsigned int 类型的变量,我需要把他的万位、千位、百位、十位和个位分别求出来,然后放到数码管上去显示,原始程序代码如下:
Disp_Buf[5]  = RightDisp_Data / 10000;        
Disp_Buf[4]  = RightDisp_Data % 10000 / 1000;
Disp_Buf[3]  = RightDisp_Data % 1000 / 100;
Disp_Buf[2]  = RightDisp_Data % 100 / 10;     
Disp_Buf[1]  = RightDisp_Data % 10;
问有没有简易的算法,或者效率更高一点的算法,来实现该功能!

相关帖子

沙发
xwj| | 2009-12-23 10:13 | 只看该作者
本帖最后由 xwj 于 2009-12-23 10:14 编辑

双字节(unsigned int )的论坛上有早前讨论过并优化算法的帖子和程序,你自己去搜索下。

主要原理是移位到1024,然后适当补差

使用特权

评论回复
板凳
Down_Free|  楼主 | 2009-12-23 17:01 | 只看该作者
从网络上搜了一下Hex转BCD的程序,在Wave6000上仿真了一下,感觉不如我的程序效率高。

使用特权

评论回复
地板
jaylondon| | 2009-12-23 19:35 | 只看该作者
我一直都是这么写的.
各位写的 我都没怎么看明白>...

使用特权

评论回复
5
QuakeGod| | 2009-12-24 00:43 | 只看该作者
,二进制码转压缩BCD码,用加法调整指令DA,比除法快几个数量级,
具体实现原理就是数据向左移位,高位到进位标志C,
而C继续向左移位,进入一个新的,空的24位临时空间,而这里的向左移位,不用移位的方法,也不用乘2法,而采用自身相加并加进位标志的方法,相加后,进行压缩BCD数加法调整,即DA指令,如此循环,直到16位都移完,在新的临时空间里就是一个压缩BCD码表示的数了。

使用特权

评论回复
6
QuakeGod| | 2009-12-24 00:45 | 只看该作者
参考程序如下。
bintobcd16:
        ;in, r2,r3
        ;out r4,r5,r6
        clr  a
        mov  r4,a
        mov  r5,a
        mov  r6,a
        mov  r7,#16
bintobcd16re1:
        mov  a,r2
        rlc  a
        mov  r2,a
        mov  a,r3
        rlc  a
        mov  r3,a
        mov  a,r4
        addc a,r4
        da   a
        mov  r4,a
        mov  a,r5
        addc a,r5
        da   a
        mov  r5,a
        mov  a,r6
        addc a,r6
        da   a
        mov  r6,a
        djnz r7,bintobcd16re1
        ret

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

24

帖子

1

粉丝