当前位置: 代码迷 >> 单片机 >> 关于led显示小数点有时出错,解决办法是将延迟函数移到switch后面,但是为什么
  详细解决方案

关于led显示小数点有时出错,解决办法是将延迟函数移到switch后面,但是为什么

热度:41   发布时间:2016-04-28 15:48:34.0
关于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);}}//延迟加后面,正常了


求解啊!!!!

------解决方案--------------------
这个理解下逻辑就可以了
一个是先改变八段,再位选,然后延时,正确显示
另一个则是改变八段后延时,视觉停留在这个延时时,但是这个是上一次的位选
  相关解决方案