Den Code sieht man ja bei dem Link den ich gepostet habe.
Laufen tut es wie folgt:
1 | lcd_init();
|
2 | lcd_string(distance);
|
Das Problem dabei ist, dass jedes mal ein erneuter Init blöd ist. Daher
würde ich gerne zu begin der main() einmal ein init machen und dann nur
noch den clear Befehl aufrufen:
1 | lcd_clear();
|
2 | lcd_string(distance);
|
Nur dann kommen eben immer nur chinesische Zeichen.
Ich copy/paste einfach mal die init und clear Funktion in den Beitrag:
1 | void lcd_clear( void )
|
2 | {
|
3 | lcd_command( LCD_CLEAR_DISPLAY );
|
4 | _delay_ms( LCD_CLEAR_DISPLAY_MS );
|
5 | }
|
1 | void lcd_init( void )
|
2 | {
|
3 | // verwendete Pins auf Ausgang schalten
|
4 | uint8_t pins = (0x0F << LCD_DB) | // 4 Datenleitungen
|
5 | (1<<LCD_RS) | // R/S Leitung
|
6 | (1<<LCD_EN); // Enable Leitung
|
7 | LCD_DDR |= pins;
|
8 |
|
9 | // initial alle Ausgänge auf Null
|
10 | LCD_PORT &= ~pins;
|
11 |
|
12 | // warten auf die Bereitschaft des LCD
|
13 | _delay_ms( LCD_BOOTUP_MS );
|
14 |
|
15 | // Soft-Reset muss 3mal hintereinander gesendet werden zur Initialisierung
|
16 | lcd_out( LCD_SOFT_RESET );
|
17 | _delay_ms( LCD_SOFT_RESET_MS1 );
|
18 |
|
19 | lcd_enable();
|
20 | _delay_ms( LCD_SOFT_RESET_MS2 );
|
21 |
|
22 | lcd_enable();
|
23 | _delay_ms( LCD_SOFT_RESET_MS3 );
|
24 |
|
25 | // 4-bit Modus aktivieren
|
26 | lcd_out( LCD_SET_FUNCTION |
|
27 | LCD_FUNCTION_4BIT );
|
28 | _delay_ms( LCD_SET_4BITMODE_MS );
|
29 |
|
30 | // 4-bit Modus / 2 Zeilen / 5x7
|
31 | lcd_command( LCD_SET_FUNCTION |
|
32 | LCD_FUNCTION_4BIT |
|
33 | LCD_FUNCTION_2LINE |
|
34 | LCD_FUNCTION_5X7 );
|
35 |
|
36 | // Display ein / Cursor aus / Blinken aus
|
37 | lcd_command( LCD_SET_DISPLAY |
|
38 | LCD_DISPLAY_ON |
|
39 | LCD_CURSOR_OFF |
|
40 | LCD_BLINKING_OFF);
|
41 |
|
42 | // Cursor inkrement / kein Scrollen
|
43 | lcd_command( LCD_SET_ENTRY |
|
44 | LCD_ENTRY_INCREASE |
|
45 | LCD_ENTRY_NOSHIFT );
|
46 |
|
47 | lcd_clear();
|
48 | }
|