Hallo,
hab mir vor kurzem ein MyAVR-Board mit LCD-Addon besorgt, und möchte
damit eine 4x3 Matrix Tastatur auslesen, und den eingetippten Wert dann
im LCD ausgeben.
Der Schaltplan der Tastatur und des MyAVR Boards mit LCD-Addon ist im
Anhang.
Habe die Spalten (X1-X3) als Ausgang (PINC4, PINC5, PINB5)
angeschlossen.
Die Zeilen (Y1-Y4) habe ich als Eingang( PINC0-PINC3) angeschlossen.
Das Programm soll jetzt abwechselnd die 3 Spalten mit 5V versorgen,
wenn jetzt eine Taste getippt wird, soll einer der Eingänge HIGH Signal
bekommen.
Mein Problem:
Irgendwie wird das Signal nicht richtig ausgelesen. Bekomme mit dem
angehängten CODE nur immer eine "3" aufs LCD! Selbst wenn ich die
Tastatur abklemme, und den Kontakt(PINB5-> PINC4 oder PINC1 mit einem
Stück Draht überbrücke!
Hier mein CODE: Wollte es erstmal nur mit der 3.Spalte testen!!
1 | #include <avr/io.h>
|
2 | #include "MyAvrLCD.h"
|
3 | #include <util/delay.h>
|
4 |
|
5 | char which_key(){
|
6 | uint8_t temp=0;
|
7 | char zeichen='-';
|
8 | //Dritte Spalte auf 5V
|
9 | PORTB=0b00100000;
|
10 |
|
11 | _delay_ms(200);
|
12 | temp=PINC;
|
13 | // lcd_write(temp);
|
14 | _delay_ms(10);
|
15 | switch(temp){
|
16 | case 1:
|
17 | zeichen = '3';
|
18 | break;
|
19 | case 2:
|
20 | zeichen = '6';
|
21 | break;
|
22 | case 4:
|
23 | zeichen = '9';
|
24 | break;
|
25 | case 8:
|
26 | zeichen= '#';
|
27 | break;
|
28 | default:
|
29 | zeichen='-';
|
30 | ;
|
31 | }
|
32 |
|
33 | // _delay_us(10);
|
34 | PORTB=0x00;
|
35 | // _delay_us(10);
|
36 | // PORTC=0b00100000;//2.Spalte auf 5V
|
37 | // _delay_ms(200);
|
38 | /* temp=PINC;
|
39 | switch(temp){
|
40 | case 1:
|
41 | zeichen = '2';
|
42 | break;
|
43 | case 2:
|
44 | zeichen = '5';
|
45 | break;
|
46 | case 4:
|
47 | zeichen = '8';
|
48 | break;
|
49 | case 8:
|
50 | zeichen = '0';
|
51 | break;
|
52 | default:
|
53 |
|
54 | ;
|
55 | }
|
56 |
|
57 | // _delay_ms(200);
|
58 | PORTC=0b00010000;//1.Spalte auf 5V
|
59 | // _delay_us(10);
|
60 | temp=PINC;
|
61 | switch(temp){
|
62 | case 1:
|
63 | zeichen = '1';
|
64 | break;
|
65 | case 2:
|
66 | zeichen = '4';
|
67 | break;
|
68 | case 4:
|
69 | zeichen = '7';
|
70 | break;
|
71 | case 8:
|
72 | zeichen = '*';
|
73 | break;
|
74 | default:
|
75 | ;
|
76 | }
|
77 | */
|
78 |
|
79 | return zeichen;
|
80 | }
|
81 |
|
82 |
|
83 | int main( void )
|
84 | { char number='-';
|
85 | _delay_ms(10);
|
86 | lcd_init();
|
87 | _delay_ms(10);
|
88 | DDRC=0b11110000;//PINS C0-C3 input, Rest Output
|
89 | DDRB=0b11111111;//Alle B Pins OUtput
|
90 |
|
91 | lcd_clear();
|
92 | lcd_writeText(fach);
|
93 | _delay_ms(100);
|
94 | lcd_write(number);
|
95 | while(1==1){
|
96 |
|
97 | number=which_key();
|
98 | _delay_ms(10);
|
99 | if(number!='-')
|
100 | lcd_write(number);
|
101 | _delay_ms(100);
|
102 | }
|
103 |
|
104 |
|
105 | _delay_ms(10);
|
106 |
|
107 |
|
108 |
|
109 |
|
110 |
|
111 |
|
112 |
|
113 |
|
114 |
|
115 | return 0;
|
116 | }
|
Vielen Dank im Vorraus!!!
MfG