C语言求助,这个函数能有简单点的写法吗?想蒙住了. 求指点.

2020-02-02 09:19发布

目的是用在单片机数码管显示,高位清零,本来的代码能用,但是一个数如果是980,转换后是00000980,就想把高位是零的消掉.这是很笨的办法.所以请教高手能否简化写法.
uint32 定义为 无符号32位整数.


void BCDDataConversion(uint32 Bign)
{


    if (0<=Bign<10){//
    ledcache[7]= leddatacl[Bign%10];   
    ledcache[6]= 0x00;
    ledcache[5]= 0x00;
    ledcache[4]= 0x00;
    ledcache[3]= 0x00;
    ledcache[2]= 0x00;
    ledcache[1]= 0x00;
    ledcache[0]= 0x00;
    }
    else if (10<=Bign<100){
    ledcache[7]= leddatacl[Bign%10];   
    ledcache[6]= leddatacl[Bign/10%10];
    ledcache[5]= 0x00;
    ledcache[4]= 0x00;
    ledcache[3]= 0x00;
    ledcache[2]= 0x00;
    ledcache[1]= 0x00;
    ledcache[0]= 0x00;
    } else if (100<=Bign<1000){
    ledcache[7]= leddatacl[Bign%10];   
    ledcache[6]= leddatacl[Bign/10%10];
    ledcache[5]= leddatacl[Bign/100%10];
    ledcache[4]= 0x00;
    ledcache[3]= 0x00;
    ledcache[2]= 0x00;
    ledcache[1]= 0x00;
    ledcache[0]= 0x00;
    }else if (1000<=Bign<10000){
    ledcache[7]= leddatacl[Bign%10];        
    ledcache[6]= leddatacl[Bign/10%10];
    ledcache[5]= leddatacl[Bign/100%10];
    ledcache[4]= leddatacl[Bign/1000%10];
    ledcache[3]= 0x00;
    ledcache[2]= 0x00;
    ledcache[1]= 0x00;
    ledcache[0]= 0x00;
    }else if (10000<=Bign<100000){
    ledcache[7]= leddatacl[Bign%10];        
    ledcache[6]= leddatacl[Bign/10%10];
    ledcache[5]= leddatacl[Bign/100%10];
    ledcache[4]= leddatacl[Bign/1000%10];
    ledcache[3]= leddatacl[Bign/10000%10];
    ledcache[2]= 0x00;
    ledcache[1]= 0x00;
    ledcache[0]= 0x00;
    }else if (100000<=Bign<1000000){
    ledcache[7]= leddatacl[Bign%10];   
    ledcache[6]= leddatacl[Bign/10%10];
    ledcache[5]= leddatacl[Bign/100%10];
    ledcache[4]= leddatacl[Bign/1000%10];
    ledcache[3]= leddatacl[Bign/10000%10];
    ledcache[2]= leddatacl[Bign/100000%10];
    ledcache[1]= 0x00;
    ledcache[0]= 0x00;
    }else if (1000000<=Bign<10000000){
    ledcache[7]= leddatacl[Bign%10];   
    ledcache[6]= leddatacl[Bign/10%10];
    ledcache[5]= leddatacl[Bign/100%10];
    ledcache[4]= leddatacl[Bign/1000%10];
    ledcache[3]= leddatacl[Bign/10000%10];
    ledcache[2]= leddatacl[Bign/100000%10];
    ledcache[1]= leddatacl[Bign/1000000%10];
    ledcache[0]= leddatacl[Bign/10000000%10];
    ledcache[0]= 0x00;
    }else if (10000000<=Bign<100000000){
    ledcache[7]= leddatacl[Bign%10];        
    ledcache[6]= leddatacl[Bign/10%10];
    ledcache[5]= leddatacl[Bign/100%10];
    ledcache[4]= leddatacl[Bign/1000%10];
    ledcache[3]= leddatacl[Bign/10000%10];
    ledcache[2]= leddatacl[Bign/100000%10];
    ledcache[1]= leddatacl[Bign/1000000%10];
    ledcache[0]= leddatacl[Bign/10000000%10];
    }   
    else Bign=0;
}


这个函数能有简单点的写法吗?想蒙住了.  求指点.
补上开发板图片
IMG_20121107_004248_0.jpg (740.3 KB, 下载次数: 0) 下载附件 2012-11-7 00:50 上传
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
28条回答
uli123
1楼-- · 2020-02-03 01:01
 精彩回答 2  元偷偷看……
nihao_x
2楼-- · 2020-02-03 05:03
BXAK 发表于 2012-11-7 11:53
void cccc(uint32 Bign)
{
        unsigned char i,b0,dat;

谢谢l, 你的代码不错.
eduhf_123
3楼-- · 2020-02-03 08:24
nihao_x 发表于 2012-11-8 00:44
谢谢l, 你的代码不错.


他的代码问题很严重,数组的下标和循环边界有问题,最后只能访问到数组下标为0~6的元素,而下标为7的元素将没有办法访问到,直接使用将引发非预料的结果。

如果要使用他的代码,需要你自己重新设计循环控制部分。
BXAK
4楼-- · 2020-02-03 09:49
nihao_x 发表于 2012-11-8 00:44
谢谢l, 你的代码不错.

感谢10楼提醒。
没注意看,写成7位数码管了,而你是8位数码管,把 i=7 改成 i=8 就好
nihao_x
5楼-- · 2020-02-03 15:30
eduhf_123 发表于 2012-11-8 00:59
他的代码问题很严重,数组的下标和循环边界有问题,最后只能访问到数组下标为0~6的元素,而下标为7的元素 ...

  呵呵. 这问题自己解决了,  没反应上来.  
downtoearth
6楼-- · 2020-02-03 18:53
 精彩回答 2  元偷偷看……

一周热门 更多>