mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik KS0066U LCD-Display --> Cursor Position


Autor: Claudio H. (hedie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich habe heute das erste mal ein Display vollständig selbst 
angesteuert....
Also ohne CopyPaste....

Hat dadurch zwar ein wenig länger gedauert jedoch verstehe ich nun jeden 
einzelnen Ablauf....

Ich bin jedoch dennoch auf ein Problem gestossen bei welchem ich euch 
gerne um Rat fragen möchte....

Ich habe ein LCD-Display von Reichelt (1x16 Zeichen - Displaytech 161A) 
dieses ist nicht! mit dem HD44780 Kompatibel sondern hat hie und da 
gewisse unterschiede... wie zb das die 16 Zeichen als 2 Display Linien 
angesteuert werden müssen....

Hier ist das Datenblatt des Controllers: KS0066U 
http://www.datasheetcatalog.org/datasheet/SamsungE...

Ich habe zur Ansteuerung des Displays ein Schieberegister verwendet
Bei der Seriellen übertragung muss zuerst das höchstwertige bit 
übertragen werden.

Hier ist mein bisheriger Code:
#include <avr/io.h>
#include <util/delay.h>

#define LCD_PORT        PORTB
#define LCD_DDR         DDRB
#define LCD_RS          PB3
#define LCD_EN          PB2
#define LCD_DATA  PB1
#define LCD_CLK    PB0


void write_byte(unsigned char ucByte, unsigned char ucRS)
{
unsigned char ucCount = 0;
unsigned char ucMasked = 0;
  
ucByte = ~(ucByte);  //Invertieren für STK500
  
  if(ucRS > 0) LCD_PORT |= (1<<LCD_RS);  // RS auf 1 Setzen
  if(ucRS == 0) LCD_PORT &= ~(1<<LCD_RS); // RS auf 0 setzen
  
  LCD_PORT &= ~(1<<LCD_EN);
  
  while(ucCount != 8)
  {
    ucCount ++;
    
    ucMasked = (ucByte & 0x80);
    if(ucMasked == 0) LCD_PORT |= (1<<LCD_DATA);
    if(ucMasked > 0) LCD_PORT &= ~(1<<LCD_DATA);
    
    LCD_PORT |= (1<<LCD_CLK);
    _delay_ms(1);
    LCD_PORT &= ~(1<<LCD_CLK);
    _delay_ms(1);
    
    ucByte = (ucByte << 1);
  }
  
  LCD_PORT |= (1<<LCD_EN);  // Enable auf 1 setzen
  _delay_ms(1);
  LCD_PORT &= ~(1<<LCD_EN);

}




void init_lcd(void)
{
  _delay_ms(100);    //Warten bis LCD bereit....
  write_byte(0x3C,0);  //2 Line  5x8 Dot Mode
  write_byte(0x0C,0);  //Display on - Cursor off - Blink off  
  write_byte(0x01,0);  //Clear Display
  write_byte(0x06,0);  //Increment mode - entire shift off
}


void main(void)
{
  LCD_DDR = 0xFF;
  
  init_lcd();
  
  //write_byte(~(0x1D),0);//Cursor nach rechts
  //write_byte(~(0x1B),0);//Cursor nach links
  
  write_byte('T',1);
  write_byte('E',1);
  write_byte('S',1);
  write_byte('T',1);
  
  while(1);

}

Mein Fragen....

Im Tutorial für AVR GCC steht für die String ausgabe folgende Funktion:
void lcd_string(char *data)
{
    while(*data) {
        lcd_data(*data);
        data++;
    }
}

Wie kann ich die grösse bzw. die Anzahl zeichen welche innerhalb von 
data stehen herausfinden? und wie kann ich auf ein einzelnes Zeichen 
innerhalb dieses Arrays zugreifen?

Und die zweite frage....
Wie kann ich bei diesem Controller die Display Linie wechseln und die 
Cursor Position festlegen?

Danke schonmal...

Liebe Grüsse

Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wie kann ich die grösse bzw. die Anzahl zeichen welche innerhalb von data
>stehen herausfinden?
Mit strlen (in string.h).

>und wie kann ich auf ein einzelnes Zeichen innerhalb dieses Arrays zugreifen?
Z.B. so
lcd_data(*data);

>Wie kann ich bei diesem Controller die Display Linie wechseln und die Cursor
>Position festlegen?
Siehe Seite 16 Punkt 8 im Datenblatt
>http://www.datasheetcatalog.org/datasheet/SamsungE...

Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wie kann ich bei diesem Controller die Display Linie wechseln und die Cursor
>Position festlegen?
Siehe dazu auch Seite 9 im Datenblatt.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.