RPi: 16×2 LCD Kullanımı

Merhabalar bu yazımda projelerde sık kullanabileceğiniz 16×2 LCD Display’e değineceğim.

lcdcesitFarklı 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… 🙂
lcdpin
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.

 

Akrilik-durumda-rgb-negatif-16x2-lcd-tuş-takımı-ile-kiti-ahududu-pi-2-modeli-b-b

 

Bu şekilde Raspberry Pi için üretilmişleri de bulunuyor. Direk GPIO pinleri üzerine takabilirsiniz. Tabi tamamen zevkine kalmış bir şey bu.

 

 

 

 

 

 

LCD-Display01

 

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.

Hakan Kaya
Yarı zamanlı mühendis. Yarı zamanlı eğitmen. Biraz da film sever.
error: 5846 sayılı Fikir ve Sanat Eserleri Kanunu tarafında içeriklerin izinsiz kopyalanması, paylaşılması ve çoğaltılması yasaktır.