;
; PISZ_D - zapis bajtu danych do RAM wyświetlacza.
;
; PISZ_K - zapis komendy sterującej wyświetlaczem
; WE: BuZDa - bajt do zapisu
; WY: -
; ZMIENIA: BuZDa, LiBit.
;
PISZ_K:
cbi PORTB,N_DC ;zeruj D/C - będzie wysyłana komenda
rjmp PISZ0
PISZ_D:
sbi PORTB,N_DC ;ustaw D/C - będą wysyłane dane
PISZ0:
ldi LiBit,8 ;do przesłania 8 bitów
cbi PORTB,N_SCE ;zezwolenie na przyjęcie danych/rozkazu
PISZ1: cbi PORTB,N_SCLK ;opadające zbocze sygnału zegarowego
lsl BuZDa ;C<--R7<--R6,...,R0<--0
brcs PISZ3 ;skok, jeśli C=1
cbi PORTB,N_SDIN ;C=0, wyślij 0
PISZ2: sbi PORTB,N_SCLK ;narastające zbocze sygnału zegarowego
dec LiBit
brne PISZ1 ;jeśli nie koniec bajtu
sbi PORTB,N_SCE ;koniec - zapis zabroniony
ret
PISZ3: sbi PORTB,N_SDIN ;C=1, wyślij 1
rjmp PISZ2
;
; N_INIT - procedura inicjacji wyświetlacza
;
; CLRLCD - procedura wygaszania całego wyświetlacza
; WE: -
; WY: -
; ZMIENIA: BuZDa, LiPet.
;
N_INIT:
sbi PORTD,N_WZAS ;załącz zasilanie wyświetlacza
ldi LiPet,0x06 ;opóźnienie 6*5,15 ms = 31 ms
rcall DEL1
cbi PORTB,N_RES ;podaj sygnał RESETU wyświetlacza
nop
nop
nop
nop
sbi PORTB,N_RES ;koniec RESETU (min. to 100ns)
ldi BuZDa,0x21 ;przełącz na komendy rozszeraone
rcall PISZ_K
ldi BuZDa,0xC8 ;ustaw kontrast
rcall PISZ_K
ldi BuZDa,0x06 ;ustaw współczynnik korekcji temperaturowej
rcall PISZ_K
ldi BuZDa,0x13 ;ustaw współczynnik multipleksowania 1:48
rcall PISZ_K
ldi BuZDa,0x20 ;przeł. na komendy stand., adresowanie poz.
rcall PISZ_K
ldi BuZDa,0x0C ;konfiguracja: tryb standardowy
rcall PISZ_K
CLRLCD:
ldi TempH,0x40 ;zeruj licznik wierszy
mov Buf_Y,TempH
ldi TempH,0x80 ;zeruj licznik kolumn
mov Buf_X,TempH
;wygaś cały wyświetlacz (2*0xFC = 504 D)
ldi LiPet,0xFC
rcall GasPx
ldi LiPet,0xFC
rcall GAS
ret
;
; DELAY - procedura opóźniająca około 5,15 ms
; DEL1 - procedura opóźniające LiPet*5,15 ms. Dodatkowo na wejściu
; do procedury należy podać mnożnik 5,15 ms (LiPet)
; WE: - lub LiPet (dla DEL1)
; WY: -
; Zmienia: LiPet, TempH, TempL
;
DELAY: ldi LiPet,1 ;opóźnienie 5,15 ms
DEL1: ldi TempH,0x10 ;opóźnienie {LiPet*5,15 ms}
mov TempL,TempH
ldi TempH,0x11
DEL2: nop
nop
dec TempL
brne DEL2 ;skocz, jeśli nie zero
dec TempH
brne DEL2 ;skocz jeśli nie zero
dec LiPet
brne DEL1
ret