Chương trình sau em quét 4 led 7 đoạn hiển thị số, có nút nhấn để tăng giá trị của số, em dùng ngắt timer để quét led. Việc quét led thì được rồi nhưng khi nhấn nút thì số không tăng được, em không biết tại sao, nhờ các bác giúp đở.
unsigned char z[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6 f,0x00};
sbit up=P3^5;
int so=1234;
unsigned char ngan,tram,chuc,dvi;
//delay ms
void delay_ms(unsigned int ms)
{
while(ms--)
{
unsigned char temp=121;
while(temp--);
}
}
void int_timer0_handler() interrupt 1
{
TR0 = 0; //tam dung timer0
TH0 = 0xFC; //nap lai gia tri
TL0 = 0x18;
TR0 = 1;
P2=z[ngan];P0_0=0;delay_ms(1);P0=0xff;
P2=z[tram];P0_1=0;delay_ms(1);P0=0xff;
P2=z[chuc];P0_2=0;delay_ms(1);P0=0xff;
P2=z[dvi];P0_3=0;delay_ms(1); P0=0xff;
}
main()
{
IE = 0x82; //cho phep ngat timer 0
TMOD = 0x11; //mode 1 (16bits)
IT0 = 1; //ngat ngoai canh cho timer0 (trong thanh ghi TCON)
TF0 = 1; //bat dau ngat timer0
while(1)
{
ngan=so1000;
tram=(so/100)%10;
chuc=(so%100)/10;
dvi=(so%100)%10;
if(!up)
{
TR0=0;
delay_ms(5);while(!up);delay_ms(5);
so++;
TR0=1;
}
}
}
unsigned char z[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6 f,0x00};
sbit up=P3^5;
int so=1234;
unsigned char ngan,tram,chuc,dvi;
//delay ms
void delay_ms(unsigned int ms)
{
while(ms--)
{
unsigned char temp=121;
while(temp--);
}
}
void int_timer0_handler() interrupt 1
{
TR0 = 0; //tam dung timer0
TH0 = 0xFC; //nap lai gia tri
TL0 = 0x18;
TR0 = 1;
P2=z[ngan];P0_0=0;delay_ms(1);P0=0xff;
P2=z[tram];P0_1=0;delay_ms(1);P0=0xff;
P2=z[chuc];P0_2=0;delay_ms(1);P0=0xff;
P2=z[dvi];P0_3=0;delay_ms(1); P0=0xff;
}
main()
{
IE = 0x82; //cho phep ngat timer 0
TMOD = 0x11; //mode 1 (16bits)
IT0 = 1; //ngat ngoai canh cho timer0 (trong thanh ghi TCON)
TF0 = 1; //bat dau ngat timer0
while(1)
{
ngan=so1000;
tram=(so/100)%10;
chuc=(so%100)/10;
dvi=(so%100)%10;
if(!up)
{
TR0=0;
delay_ms(5);while(!up);delay_ms(5);
so++;
TR0=1;
}
}
}
Comment