Python ile 2×16 Karakter LCD Kontrolü

raspi_tankado_com_lcd_16x2

Daha önce burada PIC mikrodenetleyicisi ile LCD‘nin nasıl sürüleceğinden bahsetmiştim. RPi Python kütüphanesi içinde LCD sürmek için bir kütüphane de bulunuyor. Aşağıdaki kod ile komut satırından verebileceğiniz argümanlar ile LCD ekranına değer yazdırabilirsiniz. Kullanımı şöyle olacaktır:

sudo python lcd2.py ‘Merhaba Raspi’  ‘www.tankado.com’

Tek tırnak işaretleri arasında verilen ilk parametre LCD ekranın birinci satırına, ikinci parametre de ikinci satırına yazdırılacak ve yazı ekranda kalacaktır.

#!/usr/bin/python
#
# HD44780 LCD Test Script for
# Raspberry Pi
#
# Author : Matt Hawkins
# Site : http://www.raspberrypi-spy.co.uk
#
# Date : 26/07/2012
#
# Edited : Ozgur Koca
# Site : http://raspberry-pi.tankado.com
# Wiring-pi baglanti semasi
# 1 : GND
# 2 : 5V
# 3 : Kontrast (0-5V)* (En yuksek parlaklik icin saseye bagla)
# 4 : RS (Register Select)
# 5 : R/W (Read Write) - Toprak
# 6 : Enable or Strobe
# 7 : Data Bit 0 - Kullanilmiyor
# 8 : Data Bit 1 - Kullanilmiyor
# 9 : Data Bit 2 - Kullanilmiyor
# 10: Data Bit 3 - Kullanilmiyor
# 11: Data Bit 4
# 12: Data Bit 5
# 13: Data Bit 6
# 14: Data Bit 7
# 15: LCD Arka aydinlatma +5V
# 16: LCD ARka aydinlatma GND
#import
import RPi.GPIO as GPIO
import time
import sys
# Define GPIO to LCD mapping
LCD_RS = 7
LCD_E = 8
LCD_D4 = 25
LCD_D5 = 24
LCD_D6 = 23
LCD_D7 = 18
# Define some device constants
LCD_WIDTH = 16 # Maximum characters per line
LCD_CHR = True
LCD_CMD = False
LCD_LINE_1 = 0x80 # LCD RAM address for the 1st line
LCD_LINE_2 = 0xC0 # LCD RAM address for the 2nd line
# Timing constants
E_PULSE = 0.00005
E_DELAY = 0.00005
def main():
# Main program block
GPIO.setmode(GPIO.BCM) # Use BCM GPIO numbers
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
# Initialise display
lcd_init()
# Send some test
lcd_byte(LCD_LINE_1, LCD_CMD)
lcd_string( str(sys.argv[1]) )
lcd_byte(LCD_LINE_2, LCD_CMD)
lcd_string( str(sys.argv[2]) )
def lcd_init():
# Initialise display
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):
# Send string to display
message = message.ljust(LCD_WIDTH," ")
for i in range(LCD_WIDTH):
lcd_byte(ord(message[i]),LCD_CHR)
def lcd_byte(bits, mode):
# Send byte to data pins
# bits = data
# mode = True for character
# False for command
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()
 

LCD’yi 4bit’lik iletişim modunda kullandık ve Raspberry Pi ile 6 pin üzerinden (GPIO7-8-18-23-24-25) haberleştirdik. Kaynak kod içerisinde not olarak verilen Raspberry Pi bacakları WiringPi kütüphanesinde tanımlanmış olan bacak numaralarıdır. Bunların GPIO veya P1 karşılıklarını aşağıdaki tablodan görebilirsiniz.

LCD Pin Function Pi Function Pi Pin
01 GND GND P1-06
02 +5V +5V P1-02
03 Contrast GND P1-06
04 RS GPIO7 P1-26
05 RW GND P1-06
06 E GPIO8 P1-24
07 Data 0
08 Data 1
09 Data 2
10 Data 3
11 Data 4 GPIO25 P1-22
12 Data 5 GPIO24 P1-18
13 Data 6 GPIO23 P1-16
14 Data 7 GPIO18 P1-12
15 +5V via 560ohm
16 GND P1-06

tankado_raspberry_lcd_16x2

Yazar: Özgür Koca

Yazar - Tankado.com

Bir yanıt yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.