python package pyA20 found here:
Last active
May 7, 2016 11:00
-
-
Save gtgt/c82322575b816ed836fca32c0c084dff to your computer and use it in GitHub Desktop.
Orange PI LCD test
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python | |
#-------------------------------------- | |
# ___ ___ _ ____ | |
# / _ \/ _ \(_) __/__ __ __ | |
# / , _/ ___/ /\ \/ _ \/ // / | |
# /_/|_/_/ /_/___/ .__/\_, / | |
# /_/ /___/ | |
# | |
# lcd_16x2.py | |
# 16x2 LCD Test Script | |
# | |
# Author : Matt Hawkins | |
# Date : 06/04/2015 | |
# | |
# http://www.raspberrypi-spy.co.uk/ | |
# | |
#-------------------------------------- | |
# The wiring for the LCD is as follows: | |
# 1 : GND | |
# 2 : 5V | |
# 3 : Contrast (0-5V)* | |
# 4 : RS (Register Select) | |
# 5 : R/W (Read Write) - GROUND THIS PIN | |
# 6 : Enable or Strobe | |
# 7 : Data Bit 0 - NOT USED | |
# 8 : Data Bit 1 - NOT USED | |
# 9 : Data Bit 2 - NOT USED | |
# 10: Data Bit 3 - NOT USED | |
# 11: Data Bit 4 | |
# 12: Data Bit 5 | |
# 13: Data Bit 6 | |
# 14: Data Bit 7 | |
# 15: LCD Backlight +5V** | |
# 16: LCD Backlight GND | |
#import | |
#import RPi.gpio.as GPIO | |
from pyA20.gpio import gpio | |
from pyA20.gpio import port | |
import time | |
# Define gpio.to LCD mapping | |
# for RaspberryPi | |
#LCD_RS = 7 | |
#LCD_E = 8 | |
#LCD_D4 = 25 | |
#LCD_D5 = 24 | |
#LCD_D6 = 23 | |
#LCD_D7 = 18 | |
# for OrangePi | |
LCD_RS = port.PD14 #PIN 12 | |
LCD_E = port.PC4 #PIN 16 | |
LCD_D4 = port.PC7 #PIN 18 | |
LCD_D5 = port.PA2 #PIN 22 | |
LCD_D6 = port.PC3 #PIN 24 | |
LCD_D7 = port.PA21 #PIN 26 | |
# 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.setwarnings(False) | |
gpio.init() # Use BCM gpio.numbers | |
gpio.setcfg(LCD_E, gpio.OUTPUT) # E | |
gpio.setcfg(LCD_RS, gpio.OUTPUT) # RS | |
gpio.setcfg(LCD_D4, gpio.OUTPUT) # DB4 | |
gpio.setcfg(LCD_D5, gpio.OUTPUT) # DB5 | |
gpio.setcfg(LCD_D6, gpio.OUTPUT) # DB6 | |
gpio.setcfg(LCD_D7, gpio.OUTPUT) # DB7 | |
# Initialise display | |
lcd_init() | |
while True: | |
# Send some test | |
lcd_string("Rasbperry 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) | |
# gpio.cleanup() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment