Ovládání znakového LCD 20×4 znaků
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama

Ovládání znakového LCD 20×4 znakůOvládání znakového LCD 20×4 znaků

 

Ovládání znakového LCD 20×4 znaků

Google       Google       2. 1. 2007       25 744×

Tento článek je určen jako malý návod, jak komunikovat, zapojit a používat „inteligentní“ znakové displeje. Je zde uveden příklad programu a zapojení pro displej MC 2004B-SYL (20×4 znaky s podsvícením). Článek je určen spíše mírně zkušenějším v oblasti asembleru 8051 (v zapojení je použit 89c2051).

Reklama
Reklama

Někdy je potřeba při vývoji nějákého zařízení myslet na to, aby dávalo uživateli informace o svém stavu prostřednictvím textové informace. Takovýmito zařízeními mohou být kupříkladu různé prodejní automaty, čtečky identifikačních karet, zabezpečovací zařízení atd. A zde se nabízí možnost použít právě tyto inteligentní zobrazovače. Jak už z názvu vyplývá, bude tento článek pojednovát o čtyřřádkovém a dvacetisloupcovém zobrazovači MC 2004B-SYL.

Tato standardizovaná řada displejů (obvykle s řadičem HD44780) je vybavena speciální sadou instrukcí, sloužících ke komunikaci s tímto displejem. Displej rovněž obsahuje znakovou paměť (standardní znaky) a je možné i uživatelsky znaky definovat. Velkou výhodou je paměť RAM, umožňující zapamatování textové informace. Displej umožňuje komunikaci po 8-bitové nebo 4-bitové datové sběrnici, přičemž je potřeba ještě dalších řídících signálů (min. dva). Není cílem tohoto článku detailní rozbor komunikace s tímto zařízením (ten můžete nalézt v odkazech k tomuto článku), ale spíše praktické hledisko (příklad zapojení a příklad programu). Obslužný program byl napsán s ohledem na modularitu dalšího použití.

Schéma zapojení

Schéma zapojení je patrné z přiloženého obrázku. Je zde použito procesoru 89c2051, což však není podmínkou. Program lze použít pro většinu procesorů z řady 51. Praktická realizace záleží na každém. Já osobně jsem při testování použil nepájivé kontaktní pole. V zapojení je použito čtyřbitové komunikace, a to hlavně kvůli snaze o ušetření počtu I/O pinů procesoru. K obsluze displeje jsou tudíž potřeba 4 datové vodiče a 2 řídící. Pokud bychom chtěli ještě řídit podsvícení displeje, bylo by zapotřebí dalšího vývodu procesoru. Troufnu si říct, že je zobrazování tímto displejem velmi efektní a účelné. A jeho využití závisí hlavně na fantazii konstruktéra.

Ovládací SW pro 89c2051 – komentář

Ovladač je napsán v assembleru. Myslím, že pro mírně zkušenějšího programátora nebude problém si tyto procedury aplikovat do kódu např. v jazyce C. Snažil jsem se zvládnout alespoň základní procedury práce s tímto displejem. Jsou to zejména tyto:

  • INITLCD – inicializační sekvence displeje
  • WRDATA/WRCMD – zapíše data/příkaz do displeje
  • CLRLCD – smaže displej
  • GOTOXY – ukazatel adresy na pozici X,Y
  • WRSTR – zapíše na displej řetězec
Tyto procedury je možné dále využít, resp. poupravit si je. Program je otestován a pracuje bez dalších komplikací. Díky použití zásobníku by mělo být zaručeno, že program nepřepíše v žádné proceduře jiné registry než ty, přes které jsou předávány parametry. Snažil jsem se psát tyto podprogramy pokudmožno efektivně.

Shrnutí

V dnešní době jsou již tyto displeje natolik dostupné, že nic nebrání jejich použití v menších aplikacích, jako jsou různé terminály, teplotní čidla a podobně. Rovněž jejich ovládání je natolik jednoduché, že nezabere přiliš mnoho paměti programu. Myslím si, že tento prvek najde široké uplatnění ve vašich aplikacích…

Použité součástky

  • 89C2051 – 1 ks
  • MC2004 – 1 ks
  • Res.: 10k – 2 ks, 10k(trimr) – 1 ks
  • Cap.: 33 p – 2 ks, 4u7 (elyt) – 1 ks
  • Crystal: 11,0592 MHz – 1 ks

Ovládací SW pro 89c2051 – Download

Ovládač je k nahlédnutí zde: LCD 20×4 driver.

Celkovou funkcí tohoto programu je inicalizovat a otestovat displej a poté na něj zobrazit postupně 4 řádky textu zapsaného v programové paměti CPU.

Odkazy

  • Fotky z praktické realizace: Fotky
  • Kde je možné displej sehnat: Prodejce
  • Informace o displeji: Info
  • Alfanumerické displeje: Info

Výpis programu

;********************************************************
;DEMONSTRATION PROGRAM TO USE LCD CHAR DISPLAY
;4 BITS COMMUNICATION USED PROCESSOR - x51 FAMILY MODEL
;CONNECTION BETWEEN DISPLAY AND CPU: 
;	   P1.0 - DIS.D4
;	   ....
;	   P1.3 - DIS.D7
;	   P1.4 - DIS.E
;	   P1.5 - DIS.RS
;CREATED BY VAGOVSZKYM - VAGOVSZKYM[AT]CENTRUM[DOT]CZ
;********************************************************
;DEFINITION:
;........................................................
RS	BIT	95H	;P1.5
E	BIT	94H	;P1.4	
;********************************************************
;MAIN PROCEDURE
;********************************************************
	org	00H
START:	CALL	INITLCD		;INITIALIZE THE DISPLAY
	CALL	TESTLCD		;TEST DISPLAY WRITE 0FFH ALL
	CALL	CEK1S		;WAIT 1 SECOND
	CALL	CLRLCD		;CLEAR DISPLAY
	MOV	A,#4D		;X POS 
	MOV	B,#1D		;Y POS 
	CALL	GOTOXY
	MOV	DPTR,#text	;GET AN ADRESS OF STRING
	CALL	WRSTR		;WRITE STRING ON POSITION
	MOV	A,#3D
	MOV	B,#2D
	CALL	GOTOXY
	MOV	DPTR,#text1
	CALL	WRSTR
	MOV	A,#2D
	MOV	B,#3D
	CALL	GOTOXY
	MOV	DPTR,#text2
	CALL	WRSTR
	MOV	A,#5D
	MOV	B,#4D
	CALL	GOTOXY
	MOV	DPTR,#text3
	CALL	WRSTR
	JMP	$	
;**********************************************************************
;	INITIALIZATION	LCD
;**********************************************************************
INITLCD:
	PUSH	0E0H
	CALL	CEK15M		;WAIT UNTIL POWER IS STABLE
	CLR	RS
	CLR	E
	MOV	A,#30H
	CALL	HELPINIT
	CALL	CEK1M6
	CALL	CEK1M6
	CALL	CEK1M6

	MOV	A,#30H
	CALL	HELPINIT
	CALL	CEK40U
	CALL	CEK40U
	CALL	CEK40U

	MOV	A,#30H
	CALL	HELPINIT
	CALL	CEK40U

	MOV	A,#20H
	CALL	WRCMD
	MOV	A,#28H
	CALL	WRCMD
	MOV	A,#08H
	CALL	WRCMD
	MOV	A,#0CH
	CALL	WRCMD	
	MOV	A,#06H
	CALL	WRCMD
	POP	0E0H
	RET

HELPINIT:
	ANL A,#0F0H			; send high nybble first
	RR A
	RR A
	RR A
	RR A
	ANL P1,#0F0H
	ORL P1,A
	
	SETB E			; give E pulse
	NOP
	NOP
	NOP
	CLR E
	RET

;******************************************************************
;WRDATA - WRITE DATA TO LCD
;WRCMD - WRITE COMMAND TO LCD
;
;DATA OR COMMAND MUST BE IN ACUMULATOR
;******************************************************************
WRDATA:	SETB	RS
	JMP	WR1
WRCMD:	CLR	RS
WR1:	
;.......................................
	PUSH 0D0H
	PUSH 02H
	CLR RS0
	CLR RS1
	MOV R2,A
	ANL A,#0F0H			; send high nybble first
	RR A
	RR A
	RR A
	RR A
	ANL P1,#0F0H
	ORL P1,A
	
	SETB E
	NOP
	NOP
	NOP				; give E pulse
	CLR E
	
	MOV A,R2
	ANL A,#0FH			; send lower nybble
	ANL P1,#0F0H
	ORL P1,A
		
	SETB E				; give E pulse
	NOP
	NOP
	NOP
	CLR E
	POP 02H
	POP 0D0H
;...............................
	JB	RS,WR2		;IF RS=1 GO TO WR2 -DATA
	CJNE	A,#01H,TEST1	;TEST IF CMD IS CLEARDISPLAY	
	JMP	WR3		;IF CMD=CLEARDISPLAY GOTO WR3
TEST1:	CJNE	A,#02H,TEST2	
	JMP	WR3
TEST2:	CJNE	A,#03H,WR2
	JMP	WR3				
WR2:	CALL	CEK40U
	JMP	ED0
WR3:	CALL	CEK1M6
ED0:	RET

;******************************************************************
;	CLRLCD - CLEAR THE DISPLAY
;******************************************************************

CLRLCD:
	MOV	A,#01H
	CALL	WRCMD
	RET

;******************************************************************
;	GOTOXY	- GO TO X,Y POSITION ON DISPLAY
;		- X IN ACC; Y IN B REG.(0F0H)
;	THIS PROCEDURE SET ADRESS ONLY, NOT SEND ANY DATA TO LCD
;------------------------------------------------------------------
;	X=1    X=2    X=3    ...    X=20	
;Y=1   [1;1]  [2;1]  [3,1]   ...   [20,1] 
;Y=2   [1;2]  [2;2]  [3;2]   ...   [20;2]
;Y=3   [1;3]  [2;3]  [3;3]   ...   [20;3]
;Y=4   [1;4]  [2;4]  [3;4]   ...   [20;4]
;******************************************************************

GOTOXY: DEC	A	;A=A-1
	PUSH	0E0H
	MOV	A,B
	CJNE	A,#1H,NEXT1
	JMP	IS1		;IF A=1 JMP TO IS1
NEXT1:	CJNE	A,#2H,NEXT2
	JMP	IS2		;IF A=2 JMP TO IS2
NEXT2:	CJNE	A,#3H,NEXT3	
	JMP	IS3		;IF A=3 JMP TO IS3
NEXT3:	JMP	IS4		;IF A=3 JMP TO IS4
IS1:	POP	0E0H
	ADD	A,#00H
	JMP	DOIT1
IS2:	POP	0E0H
	ADD	A,#40H
	JMP	DOIT1
IS3:	POP	0E0H
	ADD	A,#14H
	JMP	DOIT1
IS4:	POP	0E0H
	ADD	A,#54H
DOIT1:	ORL	A,#10000000B
	CALL	WRCMD
	RET
;*************************************************
;	WRSTR - WRITE STRING TO ACTUAL POSITION
;	STRING ADRESS IS IN DPTR
;	STRING END IS 00H
;*************************************************
WRSTR:	PUSH	0E0H
	MOV	A,#00H
LOOP1:	CLR	A
	MOVC	A,@A+DPTR
	CJNE	A,#00H,ZAPIS1
	JMP	KONEC1
ZAPIS1:	CALL	WRDATA
	INC	DPTR
	JMP	LOOP1
KONEC1:	POP	0E0H
	RET
;******************************************************************
;	WAITING PROCEDURES  XTALL=11,0592MHz
;******************************************************************
;	WAIT 15 MS
;.................................................................
CEK15M:	PUSH	0D0H
	PUSH	00H
	PUSH	01H
	CLR	RS0
	CLR	RS1
	MOV	R0,#0FFH
	MOV	R1,#1EH
WO:	DJNZ	R0,WO
	DJNZ	R1,WO
	POP	01H
	POP	00H
	POP	0D0H
	RET
;.................................................................
;	WAIT	40US
;.................................................................
CEK40U:	PUSH	0D0H
	PUSH	00H
	CLR	RS0
	CLR	RS1
	MOV	R0,#13H
WU:	DJNZ	R0,WU
	POP	00H
	POP	0D0H
	RET
;................................................................
;	WAIT	1,64MS
;................................................................
CEK1M6:	PUSH	0D0H
	PUSH	00H
	PUSH	01H
	CLR	RS0
	CLR	RS1
	MOV	R0,#03H
	MOV	R1,#4H
WT:	DJNZ	R0,WT
	DJNZ	R1,WT
	POP	01H
	POP	00H
	POP	0D0H
	RET
;................................................................
;	WAIT	1S
;................................................................
CEK1S:	PUSH	0D0H
	CLR	RS0
	CLR	RS1
	PUSH	00H
	PUSH	01H
	PUSH	02H
	MOV	R0,#0FFH
	MOV	R1,#0FFH
	MOV	R2,#8H
WE:	DJNZ	R0,WE
	DJNZ	R1,WE
	DJNZ	R2,WE
	POP	02H
	POP	01H
	POP	00H
	POP	0D0H
	RET

;**************************************************************
;	TEST DISPLAY
;**************************************************************
TESTLCD:
	PUSH 0D0H
	PUSH 00H
	CLR RS0
	CLR RS1
	MOV R0,#80D
WRT:	MOV A,#0FFH
	CALL WRDATA
	DJNZ R0,WRT
	POP 00H
	POP 0D0H
	RET

;//////////////////////////////////////////////////////////////
;	DATA TABLES
;//////////////////////////////////////////////////////////////

text:	DB "THIS IS DRIVER",00
text1:	DB "FOR LCD DISPLAY",00
text2:	DB "20 x 4 CH. PROGR.:",00
text3:	DB "VAGOVSZKYM",00

	END

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

Hlasování bylo ukončeno    
0 hlasů
Google
Autor se zajímá převážně o webdesign, PHP, automatizační techniku, programování v ASM, programování jednochipů v C a HW design.

Nové články

Obrázek ke článku Hackerský kongres přiveze v září do Prahy špičky světové kryptoanarchie

Hackerský kongres přiveze v září do Prahy špičky světové kryptoanarchie

Hackerský kongres HCPP16 pořádá od 30. září do 2. října nezisková organizace Paralelní Polis již potřetí, a to ve stejnojmenném bitcoinovém prostoru v pražských Holešovicích. Letos přiveze na třídenní konferenci přes 40 většinou zahraničních speakerů – lídrů z oblastí technologií, decentralizované ekonomiky, politických umění a aktivismu. Náměty jejich přednášek budou také hacking, kryptoměny, věda, svoboda nebo kryptoanarchie.

Reklama
Reklama
Obrázek ke článku ICT PRO školení zaměřené nejenom na ICT

ICT PRO školení zaměřené nejenom na ICT

Dovolte, abychom se představili. Jsme zaměstnanci společnosti ICT Pro, profesionálové v oblasti poskytování komplexních ICT služeb. Neboli služeb spojených s informačními a komunikačními technologiemi, které dnes - ve 21. století - tvoří  nedílnou součást běžného provozu všech moderních firem.

loadingtransparent (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })();
Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý