请教高手!单片机数码管显示程序。
发布网友
发布时间:2022-06-01 15:01
我来回答
共1个回答
热心网友
时间:2024-10-13 00:33
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 and cur_buf[ 1 ]=5 and cur_buf[ 2 ]=1 and cur_buf[ 3 ]=1 j=4
//注do-while2:这个while循环是用来将拆分的压力数据进行显示,因为预先不知道压力的位数,所以采用了一个算法自动
判断需要显示的位数。比如
j=1时只显示个位
j=2时只显示个位十位
j=3时只显示个位十位百位