Mình quét với 4 con led 7 , dùng tran a1015 đệm dòng , led anot chung đỏ 0.56 nhưng cứ bị bóng mờ tại những nét không sáng rất khó chịu. mình cho quét led bằng timer chu kỳ 5ms. và 1ms đều bị, đã thử thay đổi tăng giảm điện trở đệm tại chân tran và ngõ data nhưng vẫn thế. code led đã có hàm clear_led . mình đang bối rối quá. mong cả nhà giúp đỡ:
//-----------------------------------------------------------------------------------------
void clear_led(void)
{
PORTB=0xff;
d1=d2=d3=d4=1;
}
//-----------------------------------------------------------------------------------------
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
// Reinitialize Timer1 value
TCNT1H=0xFC17 >> 8;
TCNT1L=0xFC17 & 0xff;
clear_led();
so4=i/1000; //Ngan
so3=(i%1000)/100; //Tram
so2=(i%100)/10; //Chuc
so1=i%10; //Don vi
switch(z)
{
case 0: if((so4==0)&&(so3==0))
{clear_led(); break; }
else {d4=1; PORTB=so[so3]; d1 = 0; break; } //tr
case 1: if((so4==0)&&(so3==0)&&(so2==0))
{clear_led(); break; }
else { d1=1; PORTB=so[so2]; d2 = 0; break; } //ch
case 2:
d2=1; PORTB=so[so1]; d3 = 0; break; //dv
case 3:
if (so4 == 0) // Neu gia tri trong hang nghin = 0 thi led hang nghin khong sang
{ clear_led(); break; }
else { d3=1; PORTB=so[so4]; d4 = 0; delay_ms(2); clear_led(); break; } //ng
}
z++;
if(z>3) z=0;
}
void clear_led(void)
{
PORTB=0xff;
d1=d2=d3=d4=1;
}
//-----------------------------------------------------------------------------------------
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
// Reinitialize Timer1 value
TCNT1H=0xFC17 >> 8;
TCNT1L=0xFC17 & 0xff;
clear_led();
so4=i/1000; //Ngan
so3=(i%1000)/100; //Tram
so2=(i%100)/10; //Chuc
so1=i%10; //Don vi
switch(z)
{
case 0: if((so4==0)&&(so3==0))
{clear_led(); break; }
else {d4=1; PORTB=so[so3]; d1 = 0; break; } //tr
case 1: if((so4==0)&&(so3==0)&&(so2==0))
{clear_led(); break; }
else { d1=1; PORTB=so[so2]; d2 = 0; break; } //ch
case 2:
d2=1; PORTB=so[so1]; d3 = 0; break; //dv
case 3:
if (so4 == 0) // Neu gia tri trong hang nghin = 0 thi led hang nghin khong sang
{ clear_led(); break; }
else { d3=1; PORTB=so[so4]; d4 = 0; delay_ms(2); clear_led(); break; } //ng
}
z++;
if(z>3) z=0;
}