Facebook RSS Feed
 
.NET Micro Framework: Netduino: Character LCD Kullanımı
Tarih: 07.12.2013, Platform: .NET MF 4.2, IDE: Visual Studio 2012, Level: 200

Tasarladığınız cihazın kullanıcı ile haberleşmesinde LED'lerden renkli dokunmatik LCD'lere kadar bir çok farklı bileşen tercih edebiliyoruz. Üreteceğimiz cihazın özelliğine, hedef maliyetine ve fonksiyonuna göre bu karar veriliyor. Character LCD'ler maliyetleri ve kullanım kolaylığı nedeniyle en çok tercih edilen ekranlar arasında yer alıyor. Bu LCD'ler harf, rakam ve özel işaretleri gösterebiliyor. Çoğunlukla 1, 2 ya da 4 satır, 16, 20, 32 ya da 40 sütundan oluşurlar.

Hedef

Netduino'ya shield ya da breadboard aracılığıyla bağlanan bir LCD üzerinde yazı göstermek için gerekli altyapının sağlanması üzerinde duracağız.

Gerekenler

Netduino Plus 2

LCD Shield yada aşağıdaki prototip parçaları:
Breadboard
2x16 / 4x20 Character LCD
Potansiyometre
10Ω Direnç
20x Jumper kablosu

Çalışma Mantığı

LCD'ye karakter yazdırmadan önce ekranın işleme hazırlanması gerekir. Uygulamamıza ekleyeceğimiz CharLCD sınıfı bu görevi üstlenecek. Daha sonra uygulama kodları içerisinden imleci istenilen satır ve sütuna getirip, Print metodu ile o pozisyondan itibaren yazdırmak istediğimiz karakterleri yazdıracağız.

Bağlantı Şeması

Aşağıdaki şema gözünüzü korkutmasın. Bu yalnızca başlangıç! Elinizde LCD shield varsa, bağlantı noktalarını kontrol ederek shield'ı kullanabilirsiniz. Shield'ınız yoksa, LCD shield'larla pin uyumlu aşağıdaki prototipi kurabilirsiniz.

-

Bağlantılar

DB4: Digital 4
DB5: Digital 5
DB6: Digital 6
DB7: Digital 7
RS: Digital 8
EN: Digital 9

Uygulama Kodları

Visual Studio'dan NetduinoLCD adında Micro Framework Console Application oluşturun. Proje özelliklerinden SDK versiyonunu Netduino'nuza yüklü versiyon ile aynı olacak şekilde ayarlayın. (4.2) Proje referanslarına Microsoft.SPOT.Hardware.dll, SecretLabs.NETMF.Hardware.dll ve SecretLabs.NETMF.Hardware.NetduinoPlus.dll dosyalarını ekleyin.

Projeye CharLCD.cs adında bir class ekleyin. Bu class, LCD ile iletişimi sağlamakla sorumlu olacak. Class'ın içeriği şöyle olacak:

[C#] CharLCD.cs

using System;
using System.Threading;
using Microsoft.SPOT.Hardware;
 
namespace NetduinoLCD
{
    public class CharLCD : IDisposable
    {
        static OutputPort LCD_RS;
        static OutputPort LCD_E;
        static OutputPort LCD_D4;
        static OutputPort LCD_D5;
        static OutputPort LCD_D6;
        static OutputPort LCD_D7;
 
        const byte DISP_ON = 0xC;     // LCD'yi aç
        const byte CLR_DISP = 1;      // Ekranı temizle
        const byte CUR_HOME = 2;      // İmleci başa getir ve ekran hafızasını temizle
        const byte SET_CURSOR = 0x80; // SET_CURSOR + X : imleç posizyonunu X'e ayarla
 
        public CharLCD(Cpu.Pin D4, Cpu.Pin D5, Cpu.Pin D6, Cpu.Pin D7,
            Cpu.Pin RS, Cpu.Pin E)
        {
            LCD_RS = new OutputPort((Cpu.Pin)RS, false);
            LCD_E = new OutputPort((Cpu.Pin)E, false);
            LCD_D4 = new OutputPort((Cpu.Pin)D4, false);
            LCD_D5 = new OutputPort((Cpu.Pin)D5, false);
            LCD_D6 = new OutputPort((Cpu.Pin)D6, false);
            LCD_D7 = new OutputPort((Cpu.Pin)D7, false);
 
            LCD_RS.Write(false);
 
            // 4 bit veri iletişimi
            Thread.Sleep(50);
				
            LCD_D7.Write(false); LCD_D6.Write(false);
            LCD_D5.Write(true); LCD_D4.Write(true);
            LCD_E.Write(true); LCD_E.Write(false);
 
            Thread.Sleep(50);
 
            LCD_D7.Write(false); LCD_D6.Write(false);
            LCD_D5.Write(true); LCD_D4.Write(true);
            LCD_E.Write(true); LCD_E.Write(false);
 
            Thread.Sleep(50);
 
            LCD_D7.Write(false); LCD_D6.Write(false);
            LCD_D5.Write(true); LCD_D4.Write(true);
            LCD_E.Write(true); LCD_E.Write(false);
 
            Thread.Sleep(50);
 
            LCD_D7.Write(false); LCD_D6.Write(false);
            LCD_D5.Write(true); LCD_D4.Write(false);
            LCD_E.Write(true); LCD_E.Write(false);
 
            SendCmd(DISP_ON);
            SendCmd(CLR_DISP);
        }
 
        // LCD'ye ASCII karakteri gönderir
        void Putc(byte c)
        {
            LCD_D7.Write((c & 0x80) != 0);
            LCD_D6.Write((c & 0x40) != 0);
            LCD_D5.Write((c & 0x20) != 0);
            LCD_D4.Write((c & 0x10) != 0);
            LCD_E.Write(true); LCD_E.Write(false);
 
            LCD_D7.Write((c & 0x08) != 0);
            LCD_D6.Write((c & 0x04) != 0);
            LCD_D5.Write((c & 0x02) != 0);
            LCD_D4.Write((c & 0x01) != 0);
            LCD_E.Write(true); LCD_E.Write(false);
            //Thread.Sleep(1);
        }
 
        // LCD komutu gönderir
        void SendCmd(byte c)
        {
            LCD_RS.Write(false); // LCD'yi Data moduna al
 
            LCD_D7.Write((c & 0x80) != 0);
            LCD_D6.Write((c & 0x40) != 0);
            LCD_D5.Write((c & 0x20) != 0);
            LCD_D4.Write((c & 0x10) != 0);
            LCD_E.Write(true); LCD_E.Write(false);
 
            LCD_D7.Write((c & 0x08) != 0);
            LCD_D6.Write((c & 0x04) != 0);
            LCD_D5.Write((c & 0x02) != 0);
            LCD_D4.Write((c & 0x01) != 0);
            LCD_E.Write(true); LCD_E.Write(false);
 
            Thread.Sleep(1);
            LCD_RS.Write(true); // LCD'yi Data moduna al
        }
 
        public void Print(string str)
        {
            for (int i = 0; i < str.Length; i++)
                Putc((byte)str[i]);
        }
 
        public void Clear()
        {
            SendCmd(CLR_DISP);
        }
 
        public void CursorHome()
        {
            SendCmd(CUR_HOME);
        }
 
        public void SetCursor(byte row, byte col)
        {
            SendCmd((byte)(SET_CURSOR | row << 6 | col));
        }
        public void Dispose()
        {
            LCD_D4.Dispose();
            LCD_D5.Dispose();
            LCD_D6.Dispose();
            LCD_D7.Dispose();
            LCD_RS.Dispose();
            LCD_E.Dispose();
        }
    }
}

Yardımcı sınıfımızı oluşturduktan sonra, uygulamanın ana işleyişinin gerçekleşeceği Program.cs dosyasını şöyle düzenleyelim:

[C#] Program.cs

using System;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware;
using SecretLabs.NETMF.Hardware.NetduinoPlus;

namespace NetduinoLCD
{
    public class Program
    {
        static CharLCD lcd = new CharLCD(
            Pins.GPIO_PIN_D4, // D4
            Pins.GPIO_PIN_D5, // D5
            Pins.GPIO_PIN_D6, // D6
            Pins.GPIO_PIN_D7, // D7
            Pins.GPIO_PIN_D8, // RS
            Pins.GPIO_PIN_D9); // E

        public static void Main()
        {
            // LCD Metodları

            // Ekranı sil
            lcd.Clear();

            // İlk satırın ilk karakterine git
            lcd.CursorHome();

            // İmleç pozisyonundan itibaren yazdır
            lcd.Print("Netduino");

            // İlmeci 2. satırın ilk karakterine götür
            lcd.SetCursor(1, 0);

            // İmleç pozisyonundan itibaren yazdır
            lcd.Print("Micro Framework");

            // LCD için ayrılan kaynakları serbest bırak
            lcd.Dispose();

            // Main thread'i uyut
            Thread.Sleep(Timeout.Infinite);
        }
    }
}

Geliştirdiğimiz uygulamayı çalıştırdığınızda, LCD'nin 1 ve 2. satırlarında belirlediğimiz yazıların çıktığını göreceksiniz.


Ek Dosya: Belirtilmemiş.
Okunma Sayısı: 2001

comments powered by Disqus
 
Hoşgeldiniz!
Son güncelleme: 25.12.2016
-
Yeni Teknik Yazılar
Latte Panda İncelemesi
Turta IoT HAT İncelemesi
USB Gamepad Kullanımı
GPIO Kullanımı
VEML6075 UV Sensör Kullan...
-
İlgili Gruplar
.NET MF ve Gadgeteer FB Grubu
İst. IoT & Wearables Meet-up
-
 

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.Copyright © 1999 - 2017, Umut Erkal. Bu materyal, "Creative Commons Public Licence" ile sunulmuştur.
Kaynak göstererek ve ücretsiz olarak, aynı şartlar altında paylaşabilir ve kullanabilirsiniz. | Kullanım Sözleşmesi