-
-
Save teamon/1002979 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
P5 EQU 0F8H | |
P7 EQU 0DBH | |
LJMP START | |
ORG 0100H | |
LCDstatus EQU 0FF2EH | |
LCDcontrol EQU 0FF2CH | |
LCDdataWR EQU 0FF2DH | |
LCDdataRD EQU 0FF2FH | |
INIT EQU 0x38 | |
LINE1 EQU 0x80 | |
LINE2 EQU 0xc0 | |
CURS EQU 0x0e | |
CLEAR EQU 0x01 | |
WAIT: ; oczekiwanie na gotowosc wyswietlacza | |
MOV DPTR, #LCDstatus | |
MOVX A, @DPTR | |
JB ACC.7, WAIT | |
RET | |
PUTCHAR: ; funkcja wysylajaca komende | |
PUSH ACC | |
CALL WAIT | |
MOV DPTR, #LCDdataWR | |
POP ACC | |
MOVX @DPTR, A | |
RET | |
PUTCTRL: ; funkcja wysylajaca znak | |
PUSH ACC | |
CALL WAIT | |
MOV DPTR, #LCDcontrol | |
POP ACC | |
MOVX @DPTR, A | |
RET | |
START: | |
MOV A, #INIT | |
CALL PUTCTRL | |
MOV A, #CLEAR | |
CALL PUTCTRL | |
MOV A, #CURS | |
CALL PUTCTRL | |
; MOV A, #97 | |
; CALL PUTCHAR | |
; MOV A, #99 | |
; CALL PUTCHAR | |
; MOV A, #LINE2 | |
; CALL PUTCTRL | |
; MOV A, #20 | |
; CALL PUTCHAR | |
; MOV A, #100 | |
; CALL PUTCHAR | |
;klawiatura | |
MOV R5, #2 | |
MOV R6, #16 | |
KLAWIATURA: | |
; Blok który wrzuca wartość klawisza do DPTR pod adresem który | |
; jest ; kodem skaningowym tego klawisza ( starsze bity to 80, | |
; młodsze to kod) | |
MOV DPH, #080H ; 80 do starszych bitów adresu | |
MOV DPL, #077H | |
MOV A, #49 | |
MOVX @DPTR, A | |
MOV DPL, #07bH | |
MOV A, #50 | |
MOVX @DPTR, A | |
MOV DPL, #07dH | |
MOV A, #51 | |
MOVX @DPTR, A | |
MOV DPL, #07eh | |
MOV A, #65 | |
MOVX @DPTR, A | |
MOV DPL, #0b7H ; 2. wiersz | |
MOV A, #52 | |
MOVX @DPTR, A | |
MOV DPL, #0bbH | |
MOV A, #53 | |
MOVX @DPTR, A | |
MOV DPL, #0bdH | |
MOV A, #54 | |
MOVX @DPTR, A | |
MOV DPL, #0beh | |
MOV A, #66 | |
MOVX @DPTR, A | |
MOV DPL, #0d7H ; 3.wiersz | |
MOV A, #55 | |
MOVX @DPTR, A | |
MOV DPL, #0dbH | |
MOV A, #56 | |
MOVX @DPTR, A | |
MOV DPL, #0ddH | |
MOV A, #57 | |
MOVX @DPTR, A | |
MOV DPL, #0deh | |
MOV A, #67 | |
MOVX @DPTR, A | |
MOV DPL, #0e7h ; 4.wiersz | |
MOV A, #42 | |
MOVX @DPTR, A | |
MOV DPL, #0ebH | |
MOV A, #48 | |
MOVX @DPTR, A | |
MOV DPL, #0edH | |
MOV A, #35 | |
MOVX @DPTR, A | |
MOV DPL, #0eeh | |
MOV A, #68 | |
MOVX @DPTR, A | |
MOV P5, #01111111B ; wybranie początkowego wiersza (1,2,3,A) | |
L1: | |
MOV R2, #04H ; ustawienie licznika wiersza na 4 (bo tyle wierszy) | |
L2: | |
MOV A, P7 ; wartość bitowa kolumny z klawiatury do akumulatora | |
CPL A ; negacja akumulatora (1 tam gdzie wciśnięta kolumna, reszta 0) | |
JZ L5 ; czy jest wciśnięty przycisk danego wiersza -> L5 | |
MOV R1, P5 ; jeśli tak wrzuć wartość bitowa kolumn do R1 | |
XRL A, R1 ; wykonaj operacje xor aby połączyć wartości bitowej danej kolumny i danego wiersza (0 tam gdzie wciśnięte) | |
MOV DPH, #080H ; ustawienie starszych bitów adresu na 80 | |
MOV DPL, A ; wrzucenie kodu skaningowego do młodszych bitów adresu | |
JMP L7 | |
L4: | |
MOVX A,@DPTR ; wrzucenie wartości klawisza o kodzie skaningowym z linijki wyżej | |
CALL PUTCHAR | |
DJNZ R6, L5 ; sprawdzenie czy koniec lini | |
MOV R6, #16 | |
MOV A, #LINE2 | |
CALL PUTCTRL | |
DJNZ R5, L5 ; sprawdzenie ktora linia | |
MOV R5, #2 | |
MOV A, #CLEAR | |
CALL PUTCTRL | |
MOV A, #CURS | |
CALL PUTCTRL | |
L5: | |
MOV A, P5 ; przesunięcie bitowe w prawo | |
RR A ; czyli wybranie następnego wiersza | |
MOV P5, A | |
DJNZ R2, L2 ; zmniejsza licznik wiersza o jeden, jeśli licznik różny od 0 to idź do L2, czyli przeszukaj wiersz niżej | |
JMP KLAWIATURA ; jeśli licznik równy 0 zacznij program od nowa | |
L7: | |
MOV P5, #01111111B ; wybranie początkowego wiersza (1,2,3,A) | |
MOV R2, #04H ; ustawienie licznika wiersza na 4 (bo tyle wierszy) | |
L8: | |
MOV A, P7 ; wartość bitowa kolumny z klawiatury do akumulatora | |
CPL A ; negacja akumulatora (1 tam gdzie wciśnięta kolumna, reszta 0) | |
JZ L6 ; czy jest wciśnięty przycisk danego wiersza, jeśli nie idź do L6 | |
JMP L7 ; jeśli cos jest wciśnięte L7 od nowa | |
L6: | |
MOV A, P5 ; przesunięcie bitowe w prawo | |
RR A ; czyli wybranie następnego wiersza | |
MOV P5, A | |
DJNZ R2, L8 ; zmniejsza licznik wiersza o jeden, jeśli licznik różny od 0 to idź do L8, czyli przeszukaj wiersz niżej | |
JMP L4 ; jeśli licznik równy 0 i nic nie wciśnięto, to działaj dalej czyli wyświetl klawisz na diodach | |
NOP | |
NOP | |
NOP | |
JMP $ | |
END START | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment