关于led显示小数点有时出错,解决方法是将延迟函数移到switch后面,但是为什么?
错误代码:
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;}}}
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);}}//延迟加后面,正常了