Ang mga Keypad ay malawakang ginagamit na mga aparato ng pag-input na ginagamit sa iba't ibang mga electronics at naka-embed na proyekto. Ginagamit ang mga ito upang kumuha ng mga input sa anyo ng mga numero at albhabet, at feed ang pareho sa system para sa karagdagang pagproseso. Sa tutorial na ito pupunta kami sa isang 4x4 matrix keypad na may 8051 microcontroller.
4X4 Matrix Keypad
Bago namin i-interface ang keypad sa microcontroller, kailangan muna nating maunawaan kung paano ito gumagana. Ang keypad ng Matrix ay binubuo ng hanay ng mga pindutan ng Push, na magkakaugnay. Tulad ng sa aming kaso gumagamit kami ng 4X4 matrix keypad, kung saan mayroong 4 na mga pindutan ng push sa bawat isa sa apat na mga hilera. At ang mga terminal ng mga pindutan ng itulak ay konektado ayon sa diagram. Sa unang hilera, ang isang terminal ng lahat ng mga 4 na pindutan ng push ay konektado magkasama at isa pang terminal ng 4 na mga pindutan ng push ay kumakatawan sa bawat isa sa 4 na mga haligi, pareho para sa bawat hilera. Nakakakuha kami ng 8 mga terminal upang kumonekta sa isang microcontroller.
Ang interface ng keypad na may 8051 microcontroller (AT89S52)
Una kailangan naming mag-interface ng isang module ng LCD upang maipakita ang data na magiging feed sa pamamagitan ng KEYPAD, kaya mangyaring dumaan sa artikulong "LCD Interfacing sa 8051 Microcontroller" bago i-interfaces ang KEYPAD.
Tulad ng ipinakita sa itaas na diagram ng circuit, upang mai-interface ang Keypad, kailangan naming ikonekta ang 8 mga terminal ng keypad sa anumang port (8 pin) ng microcontroller. Tulad ng pagkonekta namin ng mga terminal ng keypad sa Port 1 ng 8051. Kailan man pinindot ang anumang pindutan kailangan naming makuha ang lokasyon ng pindutan, nangangahulugang ang kaukulang ROW isang COLUMN no. Sa sandaling makuha namin ang lokasyon ng pindutan, maaari naming mai-print ang character nang naaayon.
Ngayon ang tanong ay kung paano makukuha ang lokasyon ng pinindot na pindutan? Ipapaliwanag ko ito sa mga hakbang sa ibaba at nais din naming tingnan ang code:
1. Una naming ginawa ang lahat ng mga Rows to Logic level 0 at lahat ng mga haligi sa antas ng Logic 1.
2. Tuwing pipindutin namin ang isang pindutan, haligi at hilera na naaayon sa pindutang iyon ay maikli at gawin ang kaukulang haligi sa antas ng lohika 0. Dahil ang haligi na iyon ay nakakakonekta (naikli) sa hilera, na nasa antas ng Logic 0. Kaya nakukuha namin ang haligi blg. Tingnan ang pangunahing () pagpapaandar.
3. Ngayon kailangan naming hanapin ang Hilera hindi., Kaya't lumikha kami ng apat na mga pagpapaandar na naaayon sa bawat haligi. Tulad ng kung ang anumang pindutan ng haligi ng isa ay pinindot, tumatawag kami sa function row_finder1 (), upang hanapin ang hilera na hindi.
4. Sa pag-andar ng row_finder1 (), baligtarin namin ang mga antas ng lohika, nangangahulugan na ngayon ang lahat ng mga Rows ay 1 at ang mga haligi ay 0. Ngayon ang hilera ng pinindot na pindutan ay dapat na 0 sapagkat ito ay konektado (naikliin) sa haligi na ang pindutan ay pinindot, at lahat ng mga haligi ay nasa 0 na lohika. Kaya na-scan namin ang lahat ng mga hilera para sa 0.
5. Kaya't tuwing nakita natin ang Hilera sa lohika 0, nangangahulugang iyon ang hilera ng pinindot na pindutan. Kaya ngayon mayroon kaming haligi na wala (nakuha sa hakbang 2) at hilera na hindi., At maaari naming mai-print ang hindi. ng pindutang iyon gamit ang pagpapaandar ng lcd_data.
Ang parehong pamamaraan ay sumusunod para sa bawat pindutan ng pagpindot, at gumagamit kami habang (1), upang patuloy na suriin, kung ang pindutan ay pinindot o hindi.