标题: 单片机时钟程序数码管显示会闪烁,怎么才可以解决闪烁问题啊 [打印本页]

作者: 1431936576    时间: 2019-5-15 10:05
标题: 单片机时钟程序数码管显示会闪烁,怎么才可以解决闪烁问题啊
#include "reg51.h"
typedef unsigned int u16;
typedef unsigned char u8;
int shi=0,fen=0,s0=0,s1=0,bittime=0,bitdisplay=0;
unsigned char Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//P2=Tab[s1];P3=0Xef;
void delay(u16 i)
{
while(i--);
}

void timer0(void) interrupt 1  using 0
{
TH0=(65536-50000)/256;TL0=(65536-50000)/256;
  switch(bitdisplay)
  {
    case 0:P2=Tab[s0];P3=0Xdf;break;
     case 1:P2=Tab[s1];P3=0Xef;break;
   
  
  }
  bitdisplay++;
  bittime++;
  if(bitdisplay==2){bitdisplay=0;}
  
}

void main(void)
{

  TMOD=0X01;TH0=(65536-50000)/256;TL0=(65536-50000)/256;
  EA=1;ET0=1;TR0=1;
  while(1)
  {
  
  if(bittime==20)
     {
   bittime=0;
    s0++;
   }
   if(s0==10)
     {
    s0=0;
     s1++;
   
   }
  }
}


作者: wulin    时间: 2019-5-15 12:28
本帖最后由 wulin 于 2019-5-15 16:40 编辑

把定时器中断周期设置由50ms改为1~5ms即可消除闪烁
作者: jmkl128    时间: 2019-5-15 17:49
TH0=(65536-50000)/256;TL0=(65536-50000)/256;
这是刷新时间,50ms一次,太长了,改为TH0=(65536-5000)/256;TL0=(65536-5000)%256;或者更小
作者: fengyou    时间: 2019-5-15 22:02
延时长一点试试
作者: liushangming    时间: 2019-5-16 14:39
消影,中断时间变短
作者: 达达尼安    时间: 2019-5-16 15:37
现实前要有消影操作就好了。
作者: zsj150    时间: 2019-5-16 15:53
加入消影,然后把终端的时间变短点就好了
作者: 三感    时间: 2019-5-16 16:07
延时函数不能设置太长,要短
作者: madao_kang    时间: 2019-5-16 17:44
中断时间改短啊,要不是肯定会闪烁的,通常每个com有100hz差不多了
作者: 酸葡萄    时间: 2019-5-16 18:19
改一下延迟
作者: 雨落    时间: 2019-5-20 23:58
延时过短,也可能是电压不稳




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1