51单片机为什么我的LED灯和数码管显示亮度很低

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

#include <reg52.h>

sbit ADDR3 = P1^3;
sbit ENLED = P1^4;

unsigned char code LedChar[] = { //ÊýÂë¹ÜÏÔʾ×Ö·ûת»»±í
0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
};
unsigned char LedBuff[8] = { //ÊýÂë¹Ü+¶ÀÁ¢LEDÏÔʾ»º³åÇø
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,0xFF
};
unsigned char code image[3][8]={
0xE7,0xC3,0x81,0x24,0x66,0xE7,0xE7,0xE7,
0xE7,0xF3,0xF9,0x00,0x00,0xF9,0xF3,0xE7,
0xE7,0xCF,0x9F,0x00,0x00,0x9F,0xCF,0xE7
};

bit flag1s = 1;
unsigned char T0RH = 0;
unsigned char T0RL = 0;
unsigned char index = 0;

void ConfigTimer0(unsigned int ms);
void TrafficLight();
void dianzhenscan();
void main()
{
EA = 1; //¿ª×ÜÖжÏ
ENLED = 0; //ʹÄÜÊýÂë¹ÜºÍLED

ConfigTimer0(1);  //ÅäÖÃT0¶¨Ê±1ms

while (1)
{
    if (flag1s)  //ÿÃëÖ´ÐÐÒ»´Î½»Í¨µÆË¢ÐÂ
    {
        flag1s = 0;
        TrafficLight();
    }
}

}

void ConfigTimer0(unsigned int ms)
{
unsigned long tmp; //ÁÙʱ±äÁ¿

tmp = 11059200 / 12;      //¶¨Ê±Æ÷¼ÆÊýƵÂÊ
tmp = (tmp * ms) / 1000;  //¼ÆËãËùÐèµÄ¼ÆÊýÖµ
tmp = 65536 - tmp;        //¼ÆË㶨ʱÆ÷ÖØÔØÖµ
tmp = tmp + 18;           //²¹³¥ÖжÏÏìÓ¦ÑÓʱÔì³ÉµÄÎó²î
T0RH = (unsigned char)(tmp>>8);  //¶¨Ê±Æ÷ÖØÔØÖµ²ð·ÖΪ¸ßµÍ×Ö½Ú
T0RL = (unsigned char)tmp;
TMOD &= 0xF0;   //ÇåÁãT0µÄ¿ØÖÆÎ»
TMOD |= 0x01;   //ÅäÖÃT0Ϊģʽ1
TH0 = T0RH;     //¼ÓÔØT0ÖØÔØÖµ
TL0 = T0RL;
ET0 = 1;        //ʹÄÜT0ÖжÏ
TR0 = 1;        //Æô¶¯T0

}
void TrafficLight()
{
static unsigned char color = 2;
static unsigned char timer = 0;

if(timer == 0)
{
    switch(color)
    {
        case 0:
        color = 1;
        timer = 2;
        LedBuff[6] = 0xE7;
        break;

        case 1:
        color = 2;
        timer = 19;
        LedBuff[6] = 0xFC;
        break;

        case 2:
        color = 0;
        timer = 9;
        LedBuff[6] = 0x3F;
        break;

        default:
        break;
    }
}
else
{
    timer--;
}
LedBuff[0] = LedChar[timer%10];
LedBuff[1] = LedChar[timer/10];    

}

void LedScan()
{
static unsigned char x = 0; //¶¯Ì¬É¨ÃèË÷Òý
ADDR3 = 1;
P0 = 0xFF; //¹Ø±ÕËùÓжÎѡ룬ÏÔʾÏûÒþ
P1 = (P1 & 0xF8) | x; //λѡË÷ÒýÖµ¸³Öµµ½P1¿ÚµÍ3λ
P0 = LedBuff[x]; //»º³åÇøÖÐË÷ÒýλÖõÄÊý¾ÝË͵½P0¿Ú
if (x < 6) //Ë÷ÒýµÝÔöÑ­»·£¬±éÀúÕû¸ö»º³åÇø
x++;
else
x = 0;
}
void dianzhenscan()
{
static unsigned char i = 0; //¶¯Ì¬É¨ÃèË÷Òý
//ADDR3 = 0;
P0 = 0xFF; //¹Ø±ÕËùÓжÎѡ룬ÏÔʾÏûÒþ
P1 = (P1 & 0xF0) | i; //λѡË÷ÒýÖµ¸³Öµµ½P1¿ÚµÍ3λ
P0 = 0xFF;
P0 = image[index][i]; //»º³åÇøÖÐË÷ÒýλÖõÄÊý¾ÝË͵½P0¿Ú
if (i < 7) //Ë÷ÒýµÝÔöÑ­»·£¬±éÀúÕû¸ö»º³åÇø
i++;
else
i = 0;
}

void InterruptTimer0() interrupt 1
{
static unsigned int tmr1s = 0; //1Ã붨ʱÆ÷

TH0 = T0RH;  //ÖØÐ¼ÓÔØÖØÔØÖµ
TL0 = T0RL;
LedScan();   //LEDɨÃèÏÔʾ

dianzhenscan();
tmr1s++; //1Ã붨ʱµÄ´¦Àí
if (tmr1s >= 1000)
{
tmr1s = 0;
flag1s = 1; //ÉèÖÃÃ붨ʱ±êÖ¾
}
}
这是我的代码,同时显示LED,数码管和点阵,现在点阵LED亮度正常,但是数码管和LED小灯亮度很低,该怎么修改好啊

把电路图贴出来看看呢,是不是P1的低4位通过地址译码器后作为了数码管和LED的公共端?如果是这样,在切换到LED后,数码管的片选信号是否还保持?如果不能保持,可能导致数码管亮度过低。因为数码管显示完成后,就切换到了LED,然后就是等下一次中断,明显LED处于点亮的时间较长,亮度更高。
验证这个很简单,把中断里LedScan();和dianzhenscan();两个函数的调用交换一下位置试试就知道了。
看看限流电阻在哪里,可以考虑减小数码管的限流电阻或者加三极管增强驱动。

扫描频率是不是太低了