Klawiaturka matrycowa

Apr 09, 2004 4 Replies

Witam Wykona³em klawiaturkê matrycow± do mikrokontrolera AT89s8252 bêdzie ona pod³±czona do portu 2 z wewnetrznymi podciagnieciami do 5V. Zastanawiam siê jak nale¿y oprogramowaæ teraz uC. A konkretnie to o to , czy poszczególne piny portu siê ustawia jako wej¶cia wyj¶cia, a je¶li tak , to jak to zrobiæ w asm. na P2.0-P2.2 s± kolumny, na P2.3-P2.7 wiersze (klawiaturka



4x3).Zak³adaj± taki fragment programu:

mov P2,00001111B mov A,P2



oraz dodatkowo uziemiaj±c wszystkie piny portu 2, co bêdzie w akumulatorze ? Bo nie wiem czy stan portu , to to samo wys³ali¶my my na port, czy to co przysz³o. Je¶li kto¶ bêdzie w stanie pomóc, z góry dziêki.



Pozdrawiam, Teres


U¿ytkownik "Teres" <teres@WyTniJ_to!!!@poczta.fm> napisa³ w wiadomo¶ci news:c55o9c$2vi$ snipped-for-privacy@news.onet.pl

1) Spójrz jak wygl±da budowa portów w 8051:
formatting link
Zwróæ uwagê na zasadnicz± ró¿nicê wystêpuj±c± pomiêdzy zapisem a odczytem portu. Zapis portu ustawia/zeruje bity w odpowiednim _rejestrze_ SFR (P0, P1...), natomiast odczyt zwraca stan _linii_ wyj¶ciowych portu. Stan linii jest wypadkow± bitu wpisanego do rejestru i obci±¿enia pod³±czonego do danej linii. Je¿eli wystawisz do rejestru "0" to odczyt zawsze zwróci "0" Je¿eli wystawisz do rejestru "1" to odczyt niepod³±czonej linii zwróci "1" Je¿eli wystawisz do rejestru "1" i obci±¿ysz liniê do masy to odczyt linii zwróci "0" St±d wniosek, ¿e je¿eli jaka¶ linia portu ma pracowaæ jako _wej¶cie_, to do odpowiedniego bitu rejestru nale¿y wcze¶niej wpisac "1".

Uwaga 1. Niektóre rozkazy w 51-ce operuj± na warto¶ci pobranej zwrotnie z _rejestru_ portu a nie na warto¶ci odczytanej z linii portu.

formatting link
Uwaga 2. Np. w AVR-ach wprowadzono rejestr wybieraj±cy kierunek transmisji (DIRx) i jawnie rozdzielono zapis/odczyt rejestru (POTRx) od odczytu stanu linii uC (PINx).

2) Wszelkie styki (klawiatury, krañcówki.. itp.) s± paskudne bo drgaj± przy prze³±czaniu. Tzn. generuj± kilka zboczy podczas jednego wci¶niêcia. Dlatego istotn± czê¶æ obs³ugi klawiatury stanowi programowa eliminacja odbiæ (debouncing). Zobacz np.:
formatting link

U¿ytkownik "Marek Dzwonnik" <mdz@WIADOMO_PO_CO_TO.message.pl> napisa³ w wiadomo¶ci news:4076804e$ snipped-for-privacy@news.home.net.pl...

Czyli w A bêdzie 00000000B, tak ??

Wiem

potwierdzenie odczytu.

Pozdrawiam, Teres

[ciach]

Ja zmontowa³em klawiaturkê 2x2 pod³±czan± do AVRa wed³ug tego schematu:

formatting link
bardzo dobrze, tylko pamiêtaj o ustawieniu nieu¿ywanych linii portów jako wyj¶cia, bo w przeciwnym razie dziej± siê dziwne rzeczy. W ka¿dym b±d¼ razie odczyt stanu linii w procedurze obs³ugi przerwania eliminuje problem z oprogramowaniem uwzglêdniaj±cym drganie zestyków. A przynajmniej tak mi siê wydaje, nie jestem do¶wiadczonym elektronikiem.

U¿ytkownik "Cymes" snipped-for-privacy@op.NO.SPAM.pl> napisa³ w wiadomo¶ci news:c59ctr$ij5$ snipped-for-privacy@news.onet.pl...

portów

Nie robie na AVR.

Pozdrawiam, Teres

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required