LCD-Display "in eine neue Seite springen lassen"

Gast #1384903
Hallo, alle die noch Online sind.

Ich versuche seit 2 Stunden auf meinem Display eine zweite Seite, also 
das es einen Text "Mutti fraegt Kind" anzeigt. Dann soll es so 10sec 
warten und den text "antwortet" schreiben.

Wie muss ich den Code änderen?

//
// Anpassungen im makefile:
//    ATMega8 => MCU=atmega8 im makefile einstellen
//    lcd-routines.c in SRC = ... Zeile anhängen
//
#include <avr/io.h>
#include "lcd-routines.h"

int main(void)
{
    lcd_init();

    lcd_string("Mutti fraegt Kind");

    set_cursor(0,2);

    lcd_string("1:");


    while(10);


  {
    }
    return 1;
}


Oder muss ich in einer der anderen Datein noch etwas ändern?

Als Programmiersoftware hab ich AVR-Studio
es ist ein 2x 16 LCD.

Bin um jede hilfe Dankbar!!

Mfg
Stefan
Gast
Ich weiß nicht, was falsch ist! Ich hab kaum erfahrungen.

Ich bin ja froh, das es überhaupt etwas darstellt. Ich will ja nur, das 
es mit dem Text weitergeht.

Kann mir bitte jemand einen Befehl oder Beispiel geben?

Das LCD is von pollin.

die lcd.rountine.h
// Ansteuerung eines HD44780 kompatiblen LCD im 4-Bit-Interfacemodus
// http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial
//
void lcd_data(unsigned char temp1);
void lcd_string(char *data);
void lcd_command(unsigned char temp1);
void lcd_enable(void);
void lcd_init(void);
void lcd_home(void);
void lcd_clear(void);
void set_cursor(uint8_t x, uint8_t y);

// Hier die verwendete Taktfrequenz in Hz eintragen, wichtig!

#define F_CPU 8000000

// LCD Befehle

#define CLEAR_DISPLAY 0x01
#define CURSOR_HOME   0x02

// Pinbelegung für das LCD, an verwendete Pins anpassen

#define LCD_PORT      PORTD
#define LCD_DDR       DDRD
#define LCD_RS        PD4
#define LCD_EN        PD5
// DB4 bis DB7 des LCD sind mit PD0 bis PD3 des AVR verbunden
Verzweiflung schrieb:
> Ich weiß nicht, was falsch ist! Ich hab kaum erfahrungen.

Worin soll denn deiner Meinung nach die Warterei bestehen?
1
   while(10);

Da steht: solange 10 ungleich 0 ist, mach nichts. 10 ist immer ungleich 
0 und wenn du bis ans Ende des Universums wartest.

Wenn du sowas wie ein Menüsystem bauen willst, dann ist die einfachste 
Variante die, für jede 'Seite' eine eigene Funktion zu machen. Das ist 
zwar bei deinem Mikrobeispiel nicht wirklich notwendig, sobald es aber 
komplizierter wird, sieht die Sache anders aus.
1
..
2
#include <util/delay.h>
3
..
4

5

6
void delay_sec( uint8_t sec )
7
{
8
  uint8_t i;
9

10
  for( i = 0; i < sec; ++i )
11
    _delay_ms( 1000 );
12
}
13

14
void Seite_1()
15
{
16
  lcd_clear();
17

18
  lcd_string( "Mutti fraegt Kind" );
19

20
  delay_sec( 10 );
21
}
22

23
void Seite_2()
24
{
25
  lcd_clear();
26

27
  lcd_string( "antwortet" );
28

29
  delay_sec( 10 );
30
}
31

32
int main()
33
{
34
  lcd_init();
35

36
  while( 1 )
37
  {
38
    Seite_1();
39
    Seite_2();
40
  }
41
}


Aber sei gewarnt: Solche Warteschleifen sind nur am Anfang dein Mittel 
zur Lösung. In richtigen Programmen kommt man so nicht weiter. 
Hauptsächlich deshalb, weil innerhalb einer Warteschleife (delay_sec) 
nichts weiter passieren kann ausser ISR abzuarbeiten. Genau das ist aber 
kontraproduktiv. Man möchte ja meistens haben, dass ein µC sofort auf 
ein Ereignis reagiert und nicht erst stumpfsinnig irgendwelche Zeit 
runterzählt.

Edit: Damit die _delay_ms Funktion richtig funktioniert, muss der 
Optimizer des Compilers eingeschaltet sein.
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Warteschleifen_.28delay.h.29

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.