Witam - mam pytanko - mam program który skanuje klawiaturę i zwraca liczbę w zależności jaki został wciśnięty klawisz a ja chcę na wyświetlaczu wyświetlić wciśniety klawisz pomijając * i #. Kod jaki otrzymuje klawisz po wciśnięciu wygląda następująco:
KLAWIATURA (wartość R0 po zeskanowaniu)
; +----+----+----+
; | 11 | 10 | 9 | row3
; +----+----+----+
; | 8 | 7 | 6 | row2
; +----+----|----+
; | 5 | 4 | 3 | row1
; +----+----+----+
; | 2 | 1 | 0 | row0
; +----+----+----+
; col2 col1 col0
Więc klawiszowi 1 odpowiada wartość 11
klawiszowi 2 odpowiada wartość 10
.................
klawiszowi 0 odpowiada wartość 1
klawiszowi hasz odpowiada wartość 0
Wszystko udało mi się prawie dobrze bo prawidłowo wyświetlane są na LED cyfry 0,9,8,5,4,3,2
natomiast zamiast:
1 pojawia się 3
7 pojawia się 9
6 pojawia się 9
moje pytanie dlaczego??
Poniżej kod:
Za każdym razem jak śledziłem krok po kroku i liczyłem wartość R0 była prawidłowa jednak w przypadku gdy powinna byc petla:
wypisz1 program wchodzi do petli wypisz3 pomimo że R0 wg mnie = 11 bo liczyłem
wypisz7 program wchodzi do petli wypisz9 pomimo że R0 wg mnie = 5 bo liczyłem
wypisz6 program wchodzi do petli wypisz9 pomimo że R0 wg mnie = 6 bo liczyłem
Gdzie robię błąd - co jest nie tak??
KLAWIATURA (wartość R0 po zeskanowaniu)
; +----+----+----+
; | 11 | 10 | 9 | row3
; +----+----+----+
; | 8 | 7 | 6 | row2
; +----+----|----+
; | 5 | 4 | 3 | row1
; +----+----+----+
; | 2 | 1 | 0 | row0
; +----+----+----+
; col2 col1 col0
Więc klawiszowi 1 odpowiada wartość 11
klawiszowi 2 odpowiada wartość 10
.................
klawiszowi 0 odpowiada wartość 1
klawiszowi hasz odpowiada wartość 0
Wszystko udało mi się prawie dobrze bo prawidłowo wyświetlane są na LED cyfry 0,9,8,5,4,3,2
natomiast zamiast:
1 pojawia się 3
7 pojawia się 9
6 pojawia się 9
moje pytanie dlaczego??
Poniżej kod:
MOV 28h, #01000000B ; hasz
MOV 29h, #00000000B ; gwizadka
MOV 30h, #11000000B ; 0
MOV 31h, #11111001B ; 1
MOV 32h, #10100100B ; 2
MOV 33h, #10110000B ; 3
MOV 34h, #10011001B ; 4
MOV 35h, #10010010B ; 5
MOV 36h, #10000010B ; 6
MOV 37h, #11111000B ; 7
MOV 38h, #10000000B ; 8
MOV 39h, #10010000B ; 9
start:
MOV R0, #0
; scan row0
SETB P0.3
CLR P0.0
CALL colScan
JB F0, finish
; scan row1
SETB P0.0
CLR P0.1
CALL colScan
JB F0, finish
; scan row2
SETB P0.1
CLR P0.2
CALL colScan
JB F0, finish
; scan row3
SETB P0.2
CLR P0.3
CALL colScan
JB F0, finish
JMP start
colScan:
JNB P0.4, gotKey ;
INC R0
JNB P0.5, gotKey ; i
INC R0
JNB P0.6, gotKey ;
INC R0
RET
gotKey:
SETB F0
RET
finish:
MOV a, @R0
wypisz_hasz:
CJNE a, 0, wypisz0
clr p3.4
clr p3.3
mov p1, 28h
jmp czekaj
wypisz0:
CJNE a, 1, wypisz_gwizadka
clr p3.4
clr p3.3
mov p1, 30h
jmp czekaj
wypisz_gwizadka:
CJNE a, 2, wypisz9
clr p3.4
clr p3.3
mov p1, 29h
jmp czekaj
wypisz9:
CJNE a, 3, wypisz8
clr p3.4
clr p3.3
mov p1, 39h
jmp czekaj
wypisz8:
CJNE a, 4, wypisz7
clr p3.4
clr p3.3
mov p1, 38h
jmp czekaj
wypisz7:
CJNE a, 5, wypisz6
clr p3.4
clr p3.3
mov p1, 37h
jmp czekaj
wypisz6:
CJNE a, 6, wypisz5
clr p3.4
clr p3.3
mov p1, 36h
jmp czekaj
wypisz5:
CJNE a, 7, wypisz4
clr p3.4
clr p3.3
mov p1, 35h
jmp czekaj
wypisz4:
CJNE a, 8, wypisz3
clr p3.4
clr p3.3
mov p1, 34h
jmp czekaj
wypisz3:
CJNE a, 9, wypisz2
clr p3.4
clr p3.3
mov p1, 33h
jmp czekaj
wypisz2:
CJNE a, 10, wypisz1
clr p3.4
clr p3.3
mov p1, 32h
jmp czekaj
wypisz1:
CJNE a, 11, wypisz0
clr p3.4
clr p3.3
mov p1, 31h
jmp czekaj
czekaj:
jmp $
Za każdym razem jak śledziłem krok po kroku i liczyłem wartość R0 była prawidłowa jednak w przypadku gdy powinna byc petla:
wypisz1 program wchodzi do petli wypisz3 pomimo że R0 wg mnie = 11 bo liczyłem
wypisz7 program wchodzi do petli wypisz9 pomimo że R0 wg mnie = 5 bo liczyłem
wypisz6 program wchodzi do petli wypisz9 pomimo że R0 wg mnie = 6 bo liczyłem
Gdzie robię błąd - co jest nie tak??