首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

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

2012-09-09 
关于led显示小数点有时出错,解决方法是将延迟函数移到switch后面,但是为什么?错误代码:C/C++ codevoid dis

关于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);}}//延迟加后面,正常了


求解啊!!!!

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

热点排行