Gömülü projeler ve elektronik ürünlerdeki en önemli çıktı aygıtları teşhir üniteleridir. 16x2 LCD, en çok kullanılan ekran birimlerinden biridir. 16x2 LCD, satır başına 16 karakterin görüntülenebileceği iki satır olduğu ve her karakterin LCD üzerinde 5X7 matris alanı kapladığı anlamına gelir. Bu eğitimde 16X2 LCD modülünü 8051 mikro denetleyiciye (AT89S52) bağlayacağız. LCD'yi 8051 mikro denetleyiciyle arayüzlemek yeni başlayanlar için oldukça karmaşık görünebilir, ancak kavramı anladıktan sonra çok basit ve kolay görünecektir. 16 pin LCD'yi anlamanız ve mikrodenetleyiciye bağlamanız gerektiği için zaman alabilir. Öyleyse önce LCD modülünün 16 pinini anlayalım.
Beş kategoriye ayırabiliriz, Güç Pimleri, kontrast pimi, Kontrol Pimleri, Veri pimleri ve Arka Işık pimleri.
Kategori |
PIN NO. |
Pin Adı |
Fonksiyon |
Güç Pimleri |
1 |
VSS |
Zemin Pimi, Toprağa bağlı |
2 |
VDD veya Vcc |
Gerilim Pimi + 5V |
|
Kontrast Pimi |
3 |
V0 veya VEE |
Kontrast Ayarı, değişken bir dirençle Vcc'ye bağlanır. |
Kontrol Pimleri |
4 |
RS |
Kayıt Seç Pin, RS = 0 Komut modu, RS = 1 Veri modu |
5 |
RW |
Okuma / Yazma pimi, RW = 0 Yazma modu, RW = 1 Okuma modu |
|
6 |
E |
LCD'yi etkinleştirmek için yüksek ila düşük darbe gerekir |
|
Veri Pinleri |
7-14 |
D0-D7 |
Veri Pinleri, LCD'de gösterilecek Verileri veya komut talimatlarını saklar |
Arka Işık Pimleri |
15 |
LED + veya A |
Arka Işık + 5V'ye güç vermek için |
16 |
LED- veya K |
Arka Işık Zemin |
Kontrol pimleri dışında tüm pimler adları ve işlevleri itibariyle açıkça anlaşılabilir, bu nedenle aşağıda açıklanmıştır:
RS: RS, kayıt seçme pinidir. LCD'de görüntülenmek üzere bazı veriler gönderiyorsak, bunu 1 olarak ayarlamamız gerekir. Ve ekranı temizlemek gibi bir komut talimatı gönderiyorsak (onaltılık kod 01) 0 olarak ayarlayacağız.
RW: Bu Okuma / Yazma pinidir, eğer LCD'ye bazı veriler yazacaksak onu 0 olarak ayarlayacağız. LCD modülünden okuyorsak 1'e ayarlayın. Genellikle bu 0'a ayarlanır çünkü LCD'den veri okumamıza gerek yoktur. Bazı zamanlar sadece bir “LCD durumunu al” talimatının okunması gerekir.
E: Bu pin, yüksek ila düşük darbe verildiğinde modülü etkinleştirmek için kullanılır. 450 ns'lik bir darbe verilmelidir. HIGH'dan LOW'a geçiş, modülü ETKİN hale getirir.
LCD'de önceden ayarlanmış bazı komut talimatları vardır, bunları LCD'yi hazırlamak için aşağıdaki programımızda kullandık (lcd_init () işlevinde). Bazı önemli komut talimatları aşağıda verilmiştir:
Hex Kodu |
LCD Talimat Kaydına Komut |
0F |
LCD AÇIK, imleç AÇIK |
01 |
Ekranı temizle |
02 |
Eve dön |
04 |
İmleci azalt (imleci sola kaydır) |
06 |
İmleci artır (imleci sağa kaydır) |
05 |
Ekranı sağa kaydır |
07 |
Ekranı sola kaydır |
0E |
Ekran AÇIK, imleç yanıp sönüyor |
80 |
İmleci ilk satırın başına zorla |
C0 |
İmleci ikinci satırın başına zorla |
38 |
2 satır ve 5 × 7 matris |
83 |
İmleç satırı 1, konum 3 |
3C |
İkinci satırı etkinleştir |
08 |
Ekran KAPALI, imleç KAPALI |
C1 |
İkinci satıra atla, konum 1 |
OC |
Ekran AÇIK, imleç KAPALI |
C1 |
İkinci satıra atla, konum 1 |
C2 |
İkinci satıra atla, konum 2 |
Devre Şeması ve Açıklama
8051 mikro denetleyici ile LCD arabirimi için devre şeması yukarıdaki şekilde gösterilmiştir. 8051 hakkında temel bir anlayışınız varsa, o zaman EA (PIN 31), XTAL1 & XTAL2, RST pin (PIN 9), Vcc ve 8051 mikrodenetleyicinin Ground Pinini bilmeniz gerekir. Bu Pinleri yukarıdaki devrede kullandım. Bu konuda hiçbir fikriniz yoksa, LCD arayüzünden geçmeden önce bu Makaleyi 8051 Mikrodenetleyici ile LED Arayüzünü okumanızı tavsiye ederim.
Bu yüzden yukarıdaki pinlerin yanı sıra, LCD'nin veri pinlerini (D0-D7) Port 2 (P2_0 - P2_7) mikrodenetleyicisine bağladık. Ve kontrol pinleri RS, RW ve E sırasıyla mikrodenetleyicinin 12,13,14 (port 3'ün 2,3,4 pimi) pinine.
LCD'nin PIN 2 (VDD) ve PIN 15 (Arka ışık kaynağı) voltaja (5v), PIN 1 (VSS) ve PIN 16 (Arka ışık topraklama) toprağa bağlanır.
Pin 3 (V0), LCD'nin kontrastını ayarlamak için 10k değişken bir direnç üzerinden voltaja (Vcc) bağlanır. Değişken direncin orta ayağı PIN 3'e bağlanır ve diğer iki ayak gerilim beslemesine ve Toprağa bağlanır.
Kod Açıklama
Kodu yorumlarla açıklamaya çalıştım (kodun kendisinde).
Komut modu ve veri modu hakkında daha önce açıkladığım gibi, komut gönderirken (fonksiyon lcd_cmd) RS = 0, RW = 0 ayarladığımızı ve bunu 1, sonra 0 yaparak E'ye HIGH to LOW puls verildiğini görebilirsiniz. Ayrıca LCD'ye veri gönderirken (fonksiyon lcd_data) RS = 1, RW = 0 ayarladık ve E'ye 1'den 0'a kadar bir HIGH to LOW puls verildi. Milisaniye cinsinden gecikme yaratmak için msdelay () fonksiyonu oluşturuldu. ve programda sıkça çağrılan, LCD modülünün dahili işlem ve komutları yürütmek için yeterli zamana sahip olması için denir.
Dizeyi yazdırmak için bir while döngüsü oluşturulmuştur; bu, son karaktere kadar (boş sonlandırıcı- '\ 0') her seferinde bir karakter yazdırmak için lcd_data işlevini çağırır.
Önceden ayarlanmış komut talimatlarını (yukarıda açıklanmıştır) kullanarak LCD'yi hazır hale getirmek için lcd_init () işlevini kullandık.