关于led显示小数点有时出错,解决办法是将延迟函数移到switch后面,但是为什么
关于led显示小数点有时出错,解决方法是将延迟函数移到switch后面,但是为什么?
错误代码:
正确代码:
求解啊!!!!
------解决方案--------------------
这个理解下逻辑就可以了
一个是先改变八段,再位选,然后延时,正确显示
另一个则是改变八段后延时,视觉停留在这个延时时,但是这个是上一次的位选
错误代码:
- C/C++ code
void display(){ int i; LedOut[0]=Disp_Tab[dat[0]%10000/1000]; LedOut[1]=Disp_Tab[dat[0]%1000/100]|0x80; LedOut[2]=Disp_Tab[dat[0]%100/10]; LedOut[3]=Disp_Tab[dat[0]%10]|0x80; LedOut[4]=Disp_Tab[dat[1]%10000/1000]|0x80; LedOut[5]=Disp_Tab[dat[1]%1000/100]; LedOut[6]=Disp_Tab[dat[1]%100/10]|0x80; LedOut[7]=Disp_Tab[dat[1]%10]; for(i=0;i<8;i++){ P0=LedOut[i]; delay(100);//延迟加载这,小数点显示错误,乱了(小数点本来应该显示在2,4,5,7位,实际显示在1,4,6,7位,就是乱了!!) switch(i){ case 0:pc=0;pb=0;pa=0;break; case 1:pc=0;pb=0;pa=1;break; case 2:pc=0;pb=1;pa=0;break; case 3:pc=0;pb=1;pa=1;break; case 4:pc=1;pb=0;pa=0;break; case 5:pc=1;pb=0;pa=1;break; case 6:pc=1;pb=1;pa=0;break; case 7:pc=1;pb=1;pa=1;break;} }}
正确代码:
- C/C++ code
void display(){ int i; LedOut[0]=Disp_Tab[dat[0]%10000/1000]; LedOut[1]=Disp_Tab[dat[0]%1000/100]|0x80; LedOut[2]=Disp_Tab[dat[0]%100/10]; LedOut[3]=Disp_Tab[dat[0]%10]|0x80; LedOut[4]=Disp_Tab[dat[1]%10000/1000]|0x80; LedOut[5]=Disp_Tab[dat[1]%1000/100]; LedOut[6]=Disp_Tab[dat[1]%100/10]|0x80; LedOut[7]=Disp_Tab[dat[1]%10]; for(i=0;i<8;i++){ P0=LedOut[i]; switch(i){ case 0:pc=0;pb=0;pa=0;break; case 1:pc=0;pb=0;pa=1;break; case 2:pc=0;pb=1;pa=0;break; case 3:pc=0;pb=1;pa=1;break; case 4:pc=1;pb=0;pa=0;break; case 5:pc=1;pb=0;pa=1;break; case 6:pc=1;pb=1;pa=0;break; case 7:pc=1;pb=1;pa=1;break;} delay(100);}}//延迟加后面,正常了
求解啊!!!!
------解决方案--------------------
这个理解下逻辑就可以了
一个是先改变八段,再位选,然后延时,正确显示
另一个则是改变八段后延时,视觉停留在这个延时时,但是这个是上一次的位选