CAN总线接收数据通过数码管显示出来,可是数码管显示闪烁。求大神解答。
下面是数码管显示程序:
void delay(unsigned char count) //delay
{
unsigned char i;
while(count)
{
i=200;
while(i>0)
i--;
count--;
}
}
void display18B20(unsigned char temp,unsigned char temp2)
{
unsigned char A1,A2;
//ser=temp/10; //分离出三位要显示的数字
SBUF=temp;
A1=temp/10;
A2=temp%10;
if(temp<10){low=20;} //设置温度显示下限
if(temp>35){high=28;} //设置温度显示上限
display[3]=A1;
display[2]=A2&0x7f;
display[1]=temp2;
display[0]=12;
P1=table[A1]; //显示百位
P2_0=1;//选通第一位数码管的阳极位选端,即给数码管的共阳极供电
P2_1=1;//选通第二位数码管的阳极位选端,即给数码管的共阳极供电
P2_2=1;//选通第一位数码管的阳极位选端,即给数码管的共阳极供电
P2_3=0;//选通第二位数码管的阳极位选端,即给数码管的共阳极供电
delay(1);
P1=table[A2]&0x7f; //显示十位 带小数点的
P2_0=1;//选通第一位数码管的阳极位选端,即给数码管的共阳极供电
P2_1=1;//选通第二位数码管的阳极位选端,即给数码管的共阳极供电
P2_2=0;//选通第三位数码管的阳极位选端,即给数码管的共阳极供电
P2_3=1;//选通第四位数码管的阳极位选端,即给数码管的共阳极供电
delay(1);
P1=table[temp2]; //显示十位 带小数点的
P2_0=1;
P2_1=0;
P2_2=1;
P2_3=1;
delay(1);
P1=table[12]; //c
P2_0=0;
P2_1=1;
P2_2=1;
P2_3=1;
delay(1);
}
------解决思路----------------------
调整下delay时间试试
先试下减小
------解决思路----------------------
数码显示要想不闪烁,要注意刷新率,可以放在50Hz以上,也就是每一个数码管都能保证每秒点亮50次
你在子程序里刷新不行的,刷新率没有保障,任何其它程序运行时间数码管都不能刷新
正确做法是:
显示子程序只计算数据,放到变量中,不负责实际点亮
单独做一个定式中断程序负责刷新,各个位轮流显示,每次进中断关闭上一位显示,打开下一位显示