From df7d0ee203a16881f96f40b0721797adce7f63c3 Mon Sep 17 00:00:00 2001 From: burg Date: Sun, 21 May 2006 22:46:43 +0000 Subject: Ajout d'un anti rebond --- n/lcd/src/lcd.c | 52 +++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 45 insertions(+), 7 deletions(-) (limited to 'n/lcd') diff --git a/n/lcd/src/lcd.c b/n/lcd/src/lcd.c index 842a06d..91483b8 100644 --- a/n/lcd/src/lcd.c +++ b/n/lcd/src/lcd.c @@ -32,6 +32,7 @@ void lcd_send_command (u8 cmd); +char key_read (void); /* Envois une commande transit **/ void lcd_transit_command (u8 cmd) @@ -132,13 +133,46 @@ lcd_clear(void) utils_delay_ms (20); } + + +char +key_get (char old_key) +{ + char new_key = key_read (); + if (old_key == 0) + { + old_key = new_key; + + if (old_key != 0) + proto_send1b ('R', new_key); + + } + else if (new_key == 0) + { + char i = 0; + while ( key_read () == 0 && i < 3 ) + { + utils_delay_ms(100); + if ( i == 2 ) + old_key = 0; + i++; + } + } + else if ( old_key != new_key ) + { + proto_send1b ('R', new_key); + old_key = new_key; + } + return old_key; +} + char key_read (void) { char key = 0; PORTC = (PORTC & 0xf0) | 0x0f; uint8_t i = 0; - while ( key == 0) + while ( key == 0 && i < 4 ) { switch (i) { @@ -153,7 +187,7 @@ key_read (void) } uint8_t key_tmp = PIND; if ( ~(key_tmp & 0x3c) & 0x04 ) - switch (i) + switch (i) { case 0 : key = '1'; break; @@ -201,9 +235,9 @@ key_read (void) break; } i++; - if (i==4) - i=0; - } +// if (i==4) +// i=0; + } PORTC = (PORTC & 0xf0); return key; } @@ -260,6 +294,7 @@ proto_callback (uint8_t cmd, uint8_t size, uint8_t *args) int main (void) { + char old_key = 0; sei (); uart0_init (); proto_send0 ('z'); @@ -267,8 +302,11 @@ main (void) lcd_send_string (" LCD initialise Attend Grub "); while (1) { - uint8_t c = uart0_getc (); - proto_accept (c); + if (uart0_poll ()) + proto_accept (uart0_getc ()); + utils_delay_ms(3); + old_key = key_get (old_key); + } return 0; } -- cgit v1.2.3