www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Lcd Ansteuerung 8051


Autor: a.R. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!


Ich weiß es gibt für dieses Thema schon einige Eintragungen, aber ich 
bin Anfänger und hab noch nie ein LCD angesteuert.

Ich würde gerne ein 8*2, HD44780 komatibles LCD über Assembler ansprech.
(Das Datenblatt zu meinem LCD ist im Anhang)

Wie beginn ich damit?
Hätte jemand Tipps für mich?


Danke
mfg
a.R.

Autor: .blackhat .blade (blackhat-blade)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.mikrocontroller.net/articles/HD44780

Beachte auch die Links unten.

Autor: a.R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke!

Hab da schon was gefunden das mir weiter hilf.

mfg
a.R.

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Puh, schon lange her aber ich habs noch :-)

;Display Treiber für Hitachi Module

;Datenbus ist an Port 1 angeschlossen, Steuersignale: RW=P3.5/RS=P3.6/EN=P3.7

                  
                         org 0000h                   ;jmp above interrupts
                         ljmp Start                  ;

                         org 0100h      ;
start:                   call delay_1                ;wait 15 mSec.

;Display_Init

                         mov R1,#04h                 ;4x38h
Instruction_Data:        mov a,#38h                  ;Set Data Bus to 8 Bit
                         call Enable                 ;entry mode inc. + shift
                         call wait                   ;wait 4.1 mSec.
                         djnz R1,Instruction_Data    ;loop
                         mov a,#0Ch                  ;cursor off/on = 0Ch/0Eh
                         call enable                 ;
                         call clear_display          ;
                         call cursor_home            ;
                  
;main programm

prog_main:               mov r3,#0FFh                ;dptr Textausgabe Reset
                         mov dptr,#Melde_text        ;Titelzeile
                         call Textausgabe            ;
                         mov r4,#80h                 ;wait für Titelzeile
wait_2:                  call delay_1                ;
                         djnz r4,wait_2              ;
                         mov r3,#0FFh                ;dptr Textausgabe Reset

                         mov dptr,#Display_info      ;
                         call Textausgabe            ;
                         mov r4,#80h                 ;
wait_display:            call delay_1                ;
                         djnz r4,wait_display        ;
                         mov r3,#0FFh                ;
                         ljmp prog_main              ;

;text aus tabelle lesen und auf display schreiben

textausgabe:             clr ea                      ;no interr. while writing
                         mov a,#80h                  ;cursor home position
                         call enable                 ;
loop_text:               inc r3                      ;
                         mov a,r3                    ;
                         movc a,@a+dptr              ;Tabelle in Akku laden
                         cjne a,#24h,Ausgabe_Text    ;a<>24h => Ausgabe Text
                         ret                         ;a=24h  => Textausgabe Ende
Ausgabe_Text:            call enable_data            ;Text auf Display ausgeben
                         sjmp loop_text              ;loop Textausgabe

;Enable Routine für Display Steuerbefehle

Enable:                  clr p3.5                    ;rw = 0
                         clr p3.6                    ;rs = 0
                         clr p3.7                    ;en = 0
                         setb p3.7                   ;enable = 1
                         mov p1,a                    ;write instruction
                         clr p3.7                    ;enable = 0
                         call delay                  ;exec. time for displ.42uS
                         setb p3.6                   ;rs = 1
                         ret                         ;

;Enable Routine für Display Daten Senden

Enable_Data:             setb p3.7                   ;en = 1
                         setb p3.6                   ;rs = 1
                         mov p1,a                    ;write data
                         clr p3.7                    ;enable = 0
                         call delay                  ;exec. time for displ.42uS
                         ret                         ;
        
;warteschleifen für steuerbefehle

Wait:                    mov r2,#05h                 ;Basis Clock 8051 6 MHz
loop_1:                  mov r0,#0CDh                ;Timing Init 3 cycles
                         djnz r0,$                   ;Interval 4.1 mS
                         djnz r2,loop_1              ;
                         ret                         ;

Delay:                   mov r0,#0Ch                 ;delay next.. instruction
                         djnz r0,$                   ;42uSec.
                         ret                         ;

delay_1:                 mov r2,#0Fh                 ;Delay 15 mSec.
loop_2:                  mov r0,#0FFh                ;after Power on
                         djnz r0,$                   ;
                         djnz r2,loop_2              ;
                         ret

;display steuerbefehle

cursor_home:             mov a,#02h                  ;cursor home
                         call Enable                 ;
                         call wait                   ;
                         ret                         ;

clear_display:           mov a,#01h                  ;clear display
                         call Enable                 ;
                         call wait                   ;
                         ret                         ;

Melde_text:              DB 'Soft. & Hardware'
                         DB '                        '
                         DB '*  ---------   *'
                         DB '                        ',24h

Display_info:            DB '*  ---------   *'
                         DB '                        '
                         DB 'x51 based Micros'
                         DB '                        ',24h

End


Autor: a.R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wow danke für das ganze Programm.

Das wer dich gleich testen!!!

Autor: a.R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ist es umbediengt notwendig(, oder besser) die busy-flag abzufragen?
Den ich hab die RW-Leitung meines LCDs auf Masse gelegt, da ich
dachte dass ich eh nur etwas ausschreibe.

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Lesen des Busy-Flags macht die Ansteuerung schneller und sicherer. 
Man kann meist ohne arbeiten, wenn man lange genug wartet - diese 
Displays sind im Vergleich zum Mikrocontroller sehr langsam.

Übrigens: Auch der Beispielcode von dieser englischsprachigen Seite 
funktioniert sehr gut: http://www.8052.com/tutlcd

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Busy Flag brauchst du nicht aber dein Timing muß stimmen. Welchen 8x51 
Typ hast du in Verwendung ?

Ist zwar schon ne Weile her das ich 8x51 in Assembler programmiert habe 
aber die Routine funktioniert und ist minimalistisch.

Sag wenns klemmt.

Autor: E. B. (roquema) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für 8051 Assembler gibts von Erik Buchmann einen schönen Codegenerator, 
der kann auch Code für ein LCD erzeugen:
http://www.ipd.uka.de/~buchmann/microcontroller/ge...

Autor: a.R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Bernd

Ich hab keine Ahnung was mit Typ 8x51 gemeint ist.
Bei LCDs kenn ich mich noch nicht so gut aus.
Zu meinem LCD hab ich nur das Datenblatt dass ich an meinen ersten 
Eintrag angehängt hab! Hab nicht mehr gefunden.

Autor: einer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
8x51 in anlehnung an x86.
Belieber 8031 Kompatibler uC.

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Läufts denn schon ?

>> Ich hab keine Ahnung was mit Typ 8x51 gemeint ist.

Na welchen 8051 du verwendest z.B. AT89s8253/Atmel oder Silabs Typen 
etc. Es gibt hunderte davon.

Autor: a.R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich verwende einen Intel P8052AH-Basic Microcontroller.

Nein es läuft noch nicht.
Ich hab versuch das gepostete Programm für meine Verhältnisse 
umzuschreiben, aber da ist mir glaub ich ein Fehler unterlaufen.

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine Zeichnung deines Systems inklusive Details (z.B. Quarzfrequenz) 
wäre sehr hilfreich ansonsten ist es nicht möglich dir zu helfen.

Wie hast du das Programm abgeändert ?

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.