找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6413|回复: 10
收起左侧

单片机时钟程序数码管显示会闪烁,怎么才可以解决闪烁问题啊

[复制链接]
ID:333716 发表于 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++;
   
   }
  }
}

回复

使用道具 举报

ID:213173 发表于 2019-5-15 12:28 | 显示全部楼层
本帖最后由 wulin 于 2019-5-15 16:40 编辑

把定时器中断周期设置由50ms改为1~5ms即可消除闪烁
回复

使用道具 举报

ID:67356 发表于 2019-5-15 17:49 | 显示全部楼层
TH0=(65536-50000)/256;TL0=(65536-50000)/256;
这是刷新时间,50ms一次,太长了,改为TH0=(65536-5000)/256;TL0=(65536-5000)%256;或者更小
回复

使用道具 举报

ID:539359 发表于 2019-5-15 22:02 | 显示全部楼层
延时长一点试试
回复

使用道具 举报

ID:52944 发表于 2019-5-16 14:39 | 显示全部楼层
消影,中断时间变短
回复

使用道具 举报

ID:539898 发表于 2019-5-16 15:37 | 显示全部楼层
现实前要有消影操作就好了。
回复

使用道具 举报

ID:539916 发表于 2019-5-16 15:53 | 显示全部楼层
加入消影,然后把终端的时间变短点就好了
回复

使用道具 举报

ID:530977 发表于 2019-5-16 16:07 | 显示全部楼层
延时函数不能设置太长,要短
回复

使用道具 举报

ID:144473 发表于 2019-5-16 17:44 | 显示全部楼层
中断时间改短啊,要不是肯定会闪烁的,通常每个com有100hz差不多了
回复

使用道具 举报

ID:537018 发表于 2019-5-16 18:19 | 显示全部楼层
改一下延迟
回复

使用道具 举报

ID:540911 发表于 2019-5-20 23:58 | 显示全部楼层
延时过短,也可能是电压不稳
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表