Ekran, ister ev aletleri ister endüstriyel makineler olsun, bir makinenin gerekli parçasıdır. Ekran yalnızca makineyi çalıştırmak için kontrol seçeneklerini göstermekle kalmaz, aynı zamanda o makine tarafından gerçekleştirilen görevin durumunu ve çıktısını da gösterir. Elektronikte kullanılan 7 segmentli ekran, LCD ekran, TFT dokunmatik ekran, LED ekran vb. Gibi birçok ekran türü vardır. 16x2 LCD ekran en temel olanıdır ve bazı küçük elektronik ekipmanlarda da kullanılan ekran, çok şey yaptık diğer mikro denetleyicilerle temel arayüz dahil 16x2 LCD kullanan projeler:
- 8051 Mikrodenetleyici ile LCD Arayüz
- LCD ile ATmega32 Mikrodenetleyiciyi Arayüz
- PIC Mikrodenetleyici ile LCD Arayüzü
- 16x2 LCD'yi Arduino ile arayüzleme
- Python kullanarak Raspberry Pi ile 16x2 LCD Arayüz
Bu eğitimde, 16x2 LCD ile ARM7-LPC2148 mikrodenetleyicinin nasıl arayüzleneceğini göreceğiz ve basit bir karşılama mesajı göstereceğiz. ARM7 ile yeniyseniz, ARM7 LPC2148'in temelleri ile başlayın ve Keil uVision kullanılarak nasıl programlanabileceğini öğrenin.
Gerekli malzemeler
Donanım
- ARM7-LPC2148 Mikrodenetleyici kartı
- LCD (16X2)
- Potansiyometre
- 5V voltaj regülatörü IC
- Breadboard
- Kabloların Bağlanması
- 9V pil
- Mikro USB kablosu
Yazılım
- Keil uVision 5
- Sihirli Flaş Aracı
Projeye başlamadan önce, LCD çalışma modları ve LCD Hex kodları hakkında birkaç şey bilmeliyiz.
16X2 LCD Ekran Modülü
16X2 LCD, 16 Sütun ve 2 Satır olduğunu söylüyor. Bu LCD'nin 16 pimi vardır. Aşağıdaki resim ve tablo, LCD ekranın pin adlarını ve işlevlerini gösterir.
İSİM |
FONKSİYON |
VSS |
Zemin Pimi |
VDD |
+ 5V Giriş Pimi |
VEE |
Kontrast Ayar Pimi |
RS |
Kayıt Seç |
R / W |
Pin Oku / Yaz |
E |
PIN'i Etkinleştir |
D0-D7 |
Veri Pimleri (8 Pim) |
LED A |
Anot Pimi (+ 5V) |
LED K |
Katot Pimi (GND) |
LCD, 4 bit modu ve 8 bit modu olmak üzere iki farklı modda çalışabilir. 4 bit modunda, veri yarım baytını, önce üst yarım bayt ve sonra alt yarım bayt olarak göndeririz. Bir yarım baytın ne olduğunu bilmeyenleriniz için: yarım bayt dört bitlik bir gruptur, bu nedenle bir baytın alttaki dört biti (D0-D3) alt yarı baytı oluştururken üst dört biti (D4-D7) Bir baytın, yüksek yarım bayt oluşturur. Bu, 8 bitlik veri göndermemizi sağlar.
Oysa 8 bit modunda, 8 veri hattının tamamını kullandığımız için 8 bitlik veriyi doğrudan tek vuruşta gönderebiliriz.
İşte bu projede en çok kullanılan 4 bitlik modu kullanacağız. Dört bit modunda 4 pinli mikro denetleyici kaydedebilir ve ayrıca kablolama ek yükünü azaltabiliriz.
16x2 ayrıca herhangi bir komutu almak için HEX kodunu kullanır, LCD için imleci hareket ettirmek, modu seçmek, kontrolü ikinci satıra kaydırmak gibi birçok onaltılık komut vardır. 16X2 LCD Ekran Modülü ve onaltılık komutlar hakkında daha fazla bilgi edinmek için bağlantıyı takip edin.
Devre Şeması ve Bağlantılar
Aşağıdaki tablo, LCD ve ARM7-LPC2148 arasındaki devre bağlantılarını göstermektedir.
ARM7-LPC2148 |
LCD (16x2) |
P0.4 |
RS (Kayıt Seçimi) |
P0.6 |
E (Etkinleştir) |
P0.12 |
D4 (Veri pini 4) |
P0.13 |
D5 (Veri pimi 5) |
P0.14 |
D6 (Veri pini 6) |
P0.15 |
D7 (Veri pini 7) |
Voltaj Regülatörünün LCD ve ARM7 Çubuklu Bağlantıları
Aşağıdaki tablo, voltaj regülatörlü ARM7 ve LCD arasındaki bağlantıları göstermektedir.
Voltaj Regülatörü IC |
Pin işlevi |
LCD ve ARM-7 LPC2148 |
1. Sol Pim |
Pil 9V Girişinden + Ve |
NC |
2. Merkez Pimi |
- Ve pilden |
VSS, R / W, K LCD ARM7'nin GND'si |
3. Sağ Pim |
Düzenlenmiş + 5V Çıkış |
VDD, A LCD + 5V / ARM7 |
LCD'li potansiyometre
LCD ekranın kontrastını değiştirmek için bir potansiyometre kullanılır. Bir potun üç pimi vardır, Sol pim (1) + 5V'ye ve orta (2) LCD modülünün VEE veya V0'ına ve sağ pim (3) GND'ye bağlanır. Düğmeyi çevirerek kontrastı ayarlayabiliriz.
Atlama Teli Ayarları
ARM7-Stick'te bir atlama pimi bulunur, böylece USB kullanarak veya yalnızca güç için 5V DC girişi kullanarak kodu çalıştırabilir ve yükleyebiliriz. Aşağıdaki resimleri görebilirsiniz.
Aşağıdaki resim, jumper'ın DC konumunda olduğunu göstermektedir. Bu, panele harici 5V kaynağından güç sağlamamız gerektiği anlamına gelir.
Ve bu resim, jumper'ın USB modunda bağlı olduğunu göstermektedir. Burada güç ve kod mikro usb portu üzerinden sağlanır.
NOT: Burada bu eğiticide, jumper'ı USB'ye ayarlayarak ve ardından regülatörün 5v girişinden LPC2148'e güç sağlamak için jumper'ı DC moduna değiştirerek USB kullanarak kodu yükledik. Bunu sonunda verilen videoda kontrol edebilirsiniz.
16x2 LCD'yi ARM7 Mikrodenetleyici ile arabirim oluşturmak için son devre şöyle görünecektir:
ARM7-LPC2148 Programlama
ARM7-LPC2148'i programlamak için keil uVision ve Flash Magic aracına ihtiyacımız var. ARM7 Stick'i mikro USB portu üzerinden programlamak için USB Kablosu kullanıyoruz. Keil kullanarak kod yazıyoruz ve bir hex dosyası oluşturuyoruz ve ardından HEX dosyası Flash Magic kullanarak ARM7 çubuğuna flash yapıyor. Keil uVision ve Flash Magic'in yüklenmesi ve bunların nasıl kullanılacağı hakkında daha fazla bilgi için ARM7 LPC2148 Mikrodenetleyiciye Başlarken bağlantısını izleyin ve Keil uVision kullanarak Programlayın.
LCD'yi ARM 7 ile arayüzlemek için tam kod, bu eğitimin sonunda verilmiştir, burada birkaç bölümünü açıklıyoruz.
Öncelikle gerekli başlık dosyalarını eklememiz gerekiyor
#Dahil etmek
LCD modülünü başlatmak çok önemli bir adımdır. Burada, LCD'ye çalışma modu (4 bit), LCD türü (16x2), başlangıç satırı vb. Hakkında bilgi vermek için aslında komut olan belirli HEX kodlarını kullanıyoruz.
void LCD_INITILIZE (void) // LCD'yi hazırlama işlevi { IO0DIR = 0x0000FFF0; // P0.4, P0.6, P0.12, P0.13, P0.14, P0.15as OUTPUT delay_ms (20) pinlerini ayarlar; LCD_SEND (0x02); // LCD'yi 4-bit çalışma modunda başlat LCD_SEND (0x28); // 2 satır (16X2 ) LCD_SEND (0x0C); // İmleç kapalı iken göster LCD_SEND (0x06); // Otomatik artış imleci LCD_SEND (0x01); // Ekran net LCD_SEND (0x80); // İlk satır ilk konum }
4-Bit modu için pinler için farklı tipte yazma fonksiyonumuz var, yani üst ve alt yarım bayt kullanarak. Bakalım nasıl yapılır
void LCD_SEND (char komutu) // Onaltılık komutları yarım bayt ile gönderme işlevi { IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((komut & 0xF0) << 8)); // IO0SET = 0x00000040 komutunun üst yarımını gönder ; // HIGH IO0CLR = 0x00000030'u Etkinleştirme ; // RS & RW LOW delay_ms (5); IO0CLR = 0x00000040; // DÜŞÜK delay_ms (5); IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((komut & 0x0F) << 12)); // IO0SET = 0x00000040 komutunun alt yarım baytını gönder ; // YÜKSEK IO0CLR'yi ETKİNLEŞTİR = 0x00000030; // RS & RW DÜŞÜK gecikme_ms (5); IO0CLR = 0x00000040; // DÜŞÜKLÜĞÜ ETKİNLEŞTİR delay_ms (5); }
Nibble Gönderme Mantığı
IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((komut & 0x0F) << 12)); // IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((command & 0xF0) << 8)); // Komutun üst yarım baytını gönder
Yukarıdaki iki ifade bu programda önemli bir rol oynamaktadır. İlk komut, alt yarım bayt gönderir ve ikinci, üst yarım baytı gönderir. Bu, yaptığımız diğer pinleri etkilemez. Önce bu mantığı öğrenmeden önce nasıl olduğunu görelim.
ORing- (A-0 = A), (A-1 = 1) ANDing- (A & 0 = 0), (A & 1 = A)
Bu yüzden diğer pinleri etkilemeden bir maskeleme konsepti ve mantıksal kaydırma işlemi kullanıyoruz. Yalnızca pinlerin (P0.12-P0.15) kullanıldığı ve P0.4, P0.6 gibi diğer pinlerin etkilenmediği anlamına gelir. Verileri dört bit olarak kaydırarak ve alt yarım bayt yerine üst yarım bayt yaparak ve üst yarım bayt maskeleyerek yapılacaktır. Ve sonra alt bitleri sıfır (0XF0) yaparız ve çıkışta üst yarım bayt verisini elde etmek için yarım bayt verisi ile ORed yaparız.
Daha düşük yarım bayt verisi için benzer işlem kullanılır , ancak burada verileri kaydırmamıza gerek yoktur.
Verileri çıktıya yazarken, yani komut modunda RS LOW olmalı ve yürütmek için enable YÜKSEK olmalı ve veri modunda RS YÜKSEK olmalı ve yürütmek için enable YÜKSEK olmalıdır.
Şimdi çıktıda yazdırılacak dizi verisini göndermek için, aynı ilke yarım bayt şeklinde kullanılır. Buradaki önemli adım KAYIT SEÇİMİ (RS) veri modu için YÜKSEK olmalıdır.
void LCD_DISPLAY (char * msg) // Tek tek gönderilen karakterleri yazdırma işlevi { uint8_t i = 0; while (msg! = 0) { IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0xF0) << 8)); // Üst yarım bayt gönderir IO0SET = 0x00000050; // RS HIGH & ENABLE HIGH veri yazdırmak için IO0CLR = 0x00000020; // RW LOW Yazma modu gecikmesi ms (2); IO0CLR = 0x00000040; // EN = 0, RS ve RW değişmedi (yani RS = 1, RW = 0) gecikme ms (5); IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0x0F) << 12)); // Alt yarım bayt gönderir IO0SET = 0x00000050; // RS & EN YÜKSEK IO0CLR = 0x00000020; gecikme ms (2); IO0CLR = 0x00000040; gecikme ms (5); i ++; }
Tam Kodlama ve Gösteri videosu aşağıda verilmiştir.