Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CMD_WR EQU 0FF2CH ; Sets CGRAM address
- DATA_WR EQU 0FF2DH ; Sets DDRAM address
- READ_STATUS EQU 0FF2EH ; Reads busy flag
- INIT EQU 038H ; Function Set
- CLEAR EQU 001H ; Clear display
- TURN_ON EQU 06H ; Display ON Cursor ON Blink OFF
- COLUMN EQU 0DBH ;Kolumna
- ORG 0
- START:
- LCALL INIT_LCD
- MOV R3, #0 ; R3=0 – nic nie wcisniete, R3=1 - wcisniete
- START2:
- MOV A, R3
- JZ CLEAR_LCD ;Jeżeli A=0 to nic nie jest wcisniete i czysci wyswietlacz
- LCALL odczyt_wiersza
- SJMP START2
- ;----------------------------------------------
- ; Odczyt wiersza A = maska wyboru wiersza
- ; Wyjscie CY = 0 - nic nie wcisniete
- ; CY = 1 - A kod klawisza (0..3) 0 - z prawej
- ;----------------------------------------------
- odczyt_wiersza:
- MOV A, COLUMN
- CPL A
- ANL A, #00001111B
- MOV R0, #4
- LOOP:
- JB ACC.3, RESULT
- RL A
- DJNZ R0, LOOP
- MOV R3, #0
- RET
- RESULT:
- MOV R3, #1
- DEC R0
- MOV A, R0
- ADD A, #'0'
- LCALL WRITE_CHAR
- RET
- INIT_LCD:
- MOV A, #INIT ;inicjalizacja wyswietlacza
- LCALL WRITE_CMD
- MOV A, #CLEAR ;czyszczenie wyswietlacza
- LCALL WRITE_CMD
- MOV A, #TURN_ON ;wlaczenie wyswietlacza
- LCALL WRITE_CMD
- RET
- CLEAR_LCD:
- MOV A, #CLEAR ;czyszczenie wyswietlacza
- LCALL WRITE_CMD
- RET
- WRITE_CMD:
- LCALL CHECK_BUSY ;sprawdza czy wyswietlacz jest zajety
- MOV DPTR, #CMD_WR ;przeslanie adresu linii sterowania
- MOVX @DPTR, A ;przeslanie akumulatora na linie sterowania
- RET
- WRITE_CHAR:
- LCALL CHECK_BUSY ;sprawdza czy wyswietlacz jest zajety
- MOV DPTR, #DATA_WR ;przeslanie adresu linii zapisu danych
- MOVX @DPTR, A ;przeslanie akumulatora na linie zapisu danych
- RET
- CHECK_BUSY:
- PUSH ACC
- MOV DPTR, #READ_STATUS ;odczytanie statusu
- CB_LOOP:
- MOVX A, @DPTR
- JB ACC.7, CB_LOOP
- POP ACC
- RET
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement