amobbs.com 阿莫电子论坛

 找回密码
 注册
搜索
bottom↓
回复: 1

没有最快,只有更快,MDU16代码准备ing...

[复制链接]
(12238654)

打赏出0元收入0元

发表于 2020-2-23 09:38:43 | 显示全部楼层 |阅读模式
//没有最快,只有更快,MDU16代码准备ing...
//本代码采用KEILC51编译,依赖硬件,不考虑移植性
//使用了联合,可产生精简的汇编代码
//使用了goto语句,减少一些重复代码
//因为没有硬件,无法测试,不保证代码的正确性。
//
//
//数码管/LCD显示缓存更新函数
//整数拆分成各位,存入buff_595[]中
//用于8位数码管显示7位数据,最高位为符号(+(消隐)/-)(本函数不处理符号位)
//具有高位0消隐功能
void UPDATA_LED_MDU(u32 dat)
{
        u8 i;
       
//        P_SW2 |= 0x80;
        U32DATA.num = dat;
        ARCON = 0xc0;        //32位除法
       
        //整数拆分成各位
        for(i = 0;i < 7;i ++)
        {        //buff_595[0]为个位要显示的值
                MD3 = U32DATA.buff[0];
                MD2 = U32DATA.buff[1];
                MD1 = U32DATA.buff[2];
                MD0 = U32DATA.buff[3];
                MD5 = 0;
                MD4 = 10;
               
                OPCON |= 0x01;
                NOP17();
                while(OPCON & 0x01);
               
                U32DATA.buff[0] = MD3;
                U32DATA.buff[1] = MD2;
                U32DATA.buff[2] = MD1;
                U32DATA.buff[3] = MD0;
        //        dat = ((u32)MD3 << 24) | ((u32)MD2 << 16) | ((u16)MD1 << 8) | MD0;
                buff_595[i] = MD4;                // + 0x30;        //从低位往高位取
               
                if((U32DATA.buff[0] == 0) && (U32DATA.buff[1] == 0))
                {
                        if((u16)U32DATA.num != 0)
                        {
                                ARCON = 0xa0;        //16位除法
                                i++;
                                for(;i < 7;i++)
                                {
                                        MD1 = U32DATA.buff[2];
                                        MD0 = U32DATA.buff[3];
                                        MD5 = 0;
                                        MD4 = 10;
                                       
                                        OPCON |= 0x01;
                                        NOP9();
                                        while(OPCON & 0x01);
                                       
                                        U32DATA.buff[2] = MD1;
                                        U32DATA.buff[3] = MD0;
                                       
                                        buff_595[i] = MD4;                // + 0x30;        //从低位往高位取
                                        if(U32DATA.buff[2] == 0)
                                        {
                                                if(U32DATA.buff[3] != 0)
                                                {
                                                        i++;
                                                        for(;i < 7;i++)
                                                        {
                                                                U32DATA.buff[3] = U32DATA.buff[3]/10;        //8位除法
                                                                buff_595[i] = B;        // + 0x30;        //从低位往高位取
                                                               
                                                                if(U32DATA.buff[3] == 0)        //高位消隐
                                                                {
                                                                        goto comm;
                                                                        // i++;
                                                                        // for(;i < 7;i++)
                                                                        // {
                                                                                // buff_595[i] = BLACK;        //消隐
                                                                        // }
                                                                }
                                                        }
                                                       
                                                }
                                                else         //高位消隐
                                                {
                                                        goto comm;
                                                        // i++;
                                                        // for(;i < 7;i++)
                                                        // {
                                                                // buff_595[i] = BLACK;        //消隐
                                                        // }
                                                }
                                        }
                                }
                        }
                        else //高位消隐
                        {
        comm:                i++;
                                for(;i < 7;i++)
                                {
                                        buff_595[i] = BLACK;        //消隐
                                }
                                return;
                        }
                }
        }
//        P_SW2 &= ~0x80;
}
(12231384)

打赏出0元收入0元

发表于 2020-2-23 11:39:53 | 显示全部楼层
这货自带硬件除法器吗!
回帖提示: 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子论坛 ( 公安交互式论坛备案:44190002001997 粤ICP备09047143号-1 )

GMT+8, 2020-7-14 01:16

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表