summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorburg2006-05-21 22:46:43 +0000
committerburg2006-05-21 22:46:43 +0000
commitdf7d0ee203a16881f96f40b0721797adce7f63c3 (patch)
tree35647680ef729f85aa50afc5bb4881380579c954
parenta76ce92ad99a1a0a5b6eba55a8f4bac337da43cd (diff)
Ajout d'un anti rebond
-rw-r--r--n/lcd/src/lcd.c52
1 files changed, 45 insertions, 7 deletions
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;
}