目的是用在单片机数码管显示,高位清零,本来的代码能用,但是一个数如果是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 上传
楼上几位写得都比较好呀.感觉单片机中,LZ这种写法特费空间呀
为什么我觉得这个函数有点看不懂啊?
如果数据刚好是10的倍数,比如说是12000000,那最后显示只能是:“1 2 _ _ _ _ _ _”而不是应该显示的“12000000”。
其中,“_ ”代表消隐。
感觉问题很严重,不知道是我没分析明白还是确实有问题。
上面的几个程序段都是把0全干掉啊,
请注意分析本帖中出现的所有代码,除7楼外任何一楼中所出现的代码都不会把有效位上的“0”给消隐、而只会消隐高位无效“0”。
按照7楼的代码来执行(把代码中赋给 i 的初值由7改为8之后),结果将会是如下两种情况:
参数为0,则8个数码管均不显示;
参数非0,则8个数码管均有显示,低位显示有效数字、高位显示无效“0”。
一周热门 更多>