- Mga Materyal na Kinakailangan
- 16X2 LCD Display Module
- Circuit Diagram at Mga Koneksyon
- Programming ARM7-LPC2148
Ang pagpapakita ay kinakailangang bahagi ng isang makina maging ito man ay anumang kagamitan sa bahay o mga makina pang-industriya. Ipinapakita hindi lamang ang mga pagpipilian sa kontrol upang mapatakbo ang makina ngunit ipinapakita rin ang katayuan at output ng gawain na ginampanan ng makina na iyon. Mayroong maraming mga uri ng pagpapakita na ginagamit sa electronics tulad ng 7-segment display, LCD display, TFT touch screen display, LED display atbp. 16x2 LCD display ang pinaka-pangunahing isa at ginamit din ang display sa ilang maliit na kagamitan sa electronics, marami kaming nagawa mga proyekto na gumagamit ng 16x2 LCD kasama ang pangunahing interfacing sa iba pang mga microcontroller:
- LCD Interfacing na may 8051 Microcontroller
- Ang interface ng LCD na may ATmega32 Microcontroller
- LCD Interfacing sa PIC Microcontroller
- Ang pagitan ng 16x2 LCD na may Arduino
- 16x2 LCD Interfacing kasama ang Raspberry Pi gamit ang Python
Sa tutorial na ito, makikita natin kung paano i-interface ang isang 16x2 LCD na may ARM7-LPC2148 microcontroller at magpapakita ng isang simpleng maligayang mensahe. Kung bago ka sa ARM7 pagkatapos magsimula sa mga pangunahing kaalaman sa ARM7 LPC2148 at alamin kung paano ito mai-program gamit ang Keil uVision
Mga Materyal na Kinakailangan
Hardware
- Board ng ARM7-LPC2148 Microcontroller
- LCD (16X2)
- Potensyomiter
- 5V boltahe regulator IC
- Breadboard
- Mga Koneksyon sa Mga Wires
- 9V na baterya
- Micro USB cable
Software
- Keil uVision 5
- Magic Flash Tool
Bago pumasok sa proyekto kailangan nating malaman ang ilang mga bagay tungkol sa mga LCD mode ng pagpapatakbo at tungkol sa mga LCD Hex code.
16X2 LCD Display Module
Sinasabi ng isang 16X2 LCD na mayroon itong 16 Columns at 2 Rows. Ang LCD na ito ay may 16 na mga pin. Sa ibaba ng imahe at talahanayan ay ipinapakita ang mga pangalan ng pin ng LCD display at ang mga pag-andar nito.
PANGALAN |
FUNCTION |
VSS |
Ground Pin |
VDD |
+ 5V Input Pin |
VEE |
Contrast Ayusin ang Pin |
Ang RS |
Magrehistro Piliin |
R / W |
Basahin / Isulat ang Pin |
E |
Paganahin ang Pin |
D0-D7 |
Mga Data Pins (8 Pins) |
LED A |
Anode Pin (+ 5V) |
LED K |
Cathode Pin (GND) |
Ang LCD ay maaaring gumana sa dalawang magkakaibang mga mode, lalo ang 4-bit mode at ang 8-bit mode. Sa 4 bit mode ay ipinapadala namin ang data nibble sa pamamagitan ng nibble, unang itaas na nibble at pagkatapos ay ibababa ang nibble. Para sa iyo na hindi alam kung ano ang isang nibble: ang isang nibble ay isang pangkat ng apat na piraso, kaya ang mas mababang apat na piraso (D0-D3) ng isang byte ay bumubuo ng mas mababang nibble habang ang itaas na apat na piraso (D4-D7) ng isang byte form na mas mataas na nibble. Pinapayagan kaming magpadala ng 8 bit na data.
Samantalang sa 8 bit mode maaari naming ipadala ang data ng 8-bit nang direkta sa isang stroke dahil ginagamit namin ang lahat ng 8 mga linya ng data.
Dito sa proyektong ito gagamitin namin ang pinaka-karaniwang ginagamit na mode na 4-bit mode. Sa apat na bit mode maaari nating mai-save ang 4 na mga pin ng microcontroller at bawasan din ang mga overhead ng mga kable.
Gumagamit din ang 16x2 HEX code upang kumuha ng anumang utos, maraming mga utos na hex para sa LCD na nais ilipat ang cursor, piliin ang mode, ilipat ang kontrol sa pangalawang linya atbp. Upang malaman ang higit pa tungkol sa 16X2 LCD Display Module at hex utos, sundin ang link.
Circuit Diagram at Mga Koneksyon
Ipinapakita sa ibaba ng talahanayan ang mga koneksyon sa circuit sa pagitan ng LCD & ARM7-LPC2148.
ARM7-LPC2148 |
LCD (16x2) |
P0.4 |
RS (Piliin ang Rehistro) |
P0.6 |
E (Paganahin) |
P0.12 |
D4 (Data pin 4) |
P0.13 |
D5 (Data pin 5) |
P0.14 |
D6 (Data pin 6) |
P0.15 |
D7 (Data pin 7) |
Mga koneksyon ng Voltage Regulator na may LCD & ARM7 Stick
Ipinapakita ng talahanayan sa ibaba ang mga koneksyon sa pagitan ng ARM7 & LCD na may boltahe regulator.
Voltage Regulator IC |
Pag-andar ng pin |
LCD & ARM-7 LPC2148 |
1. Kaliwang Pin |
+ Ve mula sa Input ng baterya 9V |
NC |
2.Centre Pin |
- Mula sa baterya |
VSS, R / W, K ng LCD GND ng ARM7 |
3. Tamang Pin |
Kinokontrol ang + 5V Output |
VDD, A ng LCD + 5V ng ARM7 |
Potensyomiter na may LCD
Ginagamit ang isang potensyomiter upang ibahin ang kaibahan ng LCD display. Ang isang palayok ay may tatlong mga pin, Ang kaliwang pin (1) ay konektado sa + 5V at gitna (2) sa VEE o V0 ng LCD module at kanang pin (3) ay konektado sa GND. Maaari naming ayusin ang kaibahan sa pamamagitan ng pag-on ng knob.
Mga setting ng Jumper
Ang isang jumper pin ay naroroon sa ARM7-Stick upang maaari naming paganahin at i-upload ang code sa pamamagitan ng paggamit ng USB o sa pamamagitan ng paggamit ng isang 5V DC input para sa lakas lamang. Maaari mong makita ang mga larawan sa ibaba.
Ipinapakita ng imahe sa ibaba na ang jumper ay nasa posisyon ng DC. Nangangahulugan iyon na dapat nating kapangyarihan ang board mula sa panlabas na 5V supply.
At ipinapakita ng imaheng ito na ang jumper ay konektado sa USB mode. Narito ang kapangyarihan at code ay ibinibigay sa pamamagitan ng micro usb port.
TANDAAN: Dito sa tutorial na ito nag-upload kami ng code sa pamamagitan ng paggamit ng USB sa pamamagitan ng pagtatakda ng jumper sa USB at pagkatapos ay binago ang jumper sa DC mode upang mapagana ang LPC2148 mula sa 5v input ng regulator. Maaari mo itong suriin sa video na ibinigay sa dulo.
Ang huling circuit para sa interfacing 16x2 LCD na may ARM7 Microcontroller ay ganito ang hitsura:
Programming ARM7-LPC2148
Upang Program ARM7-LPC2148 kailangan namin ng keV uVision at Flash Magic tool. Gumagamit kami ng USB Cable upang mai-program ang ARM7 Stick sa pamamagitan ng micro USB port. Nagsusulat kami ng code gamit ang Keil at lumikha ng isang hex file at pagkatapos ang HEX file ay na-flash sa ARM7 stick gamit ang Flash Magic. Upang malaman ang higit pa tungkol sa pag-install ng keil uVision at Flash Magic at kung paano gamitin ang mga ito sundin ang link na Nagsisimula Sa ARM7 LPC2148 Microcontroller at Program ito gamit ang Keil uVision.
Ang kumpletong code para sa interfacing LCD sa ARM 7 ay ibinibigay sa pagtatapos ng tutorial na ito, narito ipinapaliwanag namin ang ilang bahagi nito.
Una sa lahat kailangan naming isama ang kinakailangang mga file ng header
# isama
Ang pagsisimula ng module ng LCD ay isang napakahalagang hakbang. Gumagamit kami dito ng ilang mga HEX code, iyon talaga ang mga utos, upang sabihin sa LCD ang tungkol sa mode ng operasyon (4-bit), uri ng LCD (16x2), linya ng pagsisimula atbp.
walang bisa LCD_INITILIZE (walang bisa) // Function upang maihanda ang LCD { IO0DIR = 0x0000FFF0; // Nagtatakda ng pin na P0.4, P0.6, P0.12, P0.13, P0.14, P0.15as OUTPUT na pagkaantala_ms (20); LCD_SEND (0x02); // Initialize lcd sa 4-bit mode ng operasyon LCD_SEND (0x28); // 2 lines (16X2) LCD_SEND (0x0C); // Display on cursor off LCD_SEND (0x06); // Auto increment cursor LCD_SEND (0x01); // Ipakita ang malinaw na LCD_SEND (0x80); // First line first posisyon }
Para sa 4-Bit mode mayroon kaming iba't ibang uri ng function ng pagsulat para sa mga pin, iyon ay sa pamamagitan ng paggamit ng pang-itaas at mas mababang nibble. Tingnan natin, kung paano ito ginagawa
walang bisa ang LCD_SEND (char command) // Function upang magpadala ng hex utos na nibble ni nibble { IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((command & 0xF0) << 8)); // Send upper nibble of command IO0SET = 0x00000040; // Making Enable HIGH IO0CLR = 0x00000030; // Making RS & RW LOW delay_ms (5); IO0CLR = 0x00000040; // Paggawang Paganahin ang LOW delay_ms (5); IO0PIN = (((IO0PIN & 0xFFFF00FF) - ((command & 0x0F) << 12)); // Send Lower nibble of command IO0SET = 0x00000040; // ENABLE HIGH IO0CLR = 0x00000030; // RS & RW LOW delay_ms (5); IO0CLR = 0x00000040; // ENABLE LOW delay_ms (5); }
Nibble Lending Logic
IO0PIN = (((IO0PIN & 0xFFFF00FF) - ((command & 0x0F) << 12)); // Magpadala ng Mas mababang nibble ng utos IO0PIN = (((IO0PIN & 0xFFFF00FF) - ((utos & 0xF0) << 8)); // Magpadala ng pinakamataas na utos ng utos
Sa itaas ng dalawang pahayag ay may mahalagang papel sa program na ito. Ang unang utos ay nagpapadala ng mas mababang nibble at ang pangalawa ay nagpapadala ng itaas na nibble. Ito ay nang hindi nakakaapekto sa iba pang mga pin na ginagawa namin. Tingnan natin kung paano ito nangyayari bago muna malaman ang tungkol sa lohika na ito
ORing- (A-0 = A), (A-1 = 1) ANDing- (A & 0 = 0), (A & 1 = A)
Kaya gumagamit kami ng isang masking konsepto at lohikal na operasyon ng paglilipat nang hindi nakakaapekto sa iba pang mga pin. Ibig sabihin lamang ang mga pin (P0.12-P0.15) ang ginagamit at walang ibang mga pin tulad ng P0.4, P0.6 ang apektado. Gagawin ito sa pamamagitan ng paglilipat ng data sa apat na piraso at gawin ang itaas na nibble sa lugar ng mas mababang nibble at masking ang itaas na nibble. At pagkatapos ay ginagawa namin ang mas mababang mga bit na zero (0XF0) at ORed sa data ng nibble upang makuha ang itaas na data ng nibble sa output.
Ginagamit ang katulad na proseso para sa mas mababang data ng nibble ngunit dito hindi namin kailangang ilipat ang data.
Habang ang pagsusulat ng data sa output, iyon ay, sa mode ng pag-utos ang RS ay dapat na mababa at upang maisagawa ang paganahin ay dapat na TAAS, at sa mode ng data ang RS ay dapat na TAAS at upang maipatupad ang paganahin ay dapat maging TAAS.
Ngayon para sa pagpapadala ng data ng string na dapat mai-print sa output, ang parehong prinsipyo ay ginagamit nibble ng nibble. Mahalagang hakbang dito ang REGISTER SELECT (RS) ay dapat na maging TAAS para sa mode ng data.
walang bisa ang LCD_DISPLAY (char * msg) // Function upang mai-print ang mga character na isa-isang ipinadala { uint8_t i = 0; habang (msg! = 0) { IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0xF0) << 8)); // Nagpadala ng Itaas na nibble IO0SET = 0x00000050; // RS HIGH & ENABLE HIGH to print data IO0CLR = 0x00000020; // RW LOW Sumulat mode mode pagkaantala ng ms (2); IO0CLR = 0x00000040; // EN = 0, RS at RW hindi nagbago (ie RS = 1, RW = 0) antala ang ms (5); IO0PIN = (((IO0PIN & 0xFFFF00FF) - ((msg & 0x0F) << 12)); // Nagpapadala ng Mas mababang nibble IO0SET = 0x00000050; // RS & EN HIGH IO0CLR = 0x00000020; antalahin si ms (2); IO0CLR = 0x00000040; antalahin si ms (5); ako ++; }
Ang kumpletong video ng Coding & Demonstration ay ibinibigay sa ibaba.