toets scannen 8051

V

vicky29

Guest
lieve vrienden

Ik ben nieuw op microcontrollers dus vergeef me voor de vraag te stellen een eenvoudige. kan iemand me schrijven een kleine code in assembler met 8051 voor het scannen van twee of meer toetsen.
want ik ben niet in staat om het te doen.
of als iemand kan me uitleggen hoe het scannen te doen toetsenbord.

thanks a lot
byee

 
Ik heb het gedaan 10 jaar geleden, dus ik denk dat ik het kan weer doen na het verversen van mijn geest.Maar ik heb nu geen tijd, maar ik kan u helpen met een aantal ideeën.Allereerst, wat toetsenbord dat u wilt scannen.Wat is de HW.Omdat uw keboard scannen hangt veel op de HW.
Het principe van het toetsenbord scannen is de volgende:
1.Je hebt een matrix van sleutels, op dezelfde wijze is een geheugen structuur.Dat is, heb je lijnen en rijen, en in het snijpunt van deze heb je een sleutel.
2.Scannen van de belangrijkste is gemaakt door het aanpakken van een lijn door het schrijven van een MEM of IO registreren (bijvoorbeeld alle bits 0s hebben, behalve een die overeenkomt met de geadresseerde regel), dan moet je van het lezen van de status van een andere MEM of IO register bevat de status die de rijen.Als een beetje (of meerdere bits) heeft 1 dan weet je dat de bijbehorende toets wordt ingedrukt - de sleutel die in het snijpunt van de geadresseerde regel en de rij met de 1.Dan moet je het adres van de volgende regel en zo verder, totdat u de status van de rijen die overeenkomt met de laatste regel aangepakt.Dan heb je een (zeer eenvoudige) algoritme dat bekeerlingen uit de lijn te pakken en rij de status van de key code.Dat is het.En natuurlijk moet dit periodiek worden gedaan, de beste met het onderbreken van een timer (laten we zeggen 50 ms).Ik hoop dat u helpt.

Belsugului

 
Als je niet in staat om alle in een programma te schrijven die dit doet, wat is het punt in het gebruik van de 8051?Voor alle 8051 vragen je moet kijken naar de tutorials en FAQ van www.8052.com.Ik heb een codeblock dat toetsenbord scant een 4x4 matrix, maar je moet weten de basics van 8051 en de montage voor.PM me als je wilt dat de code of MSN te helpen.

 
Stel u wilt pinnen scan twee P1.1 en P1.2 zeggen
sluit ze aan op een drukknop en het andere uiteinde van de knop aan de grond.zodanig dat elke keer dat de toets wordt ingedrukt, een logische nul is op de respectieve pinnen.
het programma voor th9is zou worden:

org 00h
cjne P1.1, # 00h, $
...................; Doe wat u wilt gebeuren wanneer dit gebeurt
cjne P1.2, # 00h, $
.......................; Doe wat u wilt gebeuren wanneer dit gebeurt
einde

 
Hoi,

Geniet van deze code

;------------------------------------------------- ------------------------------
;
; 4x4 Toetsenbordfuncties
;
;------------------------------------------------- ------------------------------NAAM KEYPAD_MODULE? DT? KEYPAD_MODULE gesegmenteerde gegevens
RSEG? DT? KEYPAD_MODULE

KFLAGHI: DS 1;
KFLAGLO: DS 1;

? PR? KEYPAD_MODULE SEGMENT CODE
RSEG? PR? KEYPAD_MODULE; codesegment

OPENBARE kbinput

kbinput:
MOV R7, # 0; set return waarde op nul
Een MOV, # 0EFH;
CALL SET_ROW;
MOV R0, A; te houden scaned waarde
Een MOV, # 0DFH;
CALL SET_ROW;
Een SWAP;
ORL A, R0;
MOV R1, A;
MOV R0, KFLAGHI; oude waarde te krijgen
MOV KFLAGHI, Een; nieuwe waarde te houden
CALL SCAN_KEY;

Een MOV, R2;
MOV R6, Een; houd rij

Een MOV, # 0BFH;
CALL SET_ROW;
MOV R1, A;
Een MOV, # 7FH;
CALL SET_ROW;
Een SWAP;
Een KNO, R1;
MOV R1, A;
MOV R0, KFLAGLO; oude waarde te krijgen
MOV KFLAGLO, Een; nieuwe waarde te houden
CALL SCAN_KEY;

Een MOV, R2, houd kolom
JZ KI_NEXT;
ADD A, # 8;
KI_NEXT:
ADD A, R6;
MOV R7, A;
RET; Scan toets ingedrukt nieuwe

SCAN_KEY:
MOV R2, # 8, stel lus teller
SC_LOOP:
MOV A, R0, controleer oude waarde
RLC A;
MOV R0, A;
Een MOV, R1, controleer nieuwe waarde
RL A;
MOV R1, A;

JNB ACC.0, SC_END;
JC SC_END;
RET; gevonden nieuwe waarde

SC_END:
DJNZ R2, SC_LOOP;
RET

;

SET_ROW:
MOV P1, A, Set rij-adres naar poort P1 [4 .. 7]
MOV A, P1; Lees kolomgegevens uit de haven P1 [0 .. 3]
XRL A, # 0FFH; aanvulling bits
ANL A, # 0Fh; krijgen Lo knabbelen

RET

 

Welcome to EDABoard.com

Sponsor

Back
Top