请教高手!单片机数码管显示程序。

来源:百度知道 编辑:UC知道 时间:2024/06/15 09:08:59
在显示函数里,将气压值先按位进行分离并
保存到数组, 然后送段码和相应位选就可以显示出
相应的气压值了。具体程序如下:
void display(uint ph in)
{ uchar i = 0 ;
uchar j = 0 ;
uchar select bit = 0 ; / / 位选
do {
cur buf[ i ] = ph in %10 ;
i + + ;
j = i ;
}while (ph in = ph in/ 10) ; / / 当高位为零
时,结束循环
i = 0 ;
select bit = 0xfe ;
do
{ P1 = tab[ * p ] ;
P3 = select bit ;
dl ms () ;
select bit = ( select bit < < 1) + 1 ;
/ / 从最右边一位开始显示,循环左移
p + + ;
i + + ;
}while (i < j) ;
p = cur buf ; / / 指针归位
return ; }
请解释下上面程序,越详细越好!

void display(uint ph_in)
{ uchar i = 0 ; //临时计数变量
uchar j = 0 ; //ph_in的位数
uchar select_bit = 0 ; / / 位选,用于数码管显示

do { //注do-while1
cur_buf[ i ] = ph_in %10 ;
i + + ;
j = i ;
}while (ph_in = ph_in/ 10) ; / / 当高位为零时,结束循环

i = 0 ;
select_bit = 0xfe ; //选择个位数码管
do //注do-while2
{ P1 = tab[ * p ] ; //选定的数码管显示相应的数字
P3 = select_bit ; //选择相应的数码管
dl_ms () ; //保持
select_bit = ( select_bit < < 1) + 1 ; / / 从最右边一位开始显示,循环左移 ,用于选择下一个数码管显示
p + + ;
i + + ;
}while (i < j) ;
p = cur_buf ; / / 指针归位
return ; }

这程序不难理解吧,只是作者的算法实现比较繁琐。
简单讲讲,有不懂的地方再解释吧。

//注do-while1:这个while循环是用来将压力数据进行位数拆分,因为预先不知道压力的位数,所以采用了一个算法自动判

断需要拆分的位数。比如
ph_in=5时循环的结果就是cur_buf[ 0 ]=5 j=1
ph_in=56时循环的结果就是cur_buf[ 0 ]=6 and cur_buf[ 1 ]=5 j=2
ph_in=156时循环的结果就是cur_buf[ 0 ]=6 and cur_buf[ 1 ]=5 and cur_buf[ 2 ]=1 j=3
ph_in=1156时循环的结果就是cur_buf[ 0 ]=6 a