单片机交通灯数码管是如何工作的?如何显示相应的数字?(具体点,谢谢!)
发布网友
发布时间:2022-04-30 04:02
我来回答
共2个回答
热心网友
时间:2023-10-11 02:46
voiddisplay(uintph_in)
{uchari=0;//临时计数变量<br/><br/>ucharj=0;//ph_in的位数<br/><br/>ucharselect_bit=0;//位选,用于数码管显示do{//注do-while1<br/><br/>cur_buf[i]=ph_in%10;<br/><br/>i++;<br/><br/>j=i;<br/><br/>}while(ph_in=ph_in/10);//当高位为零时,结束循环i=0;
select_bit=0xfe;//选择个位数码管
do//注do-while2
{P1=tab[*p];//选定的数码管显示相应的数字<br/><br/>P3=select_bit;//选择相应的数码管<br/><br/>dl_ms();//保持<br/><br/>select_bit=(select_bit<<1)+1;//从最右边一位开始显示,循环左移,用于选择下一个数码管显示<br/><br/>p++;<br/><br/>i++;<br/><br/>}while(i<j);
p=cur_buf;//指针归位
return;}这程序不难理解吧,只是作者的算法实现比较繁琐。
简单讲讲,有不懂的地方再解释吧。//注do-while1:这个while循环是用来将压力数据进行位数拆分,因为预先不知道压力的位数,所以采用了一个算法自动判断需要拆分的位数。比如
ph_in=5时循环的结果就是cur_buf[0]=5j=1
ph_in=56时循环的结果就是cur_buf[0]=6andcur_buf[1]=5j=2
ph_in=156时循环的结果就是cur_buf[0]=6andcur_buf[1]=5andcur_buf[2]=1j=3
ph_in=1156时循环的结果就是cur_buf[0]=6andcur_buf[1]=5andcur_buf[2]=1andcur_buf[3]=1j=4
//注do-while2:这个while循环是用来将拆分的压力数据进行显示,因为预先不知道压力的位数,所以采用了一个算法自动判断需要显示的位数。比如
j=1时只显示个位
j=2时只显示个位十位
j=3时只显示个位十位百位
热心网友
时间:2023-10-11 02:47
用程序语言控制,一般是由一块可编程集成电路控制,由电脑输入指令,相对的按照指令执行。