Merhabalar bu yazımda projelerde sık kullanabileceğiniz 16×2 LCD Display’e değineceğim.
Farklı renkleri ve aydınlatma modelleri bulunan bu display’e 16×2 denilmesinin sebebi bir satırda 16 karakter ve yukarıdan aşağı 2 sütun olmasıdır. İşin gerçeği aslında satırda 16 adet bulunan ve sütunda 2 adet bulunan 5×8 piksel kümelerinden oluşur. Yani toplam 80×16 pikselimiz var. Biraz yakınlaştırınca sayabilirsiniz. İleri konular da kıçımızdan özel karakter uydururken bunun üzerine duracağım zaten. Bu displayin farklı çözünürlüklerinde olanları da var elbet; 16×4, 16×1 var da var konumuz o değil şimdi… 🙂
Bu displayin 16 adet pin çıkışı bulunur. Bu denenle pin bağlantıları biraz sinir bozucu olabiliyor. Displayi kullanmak için alternatif bir bağlantı olarak I2C bağlantısı da yapılabilir. Küçük bir modül gerekli yalnız. Kendi modülümü bir projede kullanıyorum gidip yenisi de almadım, bir ara alır bir şeyler deneriz.
Bu şekilde Raspberry Pi için üretilmişleri de bulunuyor. Direk GPIO pinleri üzerine takabilirsiniz. Tabi tamamen zevkine kalmış bir şey bu.
Pin bağlantılarını şekilde gibi yapıp kod kısmına geçebiliriz sanırım.
#!/usr/bin/python # # 16x2 LCD kullanimi # Raspberry Pi ile # # Author : Hakan Kaya # Site : http://blog.hakankaya.kim # LCD pin baglantilari # 1 : GND - GROUND (GND) # 2 : 5V - +5VOLT # 3 : Kontrast - Potansiyometrenin orta bacagi (0-5V)* # 4 : RS (Register Select)- LCD_RS # 5 : R/W (Read Write) - GROUND (GND) # 6 : E (Enable) - LCD_E # 7 : Data Bit 0 - Kullanilmadi # 8 : Data Bit 1 - Kullanilmadi # 9 : Data Bit 2 - Kullanilmadi # 10: Data Bit - Kullanilmadi # 11: Data Bit 4 - LCD_D4 # 12: Data Bit 5 - LCD_D5 # 13: Data Bit 6 - LCD_D6 # 14: Data Bit 7 - LCD_D7 # 15: LCD Backlight +5V** - LCD_ON # 16: LCD Backlight GND - GROUND (GND) # Kutuphaneler import RPi.GPIO as GPIO import time # Pin numaralarini tanimlama LCD_RS = 25 LCD_E = 24 LCD_D4 = 23 LCD_D5 = 17 LCD_D6 = 21 LCD_D7 = 22 LED_ON = 15 # Diger sabit tanimlamalari LCD_WIDTH = 16 # Bir satirdaki maksimum karakter sayisi LCD_CHR = True LCD_CMD = False LCD_LINE_1 = 0x80 # LCD RAM ilk satirinin adressi LCD_LINE_2 = 0xC0 # LCD RAM ikinci satirinin adresi # Zaman sabitleri E_PULSE = 0.00005 E_DELAY = 0.00005 # Ana program baslangici def main(): # LCD hazirkik fonksiyonunun cagrilmasi lcd_init() # Arkaplan aydinlatmasi test GPIO.output(LED_ON, True) time.sleep(1) GPIO.output(LED_ON, False) time.sleep(1) GPIO.output(LED_ON, True) time.sleep(1) while True: # sonsuz dongu # Ortalanmis yazi yazmak icin lcd_byte(LCD_LINE_1, LCD_CMD) lcd_string("Hakan Kaya",2) lcd_byte(LCD_LINE_2, LCD_CMD) lcd_string("Raspberry Pi",2) time.sleep(3) # 3 saniye bekletme # Sola yaslanmis yazi yazmak icin lcd_byte(LCD_LINE_1, LCD_CMD) lcd_string("Sola yaslanmis",1) lcd_byte(LCD_LINE_2, LCD_CMD) lcd_string("yazi",1) time.sleep(3) # 3 saniye bekleme # Saga yaslanmis yazi yazmak icin lcd_byte(LCD_LINE_1, LCD_CMD) lcd_string("Saga yaslanmis",3) lcd_byte(LCD_LINE_2, LCD_CMD) lcd_string("yazi",3) time.sleep(3) # 3 saniye bekleme # Ana fonksiyonda kullanilan fonksiyonlar # LCD onhazirlik fonksiyonu def lcd_init(): GPIO.setmode(GPIO.BCM) # Pin düzeni olarak BCM GPIO.setwarnings(False) # Uyarilari kapat GPIO.setup(LCD_E, GPIO.OUT) # E GPIO.setup(LCD_RS, GPIO.OUT) # RS GPIO.setup(LCD_D4, GPIO.OUT) # DB4 GPIO.setup(LCD_D5, GPIO.OUT) # DB5 GPIO.setup(LCD_D6, GPIO.OUT) # DB6 GPIO.setup(LCD_D7, GPIO.OUT) # DB7 GPIO.setup(LED_ON, GPIO.OUT) # Arkaplan Aydinlatmasi # Pinlere veri gonderimi lcd_byte(0x33,LCD_CMD) lcd_byte(0x32,LCD_CMD) lcd_byte(0x28,LCD_CMD) lcd_byte(0x0C,LCD_CMD) lcd_byte(0x06,LCD_CMD) lcd_byte(0x01,LCD_CMD) def lcd_string(message,style): # Yazi ayarlari # style=1 sola # style=2 orta # style=3 sag if style==1: message = message.ljust(LCD_WIDTH," ") elif style==2: message = message.center(LCD_WIDTH," ") elif style==3: message = message.rjust(LCD_WIDTH," ") for i in range(LCD_WIDTH): lcd_byte(ord(message[i]),LCD_CHR) def lcd_byte(bits, mode): # pinlere veri yollama # bits = data # mode = True for character (LCD_CHR) # False for command (LCD_CMD) GPIO.output(LCD_RS, mode) # RS # High bits GPIO.output(LCD_D4, False) GPIO.output(LCD_D5, False) GPIO.output(LCD_D6, False) GPIO.output(LCD_D7, False) if bits&0x10==0x10: GPIO.output(LCD_D4, True) if bits&0x20==0x20: GPIO.output(LCD_D5, True) if bits&0x40==0x40: GPIO.output(LCD_D6, True) if bits&0x80==0x80: GPIO.output(LCD_D7, True) # Toggle 'Enable' pin time.sleep(E_DELAY) GPIO.output(LCD_E, True) time.sleep(E_PULSE) GPIO.output(LCD_E, False) time.sleep(E_DELAY) # Low bits GPIO.output(LCD_D4, False) GPIO.output(LCD_D5, False) GPIO.output(LCD_D6, False) GPIO.output(LCD_D7, False) if bits&0x01==0x01: GPIO.output(LCD_D4, True) if bits&0x02==0x02: GPIO.output(LCD_D5, True) if bits&0x04==0x04: GPIO.output(LCD_D6, True) if bits&0x08==0x08: GPIO.output(LCD_D7, True) # Toggle 'Enable' pin time.sleep(E_DELAY) GPIO.output(LCD_E, True) time.sleep(E_PULSE) GPIO.output(LCD_E, False) time.sleep(E_DELAY) if __name__ == '__main__': main()
Haydi geçmiş olsun.
guzel olmus elinize saglık . raspberryden nextiona veri gondermek te yardım eder misiniz?
Teşekkürler. Sorunuz nedir?