Skip to content

Instantly share code, notes, and snippets.

Created May 26, 2011 08:54
Show Gist options
  • Save anonymous/992799 to your computer and use it in GitHub Desktop.
Save anonymous/992799 to your computer and use it in GitHub Desktop.
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