Jak skonfigurować wyświetlacz LCD 16x2 w trybie 4-bitowym na 89C2051 w assemblerze?

51' i LCD





Poprzedni Następny
Wiadomość
Spis treści
From: "Tomasz Trojanowski" <Uniservis_at_nospam_uniservis.com.pl>
Subject: 51' i LCD
Date: Wed, 16 May 2001 21:57:53 +0200


proszę o pomoc w obsłudze wyświetlacza LCD (16*2) na 4 linich danych .
chodzi to na 89c2051 a obsługę piesze (ucze się) w asm.

Pierwsza sprawa to jak ustawić go do pracy na 4 liniach ?
Dwa jak wysłać znak ?
Trzy czyszczenie LCD , załączanie i wyłaczanie oraz znaki w drugiej lini .

Może jakieś przykłady w asm na 51' ?


----------------------------------
Tomasz Trojanowski
geble 103054219 ICQ
----------------------------------



Poprzedni Następny
Wiadomość
Spis treści
From: "Marek Lewandowski" <locust_at_nospam_priv4.onet.pl>
Subject: Re: 51' i LCD
Date: Wed, 16 May 2001 22:38:01 +0200


Użytkownik "Tomasz Trojanowski" <Uniservis_at_nospam_uniservis.com.pl> napisał w
wiadomości news:9dum5r$a56$1_at_nospam_news.tpi.pl...
proszę o pomoc w obsłudze wyświetlacza LCD (16*2) na 4 linich danych .
chodzi to na 89c2051 a obsługę piesze (ucze się) w asm.

Pierwsza sprawa to jak ustawić go do pracy na 4 liniach ?
Dwa jak wysłać znak ?
Trzy czyszczenie LCD , załączanie i wyłaczanie oraz znaki w drugiej lini .

Może jakieś przykłady w asm na 51' ?

Napisz w weekend na priv, to ci poślę listę rozkazów dla tego wyświeltlacza
i (jeśli znajdę) przykładowy moduł obsługi.

--
Marek Lewandowski
marek.lewandowski_at_nospam_multicon.pl UIN: 10139051
http://locust.republika.pl




Poprzedni Następny
Wiadomość
Spis treści
From: "Juliusz" <jul_at_nospam_fom.pl>
Subject: Re: 51' i LCD
Date: Wed, 16 May 2001 23:00:01 +0200



"Tomasz Trojanowski" <Uniservis_at_nospam_uniservis.com.pl> wrote in message
news:9dum5r$a56$1_at_nospam_news.tpi.pl...
proszę o pomoc w obsłudze wyświetlacza LCD (16*2) na 4 linich danych .
chodzi to na 89c2051 a obsługę piesze (ucze się) w asm.

Pierwsza sprawa to jak ustawić go do pracy na 4 liniach ?
Dwa jak wysłać znak ?
Trzy czyszczenie LCD , załączanie i wyłaczanie oraz znaki w drugiej lini .

Może jakieś przykłady w asm na 51' ?

Czy masz juz zmontowany uklad w takim stanie, ze jestes w stanie zaczac
pisac soft ? Czy przy wlaczeniu zasilania zapala sie gorna linijka i daje
sie ustawiac jej kontrast ?

Juliusz




Poprzedni Następny
Wiadomość
Spis treści
From: "Juliusz" <jul_at_nospam_fom.pl>
Subject: Re: 51' i LCD
Date: Wed, 16 May 2001 23:01:06 +0200


Aha moze jeszcze opisz co i gdzie podlaczyles do procesora...

J




Poprzedni Następny
Wiadomość
Spis treści
From: Milosz Skowyra <miloszek_at_nospam_fidonet.org.pl>
Subject: Re: 51' i LCD
Date: Wed, 16 May 2001 23:28:54 +0200


Tomasz Trojanowski wrote:

Pierwsza sprawa to jak ustawić go do pracy na 4 liniach ?
Dwa jak wysłać znak ?
Trzy czyszczenie LCD , załączanie i wyłaczanie oraz znaki w drugiej lini .

Może jakieś przykłady w asm na 51' ?

To pytanie powraca jak bumerang dlatego zdecyduje sie wyslac gotowe
procedury:

Teraz tak, w programie ktory piszesz dodajesz na koncu $include
(lcdlib.a51), oczywiscie to co ponizej zapisujesz jako plik
"lcdlib.a51".
Od tej pory mozesz uzywac gotowych procedur, sposob podlaczenia
wyswietlacza masz na poczatku, sprawdzanie flagi busy nie dziala i jakos
nigdy nie potrzebowalem tego uzywac, dlatego nie poprawilem ani nie
szukalem bledu.
Jezeli masz wyswietlacz podlaczony inaczej to musisz odpowiednio
przerobic program.
Opisy sa po angielsku bo niestety tak wole. ;-)
Teraz zeby uzywac wyswietlacza piszesz np:

cseg at 0
acall lcd_init
mov a,#'K'
acall lcd_send_ascii
acall lcd_2_line
mov a,#'I'
acall lcd_send_ascii
sjmp $

To powinno zainicjalizowac wyswietlacz, i w pierwszej linijce wyswietlic
literke 'K', a w drugiej literke 'I'.

;=======================================================================
;4 BIT LCD DISPLAY ROUTINES
; 1-ST LINE STARTS ADDRES 080h, 2-ND AT ADDRES 0C0h
;P1.7-P1.4 DB 7-4
;P1.2 - EN Level Trigger 1 -> 0
;P1.3 - RS Command - 0 Char - 1
;P1.1 - RW Read - 1 Write - 0


$MOD2051

EN EQU P1.2
RS EQU P1.3
RW EQU P1.1
LCD_PORT EQU P1

;=============================================================================
;SEEMS NOT TO WORK, HANG SOME MOMENT, PROBABLY OF TIMING

LCD_WAIT_UNTIL_BUSY:
ACALL LCD_DELAY_SHORT
CLR CY
MOV LCD_PORT,#11110010B
SETB EN
CLR EN
MOV C,LCD_PORT.7
MOV LCD_PORT,#11110010B
SETB EN
CLR EN
ACALL LCD_DELAY_SHORT
JB CY,LCD_WAIT_UNTIL_BUSY
RET
;=============================================================================
; ALL COMMANDS EXCEPT BUSY CHECK, PARAMETER IN ACC
; CHANGES LCD_PORT, AND ACC

LCD_SEND_COMMAND:
PUSH ACC
ANL ACC,#11110000B
MOV LCD_PORT,A
SETB EN
CLR EN
POP ACC
SWAP A
ANL ACC,#11110000B
MOV LCD_PORT,A
SETB EN
CLR EN
ACALL LCD_DELAY_SHORT
RET
;=============================================================================
; DISPLAY CHARACTER IN ACC, VOID ACC AND LCD_PORT.

LCD_SEND_ASCII:
PUSH ACC
ANL A,#11110000B
MOV LCD_PORT,A
SETB RS
SETB EN
CLR EN
POP ACC
SWAP A
ANL A,#11110000B
MOV LCD_PORT,A
SETB RS
SETB EN
CLR EN
CLR RS
ACALL LCD_DELAY_SHORT
RET
;=============================================================================
; DISPLAY STRING IN DPTR, TEXT FINISHED WITH #16d
; CHANGES DPTR TO FINISHING #16d

LCD_SEND_STRING:
PUSH ACC

LCD_SEND_STRING_NEXT_CHAR:
CLR A
MOVC A,_at_nospam_A+DPTR
CJNE A,#16,LCD_SEND_STRING_NOT_END
SJMP LCD_SEND_STRING_END

LCD_SEND_STRING_NOT_END:
ACALL LCD_SEND_ASCII
INC DPTR
SJMP LCD_SEND_STRING_NEXT_CHAR

LCD_SEND_STRING_END:
POP ACC
RET

;=============================================================================
; DISPLAY NUMBER 8 BIT, NUMBER IN ACC, DO NOT CHANGE ANY REGS, EXCEPT
ACC
;=============================================================================
LCD_SEND_NUMBER:
PUSH B
MOV B,#100
DIV AB
JB F0,LCD_SEND_NUMBER_IGNORE_FIRST
ADD A,#30H
ACALL LCD_SEND_ASCII
LCD_SEND_NUMBER_IGNORE_FIRST:
MOV A,B
MOV B,#10
DIV AB
ADD A,#30H
ACALL LCD_SEND_ASCII
MOV A,B
ADD A,#30H
ACALL LCD_SEND_ASCII
POP B
RET

;=============================================================================
; CLEAR DISPLAY AND SET DD_ADDRES TO 0

LCD_CLEAR:
PUSH ACC
MOV A,#1
ACALL LCD_SEND_COMMAND
ACALL LCD_DELAY_LONG
POP ACC
RET
;=============================================================================
LCD_SHIFT_RIGHT:
PUSH ACC
MOV A,#00011100B
ACALL LCD_SEND_COMMAND
POP ACC
RET
;=============================================================================
LCD_SHIFT_LEFT:
PUSH ACC
MOV A,#00011000B
ACALL LCD_SEND_COMMAND
POP ACC
RET
;=============================================================================
LCD_1_LINE:
PUSH ACC
MOV A,#080H
ACALL LCD_SEND_COMMAND
POP ACC
RET
;=============================================================================
LCD_2_LINE:
PUSH ACC
MOV A,#0C0H
ACALL LCD_SEND_COMMAND
POP ACC
RET
;=============================================================================

LCD_INIT:
ACALL LCD_DELAY_LONG ; INIT 8 BIT
MOV LCD_PORT,#00110000B
SETB EN
CLR EN
ACALL LCD_DELAY_LONG
MOV LCD_PORT,#00110000B ; INIT 8 BIT
SETB EN
CLR EN
ACALL LCD_DELAY_SHORT
MOV LCD_PORT,#00110000B ; INIT 8 BIT
SETB EN
CLR EN
ACALL LCD_DELAY_LONG
MOV LCD_PORT,#00100000B ; INIT 4 BIT
SETB EN
CLR EN
ACALL LCD_DELAY_LONG
MOV LCD_PORT,#00100000B ;4 BIT, 2 LINES, 5X8 ARRAY
SETB EN
CLR EN
MOV LCD_PORT,#11000000B
SETB EN
CLR EN
ACALL LCD_DELAY_SHORT
MOV LCD_PORT,#00000000B ; DISPLAY ON, CURSOR ON, BLINK ON
SETB EN
CLR EN
MOV LCD_PORT,#11110000B
SETB EN
CLR EN
ACALL LCD_DELAY_SHORT
RET

;=============================================================================
; 4 x 210 x 2 x 750 ns = 1.26 ms

LCD_DELAY_LONG:
PUSH 01
PUSH 02
MOV R1,#4
LCD_DEL_JMP:
MOV R2,#210
DJNZ R2,$
DJNZ R1,LCD_DEL_JMP
POP 02
POP 01
RET
;=============================================================================
; 40 x 2 x 250ns = 60us

LCD_DELAY_SHORT:
PUSH 02
MOV R2,#40
DJNZ R2,$
POP 02
RET
;=============================================================================

END.
--

Regards.
|-----------------------------------------------------|
| Milosz Skowyra |
| miloszek_at_nospam_fidonet.org.pl 2:484/2.47 on fidonet |
| GSM Mobile +48608888899 |
|-----------------------------------------------------|
Chcielismy odnalezc wlasna droge do raju...