微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 为什么四位数码管时钟亮度不同

为什么四位数码管时钟亮度不同

时间:10-02 整理:3721RD 点击:
新手请教个问题:用STC89C52RC做了个4位数码管(共阳)时钟,有两个问题,一:只有一个数码管很亮其它3个很暗。二:时钟走的很快,跟调试时keil软件上的差别很大。

显示的延时有问题,最亮的那位时间太长了,查一下显示程序的第一位和第四位的延时,可能没有设定好。至于时钟走的很快的问题,是你没算好数值的原故,可以下载“单片机小精灵”来帮忙。

只有一个数码管很亮,其他三个很暗,可以首先通过更换一个数码管来查看是不是数码管本身有问题,再判断四个共阳管脚与单片机连接的电路是否一样(P0口需要加上拉电阻的)
关于时钟走的快,不知道你有没有用DS1302,如果没有用的话,那可能是单片机的定时器程序没有写好
有空可以去小店看看
shop71676727.taobao.com/shop/view_shop.htm?tracelog=twddp

解决数码管亮度不均匀的办法:将数码管扫描放在定时器中断中,并且没进入一次定时器中断只点亮一个数码管。这样就保证了每个数码管的点亮时间相同,亮度也就一样了

亮度不同的问题解决了。可是时间走的还是快,为什么跟KEIL上调试不一样呢?

STC单片机是1T单片机 理论速度是普通51的12倍 实际测试结果大约在7倍左右  另外亮度温度应该是每个数码管发光的时间不一样,这个不能只看延时程序,你得每一步程序都是需要时间的,而且有得很长

哈哈,你说的有道理。实测结果大约是7.4倍左右。

可以给我一个解决数码管亮度不均匀的案例吗?
希望研究一下。

每个数码管扫描的时间不一样啊!

也不是所有情况都是这个原因。

当然可以。在中断程序中使用移位指令,将全局变量进行移位达到扫描的效果即可。
例如一个4位数码管的显示扫描可以这样
unsigned char code num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//0~F,低位为a,阴码,不含高位小数点
unsigned charDIS_ROME[4]={0xc0,0xf9,0xa4,0xb0};//显示缓存区,对应4个数码管
unsigned charDISP=0;//缓存区指针
unsigned charSCANF=0x01;//扫描指针
void LED_SCAN(uchar dat)//位选扫描,高位点亮,仅低4位有效,最低位为LED4
{
  LED1=0x01&dat;  //定义数码管1的位选引脚为LED1,下同
  LED2=0x02&dat;
  LED3=0x04&dat;
  LED4=0x08&dat;
}
void LED_DATA(uchar dat)//段选显示。低位为A,阴码
{
  LEDA=0x01&dat; //定义数码管段选引脚为LEDA,下同
  LEDB=0x02&dat;
  LEDC=0x04&dat;
  LEDD=0x08&dat;
  LEDE=0x10&dat;
  LEDF=0x20&dat;
  LEDG=0x40&dat;
}
void Ddis() interrupt 3  //LED扫描
{
  LED_SCAN(SCANF);
  LED_DATA(DIS_ROME[DISP]);//送缓存
  DISP++;
  SCANF=_crol_(SCANF,1);
  if(DISP==4)
  {
   DISP=0;
   SCANF=0x01;
  }
   TH1=0xf0;
   TL1=0x00;
}

应该是显示部分的小延时不均衡引起的

一.亮度不匀:1.软件对每位数码管的延时(刷新)不一致造成;2.硬件元件或电路有故障造成;3.数码管供电不足造成.
二.时钟走时不准是软件造成.中断重装数值不对,我有精准C语言程序,需要留言

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top