K
k1_zav
Guest
Hej der.
Jeg har et problem.
Jeg ønsker at interface en Atmega 16 til et tastatur, der har 12 nøgler.
Jeg bruger eksterne afbryde for anerkendelse af kolonner.
Assum Jeg vil arbejde med den tredje kolonne.Når jeg trykker'3 'Jeg fik 3.
men når jeg trykker'6 'eller'9' Jeg fik mange 6 eller 9.
Do you know what's
the problem.
Af den måde jeg bruger Codevision AVR som C-compiler, og dette er interrupt service rutine:# define row1 PORTB.4
# define row2 PORTB.5
# define row3 PORTB.6
# define row4 PORTB.7
bit row_recognition;
usignerede CHAR temp;"/ / Eksterne Interrupt 0 tjeneste rutinemæssige
interrupt [EXT_INT0] void ext_int0_isr (void)
(
/ / Kolonne 3
# ASM ( "cli")row1 = 0;
row2 = 1;
row3 = 1;
row4 = 1;
delay_ms (1);
row_recognition = PIND.2;
if (! row_recognition)
(
temp ='3 ';
lcd_putchar (temp);
temp = 0;
)
anden
(
row1 = 1;
row2 = 0;
row3 = 1;
row4 = 1;
delay_ms (1);
row_recognition = PIND.2;
if (! row_recognition)
(
temp ='6 ';
lcd_putchar (temp);
temp = 0;
)
anden
(
row1 = 1;
row2 = 1;
row3 = 0;
row4 = 1;
delay_ms (1);
row_recognition = PIND.2;
if (! row_recognition)
(
temp ='9 ';
lcd_putchar (temp);
temp = 0;
)
andet / / if (row_recognition)
(
temp ='#';
lcd_putchar (temp);
temp = 0;
);
);
);
delay_ms (5);
row1 = 0;
row2 = 0;
row3 = 0;
row4 = 0;
lcd_putchar ( 'X');# ASM ( "sei")
) "
Så Er der nogen vide, hvad er problemet?
Tak.
Jeg har et problem.
Jeg ønsker at interface en Atmega 16 til et tastatur, der har 12 nøgler.
Jeg bruger eksterne afbryde for anerkendelse af kolonner.
Assum Jeg vil arbejde med den tredje kolonne.Når jeg trykker'3 'Jeg fik 3.
men når jeg trykker'6 'eller'9' Jeg fik mange 6 eller 9.
Do you know what's
the problem.
Af den måde jeg bruger Codevision AVR som C-compiler, og dette er interrupt service rutine:# define row1 PORTB.4
# define row2 PORTB.5
# define row3 PORTB.6
# define row4 PORTB.7
bit row_recognition;
usignerede CHAR temp;"/ / Eksterne Interrupt 0 tjeneste rutinemæssige
interrupt [EXT_INT0] void ext_int0_isr (void)
(
/ / Kolonne 3
# ASM ( "cli")row1 = 0;
row2 = 1;
row3 = 1;
row4 = 1;
delay_ms (1);
row_recognition = PIND.2;
if (! row_recognition)
(
temp ='3 ';
lcd_putchar (temp);
temp = 0;
)
anden
(
row1 = 1;
row2 = 0;
row3 = 1;
row4 = 1;
delay_ms (1);
row_recognition = PIND.2;
if (! row_recognition)
(
temp ='6 ';
lcd_putchar (temp);
temp = 0;
)
anden
(
row1 = 1;
row2 = 1;
row3 = 0;
row4 = 1;
delay_ms (1);
row_recognition = PIND.2;
if (! row_recognition)
(
temp ='9 ';
lcd_putchar (temp);
temp = 0;
)
andet / / if (row_recognition)
(
temp ='#';
lcd_putchar (temp);
temp = 0;
);
);
);
delay_ms (5);
row1 = 0;
row2 = 0;
row3 = 0;
row4 = 0;
lcd_putchar ( 'X');# ASM ( "sei")
) "
Så Er der nogen vide, hvad er problemet?
Tak.