Lcd Ansteuerung 8051

Gast #1552630
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.
Angehängte Dateien:
Gast #1553357
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
Gast #1554092
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.
Gast #1554588
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.
Gast #1555446
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren