Uživatel:Ondravoj

Z MAM wiki

Přejít na: navigace, hledání

Obsah

[editovat] Samostatná práce

Třída funkcí pro ovládání znakového LCD displeje.

[editovat] Zadání

Třída funkcí pro ovládání znakového LCD displeje
Počet řádků a sloupců by byl konfigurovatelný, i když třeba ne úplně obecný - podle vyráběných typů.

[editovat] pokračování

[editovat] druhá část programu

ZAPISDATA:	
    SET	                           ;T=1
	SBI PORT,RS	             ;RS=1
	RJMP ZAPIS
ZAPISPRIKAZ:	
    CLT            	             ;T=0
	CBI PORT,RS	             ;RS=0
ZAPIS:	
    MOV CNT2,REG            ;schovej REG
	SBI PORT,E	             ;E=1
	ANDI REG,$F0	             ;vymaskuj horní bity
	LSR REG	             ;>>1
	ORI REG,$04	             ;přidej E=1
	BLD REG,RS	             ;přidej RS(T)
	OUT PORT,REG             ;vystav
	CBI PORT,E	             ;E=0
	SBI PORT,E	             ;E=1
	MOV REG,CNT2            ;obnov REG
	ANDI REG,$0F	             ;vymaskuj dolní bity
	SWAP REG	             ;dej na místo horních
	LSR REG	             ;>>1
	ORI REG,$04	             ;přidej E=1
	BLD REG,RS	             ;přidej RS(T)
	OUT PORT,REG             ;vystav
	CBI PORT,E	             ;E=0
	RCALL CEK40	             ;počkej 40us
	BRTS UKONCI	             ;pokud T=1, konec
	MOV REG,CNT2           ;obnov REG
	ANDI REG,$03	            ;pro $01, $02, $03
	BRNE ZAPIS2	           ;čekej 1,6ms
UKONCI:	
              RET	
ZAPIS2:
	RCALL CEK1M6	
	RET	
;Paměť:
Text:
  .DB $FE,$85,"AHOJ",$FE,$C2,"JAK SE MAS?",$A0
  .EQU ADRTXT=2*TEXT         ;Adresa textu

;Čekací rutiny (CEKRUT):

  
	

		;čeká 40us
CEK40:
	LDI CNT1,40
CEK40A:	
	DEC CNT1
	BRNE CEK40A	
	RET	
		;čeká 100us
CEK100:
	LDI CNT1,100
CEK100A:	
	DEC CNT1
	BRNE CEK100A	
	RET	
		;čeká CNT2*100us
CEKM:	
              RCALL CEK100	
	DEC CNT2	
	BRNE CEKM	
	RET	
		;čeká 1,6ms
CEK1M6:
	LDI CNT2,16	
	RCALL CEKM	
	RET	
		;čeká 4,1ms
CEK4M1:
	LDI CNT2,41	
	RCALL CEKM	
	RET	
	

	;čeká 15ms
CEK15M:
	LDI CNT2,150	
	RCALL CEKM	
	RET	

Podprogramy "ZAPISPRIKAZ" a "ZAPISDATA" jsou prakticky stejné. Liší se pouze v aktivitě signálu RS, kterým se určuje, zda se jedná o data či příkaz.
Chci-li zapsat znak/příkaz, který je uložen v registru REG, je třeba nejdříve vyslat horní 4 bity registru a následně dolní 4 bity. Dále je třeba odměřit korektní čekací intervaly. U zápisu dat a jednodušších příkazů se čeká 40 us. Ovšem u příkazů $01, $02 a $03 je nutno čekat 1,6 ms, proto se testuje o jaký typ zápisu jde a dle toho je odměřen příslušný interval (podprogram "ZAPIS").
V další části jsou uloženy znaky do programové paměti. První z nich je $FE. Jedná se o posun kurzoru na zadanou pozici, která je určena následujícím bajtem. Realizace posunutí je provedena za pomocí instrukce "nastavení adresy v DDRAM", proto je nejvyšší bit vždy 1. Př.: $85=0b10000101, jedná se tedy o posuv kurzoru na adresu 5 v prvním řádku. Symbol A0 značí konec vypisovaného řetězce.
Paměť "DDRAM" je paměť, kde jsou uloženy předdefinované znaky, které můžeme na displej vypisovat. Každému údaji vyslanému na displej (1 bajt), odpovídá jeden zobrazený znak (dle následující tab.)
Soubor:znaky.jpg
Koncem programu jsou čekací rutiny, které jsou nastaveny pro taktovací frekvenci 1MHz.

Soubor:LCD_foto.jpg

Osobní nástroje