Forum: Mikrocontroller und Digitale Elektronik Lcd Ansteuerung 8051


von a.R. (Gast)


Angehängte Dateien:

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.

von .blackhat .. (blackhat-blade)


Lesenswert?

http://www.mikrocontroller.net/articles/HD44780

Beachte auch die Links unten.

von a.R. (Gast)


Lesenswert?

Danke!

Hab da schon was gefunden das mir weiter hilf.

mfg
a.R.

von Bernd (Gast)


Lesenswert?

Puh, schon lange her aber ich habs noch :-)
1
;Display Treiber für Hitachi Module
2
3
;Datenbus ist an Port 1 angeschlossen, Steuersignale: RW=P3.5/RS=P3.6/EN=P3.7
4
5
                  
6
                         org 0000h                   ;jmp above interrupts
7
                         ljmp Start                  ;
8
9
                         org 0100h      ;
10
start:                   call delay_1                ;wait 15 mSec.
11
12
;Display_Init
13
14
                         mov R1,#04h                 ;4x38h
15
Instruction_Data:        mov a,#38h                  ;Set Data Bus to 8 Bit
16
                         call Enable                 ;entry mode inc. + shift
17
                         call wait                   ;wait 4.1 mSec.
18
                         djnz R1,Instruction_Data    ;loop
19
                         mov a,#0Ch                  ;cursor off/on = 0Ch/0Eh
20
                         call enable                 ;
21
                         call clear_display          ;
22
                         call cursor_home            ;
23
                  
24
;main programm
25
26
prog_main:               mov r3,#0FFh                ;dptr Textausgabe Reset
27
                         mov dptr,#Melde_text        ;Titelzeile
28
                         call Textausgabe            ;
29
                         mov r4,#80h                 ;wait für Titelzeile
30
wait_2:                  call delay_1                ;
31
                         djnz r4,wait_2              ;
32
                         mov r3,#0FFh                ;dptr Textausgabe Reset
33
34
                         mov dptr,#Display_info      ;
35
                         call Textausgabe            ;
36
                         mov r4,#80h                 ;
37
wait_display:            call delay_1                ;
38
                         djnz r4,wait_display        ;
39
                         mov r3,#0FFh                ;
40
                         ljmp prog_main              ;
41
42
;text aus tabelle lesen und auf display schreiben
43
44
textausgabe:             clr ea                      ;no interr. while writing
45
                         mov a,#80h                  ;cursor home position
46
                         call enable                 ;
47
loop_text:               inc r3                      ;
48
                         mov a,r3                    ;
49
                         movc a,@a+dptr              ;Tabelle in Akku laden
50
                         cjne a,#24h,Ausgabe_Text    ;a<>24h => Ausgabe Text
51
                         ret                         ;a=24h  => Textausgabe Ende
52
Ausgabe_Text:            call enable_data            ;Text auf Display ausgeben
53
                         sjmp loop_text              ;loop Textausgabe
54
55
;Enable Routine für Display Steuerbefehle
56
57
Enable:                  clr p3.5                    ;rw = 0
58
                         clr p3.6                    ;rs = 0
59
                         clr p3.7                    ;en = 0
60
                         setb p3.7                   ;enable = 1
61
                         mov p1,a                    ;write instruction
62
                         clr p3.7                    ;enable = 0
63
                         call delay                  ;exec. time for displ.42uS
64
                         setb p3.6                   ;rs = 1
65
                         ret                         ;
66
67
;Enable Routine für Display Daten Senden
68
69
Enable_Data:             setb p3.7                   ;en = 1
70
                         setb p3.6                   ;rs = 1
71
                         mov p1,a                    ;write data
72
                         clr p3.7                    ;enable = 0
73
                         call delay                  ;exec. time for displ.42uS
74
                         ret                         ;
75
        
76
;warteschleifen für steuerbefehle
77
78
Wait:                    mov r2,#05h                 ;Basis Clock 8051 6 MHz
79
loop_1:                  mov r0,#0CDh                ;Timing Init 3 cycles
80
                         djnz r0,$                   ;Interval 4.1 mS
81
                         djnz r2,loop_1              ;
82
                         ret                         ;
83
84
Delay:                   mov r0,#0Ch                 ;delay next.. instruction
85
                         djnz r0,$                   ;42uSec.
86
                         ret                         ;
87
88
delay_1:                 mov r2,#0Fh                 ;Delay 15 mSec.
89
loop_2:                  mov r0,#0FFh                ;after Power on
90
                         djnz r0,$                   ;
91
                         djnz r2,loop_2              ;
92
                         ret
93
94
;display steuerbefehle
95
96
cursor_home:             mov a,#02h                  ;cursor home
97
                         call Enable                 ;
98
                         call wait                   ;
99
                         ret                         ;
100
101
clear_display:           mov a,#01h                  ;clear display
102
                         call Enable                 ;
103
                         call wait                   ;
104
                         ret                         ;
105
106
Melde_text:              DB 'Soft. & Hardware'
107
                         DB '                        '
108
                         DB '*  ---------   *'
109
                         DB '                        ',24h
110
111
Display_info:            DB '*  ---------   *'
112
                         DB '                        '
113
                         DB 'x51 based Micros'
114
                         DB '                        ',24h
115
116
End

von a.R. (Gast)


Lesenswert?

Wow danke für das ganze Programm.

Das wer dich gleich testen!!!

von a.R. (Gast)


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.

von Sebastian (Gast)


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

von Bernd (Gast)


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.

von E. B. (roquema) Benutzerseite


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/generator.htm

von a.R. (Gast)


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.

von einer (Gast)


Lesenswert?

8x51 in anlehnung an x86.
Belieber 8031 Kompatibler uC.

von Bernd (Gast)


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.

von a.R. (Gast)


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.

von Bernd (Gast)


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 ?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.