Hallo Leute,
ich habe mir eine eigene Bibliothek für ein LCD-Display geschrieben.
Diese funktioniert auch soweit. Jetzt habe ich ein Programm geschrieben,
weches von meiner Eingabebaugruppe (8-Bit) die Bits 1-7 einliest. Diese
Bits werden beim an-ausschalten von Bit8 übernommen.
Jetzt soll auf dem Display einmal die eingegebene Zahl und in der
zweiten Zeile das hinter dieser Zahl 'versteckte' ASCII-Zeichen
ausgeben. Ich habe folgendes Programm geschrieben, aber es funktioniert
nicht ganz korrekt. Er schreibt erstens keine Zahl und in der zweiten
Zeile erscheint kein ASCII-Zeichen, sondern steht gar nichts.
C-Programm
1 | #define F_CPU 16E6
|
2 |
|
3 | #include <avr/io.h>
|
4 | #include <avr/iom128.h>
|
5 | #include <util/delay.h>
|
6 | #include <lcd.h>
|
7 |
|
8 | int main( void )
|
9 | {
|
10 | unsigned char bcd[6];
|
11 |
|
12 | lcd_init();
|
13 |
|
14 | DDRA = 0x00;
|
15 |
|
16 | lcd_pos(0,0);
|
17 | lcd_string((unsigned char*)"Uncast:");
|
18 | lcd_pos(1,0);
|
19 | lcd_string((unsigned char*)"Cast:");
|
20 |
|
21 | // Bis hier funktionierts
|
22 |
|
23 | while(1)
|
24 | {
|
25 | if((PINA & 0x80) == 0x80)
|
26 | {
|
27 | int_to_bcd((PINA & 0x7F), bcd); // Wandelt die eingegeben Zahl in BCD-Zahlen um und schreibt diese in das übergebene Feld
|
28 |
|
29 | while((PINA & 0x80) == 0x80);
|
30 |
|
31 | lcd_pos(0,9);
|
32 | lcd_string(bcd);
|
33 | lcd_pos(0,9);
|
34 | lcd_string(bcd);
|
35 |
|
36 | // Ab hier funktiuonierts auch wieder
|
37 |
|
38 | lcd_blink(3);
|
39 | lcd_shift_right(3);
|
40 | lcd_blink(5);
|
41 | lcd_shift_left(3);
|
42 | }
|
43 | }
|
44 | return 0;
|
45 | }
|
Teil aus der lcd.h
1 | void int_to_bcd ( unsigned int x, unsigned char *erg)
|
2 | {
|
3 | unsigned int i;
|
4 |
|
5 | for(i=0;i<5;i++)
|
6 | {
|
7 | erg[i] = x % 10;
|
8 | x /= 10;
|
9 | }
|
10 |
|
11 | erg[5] = '\0';
|
12 | }
|
13 |
|
14 | void lcd_string (unsigned char *kette)
|
15 | {
|
16 | unsigned int i=0;
|
17 |
|
18 | while(kette[i] != '\0')
|
19 | {
|
20 | lcd_data(kette[i]);
|
21 | i++;
|
22 | }
|
23 | }
|