Ekran, ister ev aletleri ister endüstriyel makineler olsun, herhangi 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, 16x2 LCD ekran, TFT dokunmatik ekran, OLED ekran gibi birçok ekran türü vardır.
16x2 LCD ekran en temel ekran modülüdür ve aynı zamanda hesap makinesi, dijital sayaç vb. Gibi bazı küçük elektronik ekipmanlarda da kullanılır. Diğer mikro denetleyicilerle temel arayüz dahil 16x2 LCD kullanarak birçok proje yaptık:
- 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 Atmega16 AVR mikrodenetleyicisi arasında nasıl arayüz oluşturacağımızı ve basit bir karşılama mesajı görüntüleyeceğimizi göreceğiz.
Gerekli Bileşenler
- Atmega16
- 16x2 LCD Modülü
- Süveter
- Breadboard
Devre şeması
16x2 LCD Ekran için Atmega16'nın Programlanması
Programlama herhangi bir harici kitaplık gerektirmez. Burada Atmega16, USBASP ve Atmel Studio7.0 kullanılarak programlanmıştır. Tam Program ve Çalışma Videosu proje sonunda verilir, sadece programı Atmega16'ya yükleyin ve LCD'nin parlaklığını ayarlamak için 10k POT'u döndürün.Başlangıçta CPU Frekansını tanımlayın ve IO pinlerine erişim gibi Atmel Studio Paketi ile birlikte gelen gerekli kütüphaneleri ve
Programda LCD'nin RS ve EN pinlerini tanımlayın. RS Pinleri, veri ve komut kaydını seçmek için kullanılır. Etkinleştirme pimi verileri kilitler.
#define tr PA3 # tanım rs PA2
Ayrıca, LCD arayüzünde hangi Atmega16 PORT'unun kullanılacağını da tanımlayın. Burada PORTA kullanılır.
#define lcdDirection DDRA #define lcdPort PORTA
Sonraki adım, bir parametre ileterek bir komutu kabul edecek bir işlev oluşturmaktır. Birçok LCD HEX Komutu vardır. Hex Komutları, LCD'nin işlevini tanımlamak için kullanılır. LCD'nin 4-bit Modunu kullandığımız için, bayt (8-bit) iki paket halinde gönderilecektir. Bir paket Upper Nibble (4-bit) ve diğer paket Lower Nibble (4-bit) olacaktır.
void lcdCommand (işaretsiz karakter komutları) { lcdPort = (lcdPort & 0x0F) - (komutlar & 0xF0); lcdPort & = ~ (1 <
Bir sonraki adım , karakterleri kabul etmek ve LCD portuna mandallamak olacaktır. Alınan karakterler daha sonra yarım bayt ile LCD'ye gönderilir. İşlev, karakteri geçiş parametresini kullanarak alır ve ardından üst ve alt yarım baytları alır. 'Rs' pini, veri kaydı için yüksek olarak ayarlanır ve ardından veriyi kilitlemek için yükselen bir darbe gönderilir. Benzer şekilde, düşük yarım bayt, enable değerini değiştirerek ve etkinleştirme için yükselen darbeyi göndererek gönderilir.
void lcdChar (işaretsiz karakter dizisi) { lcdPort = (lcdPort & 0x0F) - (string & 0xF0); lcdPort - = (1 <
Bu işlev sadece karakteri dizgeye dönüştürür ve daha sonra dizge yazmanın gerekli olduğu programda kullanılabilir.
void lcdString (char * str) { int j; for (j = 0; str! = 0; j ++) { lcdChar (str); } }
Şimdi sadece ekranı temizlemek için bir işlev yazılmıştır. Sadece 01 komutunu HEX'e göndermeniz ve ardından imleci başlangıç konumuna ayarlamanız yeterlidir.
void lcdClear () { lcdCommand (0x01); _delay_ms (2); lcdCommand (0x80); }
Şimdi ana işlevde, LCD başlatılır. Başlangıçta LCD'nin arabirime PORT yönünü ayarlayın. Burada PORT OUTPUT olarak ayarlanır, bu nedenle FF'yi ayarlayın.
lcdDirection = 0xFF; _delay_ms (20)
Ardından , 02'yi onaltılık olarak göndererek LCD'yi 4 bit moduna ayarlayın. Ayrıca, 2 satır, 15x7 matris pikselini 4 bit modunda ayarlamak için 28'i onaltılık olarak gönderin.
lcdCommand (0x02); lcdCommand (0x28);
Komut 0c ve 06 imleç pozisyonunu kontrol etmek için kullanılır. Ve son olarak 01'i onaltılık olarak göndererek ekranı temizleyin. Bu, LCD'nin başlatılmasını tamamlayacaktır.
lcdCommand (0x0c); lcdCommand (0x06); lcdCommand (0x01);
Başlatma tamamlandıktan sonra bir dizi göndererek LCD'yi test edin. Burada bir dize "gönderiyor Tela LCD 1'de" st satırda.
lcdString ("Arayüz LCD");
Ardından c0 komutunu onaltılık olarak göndererek imleci bir sonraki satıra taşıyın. Ve son olarak bu konuma " Atmega1 6 ile" yazınız.
lcdCommand (0xC0); lcdString ("Atmega16 ile");
Bu, 16x2 LCD'yi Atmega16 ile Arayüzleştirme hakkındaki tüm öğreticiyi bitirir. Herhangi bir görüntü veya piksel almazsanız, kablolarınızı kod ve devre şemasına göre kontrol edin veya LCD'nin V0 pinine takılı POT'un değerini değiştirin. Herhangi bir şüpheniz veya öneriniz varsa, forumumuza yazarak veya aşağıdan yorum yaparak bize ulaşabilirsiniz.