Tastaturile sunt dispozitive de intrare utilizate pe scară largă, fiind utilizate în diverse proiecte electronice și încorporate. Acestea sunt utilizate pentru a prelua intrări sub formă de numere și albabete și le alimentează în sistem pentru procesare ulterioară. În acest tutorial vom interfața o tastatură cu matrice 4x4 cu microcontroler 8051.
Tastatură Matrix 4X4
Înainte de a interfața tastatura cu microcontrolerul, mai întâi trebuie să înțelegem cum funcționează. Tastatura Matrix este formată dintr-un set de butoane, care sunt interconectate. La fel ca în cazul nostru, folosim tastatura matricială 4X4, în care există 4 butoane în fiecare din cele patru rânduri. Iar terminalele butoanelor sunt conectate conform schemei. În primul rând, un terminal din toate cele 4 butoane sunt conectate împreună și un alt terminal cu 4 butoane reprezintă fiecare din cele 4 coloane, la fel se întâmplă pentru fiecare rând. Deci, primim 8 terminale pentru conectarea cu un microcontroler.
Tastatură de interfață cu microcontroler 8051 (AT89S52)
Mai întâi trebuie să interfațăm un modul LCD pentru a afișa datele care vor fi transmise prin KEYPAD, așa că vă rugăm să treceți prin articolul „Interfață LCD cu microcontroler 8051” înainte de a interfața KEYPAD.
Așa cum se arată în schema de circuite de mai sus, pentru a interfața tastatura, trebuie să conectăm 8 terminale ale tastaturii la orice port (8 pini) al microcontrolerului. La fel cum am conectat terminalele tastaturii la portul 1 din 8051. Ori de câte ori este apăsat vreun buton, trebuie să obținem locația butonului, înseamnă rândul corespunzător și o coloană nr. Odată ce am obținut locația butonului, putem imprima caracterul în consecință.
Acum întrebarea este cum să obțineți locația butonului apăsat? Voi explica acest lucru în pașii de mai jos și vreau să vă uitați la cod:
1. Mai întâi am făcut toate rândurile până la nivelul Logic 0 și toate coloanele până la nivelul Logic 1.
2. Ori de câte ori apăsăm un buton, coloana și rândul corespunzător acelui buton sunt scurtcircuitate și fac coloana corespunzătoare la nivelul logic 0. Deoarece acea coloană devine conectată (scurtcircuitată) la rândul, care este la nivelul logic 0. Deci, obținem coloana nr. Vezi funcția main ().
3. Acum trebuie să găsim numărul rândului, așa că am creat patru funcții corespunzătoare fiecărei coloane. Ca și dacă este apăsat vreun buton al coloanei unu, apelăm funcția row_finder1 (), pentru a găsi rândul nr.
4. În funcția row_finder1 (), am inversat nivelurile logice, înseamnă că acum toate rândurile sunt 1 și coloanele 0. Acum rândul butonului apăsat ar trebui să fie 0 deoarece a fost conectat (scurtcircuitat) la coloana al cărei buton este apăsat, și toate coloanele sunt la 0 logică. Deci, am scanat toate rândurile pentru 0.
5. Deci, ori de câte ori găsim rândul la logica 0, înseamnă că este rândul butonului apăsat. Deci, acum avem coloana nr (a intrat în pasul 2) și rândul nr. Și putem imprima nr. butonului respectiv folosind funcția lcd_data.
Aceeași procedură urmează pentru fiecare apăsare a butonului și folosim în timp ce (1), pentru a verifica continuu dacă butonul este apăsat sau nu.