su33691 发表于 2020-2-23 09:38:43

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

//没有最快,只有更快,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为个位要显示的值
                MD3 = U32DATA.buff;
                MD2 = U32DATA.buff;
                MD1 = U32DATA.buff;
                MD0 = U32DATA.buff;
                MD5 = 0;
                MD4 = 10;
               
                OPCON |= 0x01;
                NOP17();
                while(OPCON & 0x01);
               
                U32DATA.buff = MD3;
                U32DATA.buff = MD2;
                U32DATA.buff = MD1;
                U32DATA.buff = MD0;
        //        dat = ((u32)MD3 << 24) | ((u32)MD2 << 16) | ((u16)MD1 << 8) | MD0;
                buff_595 = MD4;                // + 0x30;        //从低位往高位取
               
                if((U32DATA.buff == 0) && (U32DATA.buff == 0))
                {
                        if((u16)U32DATA.num != 0)
                        {
                                ARCON = 0xa0;        //16位除法
                                i++;
                                for(;i < 7;i++)
                                {
                                        MD1 = U32DATA.buff;
                                        MD0 = U32DATA.buff;
                                        MD5 = 0;
                                        MD4 = 10;
                                       
                                        OPCON |= 0x01;
                                        NOP9();
                                        while(OPCON & 0x01);
                                       
                                        U32DATA.buff = MD1;
                                        U32DATA.buff = MD0;
                                       
                                        buff_595 = MD4;                // + 0x30;        //从低位往高位取
                                        if(U32DATA.buff == 0)
                                        {
                                                if(U32DATA.buff != 0)
                                                {
                                                        i++;
                                                        for(;i < 7;i++)
                                                        {
                                                                U32DATA.buff = U32DATA.buff/10;        //8位除法
                                                                buff_595 = B;        // + 0x30;        //从低位往高位取
                                                               
                                                                if(U32DATA.buff == 0)        //高位消隐
                                                                {
                                                                        goto comm;
                                                                        // i++;
                                                                        // for(;i < 7;i++)
                                                                        // {
                                                                                // buff_595 = BLACK;        //消隐
                                                                        // }
                                                                }
                                                        }
                                                       
                                                }
                                                else         //高位消隐
                                                {
                                                        goto comm;
                                                        // i++;
                                                        // for(;i < 7;i++)
                                                        // {
                                                                // buff_595 = BLACK;        //消隐
                                                        // }
                                                }
                                        }
                                }
                        }
                        else //高位消隐
                        {
        comm:                i++;
                                for(;i < 7;i++)
                                {
                                        buff_595 = BLACK;        //消隐
                                }
                                return;
                        }
                }
        }
//        P_SW2 &= ~0x80;
}

xtwhf 发表于 2020-2-23 11:39:53

这货自带硬件除法器吗!
页: [1]
查看完整版本: 没有最快,只有更快,MDU16代码准备ing...