|
I haven't found any example running a 16x2 LCD display with this library, so I ported this one: http://www.raspberrypi-spy.co.uk ... ntrol-using-python/
- #!/usr/bin/python
- #import
- import time
- from pyA20.gpio import gpio
- from pyA20.gpio import port
- # Define gpio to LCD mapping
- LCD_RS = port.PA6
- LCD_E = port.PD14
- LCD_D4 = port.PC4
- LCD_D5 = port.PC7
- LCD_D6 = port.PA21
- LCD_D7 = port.PA20
- # 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.0005
- E_DELAY = 0.0005
- def main():
- # Main program block
- gpio.init()
- gpio.setcfg(LCD_RS, gpio.OUTPUT)
- gpio.setcfg(LCD_E, gpio.OUTPUT)
- gpio.setcfg(LCD_D4, gpio.OUTPUT)
- gpio.setcfg(LCD_D5, gpio.OUTPUT)
- gpio.setcfg(LCD_D6, gpio.OUTPUT)
- gpio.setcfg(LCD_D7, gpio.OUTPUT)
- # Initialise display
- lcd_init()
- while True:
- # Send some test
- lcd_string("Orange Pi",LCD_LINE_1)
- lcd_string("16x2 LCD Test",LCD_LINE_2)
- time.sleep(3) # 3 second delay
- # Send some text
- lcd_string("1234567890123456",LCD_LINE_1)
- lcd_string("abcdefghijklmnop",LCD_LINE_2)
- time.sleep(3) # 3 second delay
- # Send some text
- lcd_string("RaspberryPi-spy",LCD_LINE_1)
- lcd_string(".co.uk",LCD_LINE_2)
- time.sleep(3)
- # Send some text
- lcd_string("Follow me on",LCD_LINE_1)
- lcd_string("Twitter @RPiSpy",LCD_LINE_2)
- time.sleep(3)
- def lcd_init():
- # Initialise display
- lcd_byte(0x33,LCD_CMD) # 110011 Initialise
- lcd_byte(0x32,LCD_CMD) # 110010 Initialise
- lcd_byte(0x06,LCD_CMD) # 000110 Cursor move direction
- lcd_byte(0x0C,LCD_CMD) # 001100 Display On,Cursor Off, Blink Off
- lcd_byte(0x28,LCD_CMD) # 101000 Data length, number of lines, font size
- lcd_byte(0x01,LCD_CMD) # 000001 Clear display
- time.sleep(E_DELAY)
- 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
- lcd_toggle_enable()
- # 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
- lcd_toggle_enable()
- def lcd_toggle_enable():
- # Toggle enable
- time.sleep(E_DELAY)
- gpio.output(LCD_E, True)
- time.sleep(E_PULSE)
- gpio.output(LCD_E, False)
- time.sleep(E_DELAY)
- def lcd_string(message,line):
- # Send string to display
- message = message.ljust(LCD_WIDTH," ")
- lcd_byte(line, LCD_CMD)
- for i in range(LCD_WIDTH):
- lcd_byte(ord(message[i]),LCD_CHR)
- if __name__ == '__main__':
- try:
- main()
- except KeyboardInterrupt:
- pass
- finally:
- lcd_byte(0x01, LCD_CMD)
- lcd_string("Goodbye!",LCD_LINE_1)
Copy code |
|