Re: 51' i LCD



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: Romuald Bialy <romekb_at_nospam_polbox.com>
Subject: Re: 51' i LCD
Date: Thu, 17 May 2001 19:48:34 +0200


Tomasz Trojanowski wrote:

Moze ja tez dodam swoje 3 grosze.
Procedury optymalizowane na dlugosc kodu i latwosc modyfikacji pinow I/O
(wykorzystanie SETB i CLR).
Calosc nalezy uzupelnic o dwie procedury opoznien:
DEL1 - odczekanie 1ms
DEL4 - odczekanie 4ms


;4 BITOWA OBSLUGA LCD Z TESTEM BUSY PRZED WYSLANIEM ZNAKU
;------------------------------------------------------------------------------
;Pin declarations:

LCD EQU P1 ;DANE NA WYSWIETLACZ LCD (P1.4-P1.7)
LCD_E EQU P1.3 ;ENABLE DLA LCD
LCD_RW EQU P1.1 ;WRITE/READ DLA LCD
LCD_RS EQU P1.2 ;COMMAND/DATA DLA LCD


START: CLR EA
MOV SP,#STOS
MOV LCD,#0
MOV PSW,A
MOV PCON,A
MOV SCON,A
MOV TCON,A
MOV IE,#0

; ******************************************************************************
;* PROGRAMOWY RESET WYSWIETLACZA + INICJALIZACJA *
; ******************************************************************************
LCDRST: MOV LCD,#00110001B ;RESET LCD Bit D4 i D5=1 (P1.0=wolne
wejscie)
SETB LCD_E
CLR LCD_E
ACALL DEL4 ;DELAY 4ms
SETB LCD_E
CLR LCD_E
ACALL DEL1 ;DELAY 1ms
SETB LCD_E
CLR LCD_E
ACALL DEL1 ;DELAY 1ms
CLR LCD.4 ;Bit D4=0
SETB LCD_E
CLR LCD_E
ACALL DEL1 ;DELAY 1mS

LCDINIT:MOV A,#28H ;INIT LCD 4 BIT, 2 LINE 5X7 DOTS
ACALL WRCOM
MOV A,#28H ;INIT LCD 4 BIT, 2 LINE 5X7 DOTS
ACALL WRCOM
MOV A,#0CH ;CURSOR OFF & DISPLAY ON
ACALL WRCOM
MOV A,#06H ;CURSOR MOVE LEFT WHEN DATA IS RECIVED
ACALL WRCOM
ACALL DEL1 ;DELAY 1ms
ACALL CLS ;CZYSZCZENIE EKRANU


; TU ROBIMY DALEJ DO WOLI. PRZYKLAD
ACALL OUTTXT
DB 1,'HELLO...',2,'ZYJE !!!',0
SJMP $



; ****************************************************************************
;* PROCEDURY OBSLOGI WYSWIETLACZA LCD *
; ****************************************************************************
; Wyswietla text z pamieci ROM podany w DB po wywolaniu LCALL, kody 1 i
2 zmieniaja
; linie, zakonczenie kodem 0. Znaki definiowane to kody od 8 do 15.
; Modyfikuje: ACC, DPTR
; Przyklad:
;
; ACALL OUTTXT
; DB 1,'Pierwsza linia',2,'I druga',0
; Kolejne rozkazy...
;

OUTTXT: POP DPH
POP DPL
OUTTXL: CLR A
MOVC A,_at_nospam_A+DPTR
INC DPTR
JZ Z1
CJNE A,#1,SET2LI
MOV A,#80H ;1 LINIA
ACALL WRCOM
SJMP OUTTXL
SET2LI: CJNE A,#2,OUTTXB
ACALL WRCO2L ;2 LINIA
SJMP OUTTXL
OUTTXB: ACALL WRDAT
SJMP OUTTXL
Z1: JMP _at_nospam_A+DPTR

; **************************************************************************
;CURSOR MOVE AND CLEAR DISPLAY

CLS: MOV A,#1
ACALL WRCOM
CLR A
GOTO: ADD A,#80H ;add control code
SJMP WRCOM

; ***************************************************************************
; Funkcje wysylania komend lub znakow do wyswietlacza LCD
;-----------------------------------------------------------------------------
;Modyfikuje ACC

WRCO2L: MOV A,#0C0H ;USTAWIENIE NA 2 LINIE
WRCOM: ACALL BUSY ;WYSYLANIE KOMEND
CLR LCD_RS ;BEDA WYSYLANE KOMENDY
SJMP WR1
WRDAT: ACALL BUSY ;WYSYLANIE DANYCH
SETB LCD_RS ;BEDA WYSYLANE DANE
WR1: CLR LCD_RW ;PRZELACZENIE NA ZAPIS DO LCD
PUSH ACC
ACALL WR2
POP ACC
SWAP A
WR2: ANL A,#0F0H ;4 STARSZE
ANL LCD,#0FH ;MASKA NA DANE
ORL LCD,A ;WYSLANIE 4 BITOW
WR3: SETB LCD_E ;ENABLE
CLR LCD_E ;DISABLE
RET

BUSY: CLR LCD_RS ;ODCZYT REJESTRU KOMEND (FLAGA BUSY)
SETB LCD_RW
ORL LCD,#0F0H ;4 MLODSZE I RW PORTU = 1
SETB LCD_E ;UAKTYWNIENIE LCD
BUSW1: JB LCD.7,BUSW1 ;DISPLAY READY D7
CLR LCD_E ;ZABLOKOWANIE LCD
SJMP WR3
; ***************************************************************************


--
Pozdrawiam.... Romuald Bialy
E'mail: romekb_at_nospam_polbox.com
WWW: http://www.polbox.com/r/romekb