没有最快,只有更快,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;
}
这货自带硬件除法器吗!
页:
[1]