最近在学习使用普中DSP-F28335,以数码管示例代码为基础设计定时器,发现使用定时器中断控制数码管显示时间时,4位数码管的最后一位亮度明显更高,如下图所示:
在每个显示位刷新速率相同的情况下,亮度更高说明点亮时间更长,因此问题应该出在显示代码部分,如下
for(i=0;i<4;i++)
{
HC164SendData(buf[i]);
switch(i)
{
case 0: SEG1_SETH;SEG2_SETL;SEG3_SETL;SEG4_SETL;break;
case 1: SEG1_SETL;SEG2_SETH;SEG3_SETL;SEG4_SETL;break;
case 2: SEG1_SETL;SEG2_SETL;SEG3_SETH;SEG4_SETL;break;
case 3: SEG1_SETL;SEG2_SETL;SEG3_SETL;SEG4_SETH;break;
}
DELAY_US(500);
}
以上为数码管显示源代码(smg.c)中 void SMG_DisplayFloat(float num,unsigned char dotnum) 函数部分,在刷写完第四位后,段选停留在case3,即保持在第4位被点亮状态,直到下次中断产生,数码管开始时下一次刷新。修改方案也很简单,即在每次刷新完成后,将段选置零即可,如下所示
for(i=0;i<4;i++)
{
HC164SendData(buf[i]);
switch(i)
{
case 0: SEG1_SETH;SEG2_SETL;SEG3_SETL;SEG4_SETL;break;
case 1: SEG1_SETL;SEG2_SETH;SEG3_SETL;SEG4_SETL;break;
case 2: SEG1_SETL;SEG2_SETL;SEG3_SETH;SEG4_SETL;break;
case 3: SEG1_SETL;SEG2_SETL;SEG3_SETL;SEG4_SETH;break;
}
DELAY_US(500);
}
SEG1_SETL;SEG2_SETL;SEG3_SETL;SEG4_SETL;