关于数码管显示闪烁问题

saddfdsf 2015-06-03 01:59:51
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);

}
...全文
2731 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
saddfdsf 2015-06-04
  • 打赏
  • 举报
回复
引用 1 楼 wangfan027 的回复:
调整下delay时间试试 先试下减小
谢谢回复!
saddfdsf 2015-06-04
  • 打赏
  • 举报
回复
引用 2 楼 u012586257 的回复:
数码显示要想不闪烁,要注意刷新率,可以放在50Hz以上,也就是每一个数码管都能保证每秒点亮50次 你在子程序里刷新不行的,刷新率没有保障,任何其它程序运行时间数码管都不能刷新 正确做法是: 显示子程序只计算数据,放到变量中,不负责实际点亮 单独做一个定式中断程序负责刷新,各个位轮流显示,每次进中断关闭上一位显示,打开下一位显示
谢谢,已经解决了!
mangoalx 2015-06-03
  • 打赏
  • 举报
回复
数码显示要想不闪烁,要注意刷新率,可以放在50Hz以上,也就是每一个数码管都能保证每秒点亮50次 你在子程序里刷新不行的,刷新率没有保障,任何其它程序运行时间数码管都不能刷新 正确做法是: 显示子程序只计算数据,放到变量中,不负责实际点亮 单独做一个定式中断程序负责刷新,各个位轮流显示,每次进中断关闭上一位显示,打开下一位显示
dceacho 2015-06-03
  • 打赏
  • 举报
回复
调整下delay时间试试 先试下减小

27,373

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧