Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import i2c_lib
- from time import *
- # LCD Address
- ADDRESS = 0x3f
- # commands
- LCD_CLEARDISPLAY = 0x01
- LCD_RETURNHOME = 0x02
- LCD_ENTRYMODESET = 0x04
- LCD_DISPLAYCONTROL = 0x08
- LCD_CURSORSHIFT = 0x10
- LCD_FUNCTIONSET = 0x20
- LCD_SETCGRAMADDR = 0x40
- LCD_SETDDRAMADDR = 0x80
- # flags for display entry mode
- LCD_ENTRYRIGHT = 0x00
- LCD_ENTRYLEFT = 0x02
- LCD_ENTRYSHIFTINCREMENT = 0x01
- LCD_ENTRYSHIFTDECREMENT = 0x00
- # flags for display on/off control
- LCD_DISPLAYON = 0x04
- LCD_DISPLAYOFF = 0x00
- LCD_CURSORON = 0x02
- LCD_CURSOROFF = 0x00
- LCD_BLINKON = 0x01
- LCD_BLINKOFF = 0x00
- # flags for display/cursor shift
- LCD_DISPLAYMOVE = 0x08
- LCD_CURSORMOVE = 0x00
- LCD_MOVERIGHT = 0x04
- LCD_MOVELEFT = 0x00
- # flags for function set
- LCD_8BITMODE = 0x10
- LCD_4BITMODE = 0x00
- LCD_2LINE = 0x08
- LCD_1LINE = 0x00
- LCD_5x10DOTS = 0x04
- LCD_5x8DOTS = 0x00
- # flags for backlight control
- LCD_BACKLIGHT = 0x08
- LCD_NOBACKLIGHT = 0x00
- En = 0b00000100 # Enable bit
- Rw = 0b00000010 # Read/Write bit
- Rs = 0b00000001 # Register select bit
- class lcd:
- #initializes objects and lcd
- def __init__(self):
- self.lcd_device = i2c_lib.i2c_device(ADDRESS)
- self.lcd_write0(0x03)
- self.lcd_write0(0x03)
- self.lcd_write0(0x03)
- self.lcd_write0(0x02)
- self.lcd_write0(LCD_FUNCTIONSET | LCD_2LINE | LCD_5x8DOTS | LCD_4BITMODE)
- self.lcd_write0(LCD_DISPLAYCONTROL | LCD_DISPLAYON)
- self.lcd_write0(LCD_CLEARDISPLAY)
- self.lcd_write0(LCD_ENTRYMODESET | LCD_ENTRYLEFT)
- sleep(0.2)
- # clocks EN to latch command
- def lcd_strobe0(self, data):
- self.lcd_device.write_cmd(data | En | LCD_NOBACKLIGHT)
- sleep(.0005)
- self.lcd_device.write_cmd(((data & ~En | LCD_NOBACKLIGHT)))
- sleep(.0001)
- def lcd_strobe1(self, data):
- self.lcd_device.write_cmd(data | En | LCD_BACKLIGHT)
- sleep(.0005)
- self.lcd_device.write_cmd(((data & ~En | LCD_BACKLIGHT)))
- sleep(.0001)
- def lcd_write_four_bits0(self, data):
- self.lcd_device.write_cmd(data | LCD_NOBACKLIGHT)
- self.lcd_strobe0(data)
- def lcd_write_four_bits1(self, data):
- self.lcd_device.write_cmd(data | LCD_BACKLIGHT)
- self.lcd_strobe1(data)
- # write a command to lcd
- def lcd_write0(self, cmd, mode=0):
- self.lcd_write_four_bits0(mode | (cmd & 0xF0))
- self.lcd_write_four_bits0(mode | ((cmd << 4) & 0xF0))
- def lcd_write1(self, cmd, mode=0):
- self.lcd_write_four_bits1(mode | (cmd & 0xF0))
- self.lcd_write_four_bits1(mode | ((cmd << 4) & 0xF0))
- # put string function
- def lcd_display_string0(self, string, line):
- if line == 1:
- self.lcd_write0(0x80)
- if line == 2:
- self.lcd_write0(0xC0)
- if line == 3:
- self.lcd_write0(0x94)
- if line == 4:
- self.lcd_write0(0xD4)
- for char in string:
- self.lcd_write0(ord(char), Rs)
- def lcd_display_string1(self, string, line):
- if line == 1:
- self.lcd_write1(0x80)
- if line == 2:
- self.lcd_write1(0xC0)
- if line == 3:
- self.lcd_write1(0x94)
- if line == 4:
- self.lcd_write1(0xD4)
- for char in string:
- self.lcd_write1(ord(char), Rs)
- # clear lcd and set to home
- def lcd_clear0(self):
- self.lcd_write0(LCD_CLEARDISPLAY)
- self.lcd_write0(LCD_RETURNHOME)
- def lcd_clear1(self):
- self.lcd_write1(LCD_CLEARDISPLAY)
- self.lcd_write1(LCD_RETURNHOME)
- def lcd_write_char0(self, charvalue, mode=1):
- self.lcd_write_four_bits0(mode | (charvalue & 0xF0))
- self.lcd_write_four_bits0(mode | ((charvalue << 4) & 0xF0))
- def lcd_write_char1(self, charvalue, mode=1):
- self.lcd_write_four_bits1(mode | (charvalue & 0xF0))
- self.lcd_write_four_bits1(mode | ((charvalue << 4) & 0xF0))
- def lcd_load_custom_chars0(self, fontdata):
- self.lcd_write0(0x40);
- for char in fontdata:
- for line in char:
- self.lcd_write_char0(line)
- def lcd_load_custom_chars1(self, fontdata):
- self.lcd_write1(0x40);
- for char in fontdata:
- for line in char:
- self.lcd_write_char1(line)
- # define precise positioning (addition from the forum)
- def lcd_display_string_pos0(self, string, line, pos):
- if line == 1:
- pos_new = pos
- elif line == 2:
- pos_new = 0x40 + pos
- elif line == 3:
- pos_new = 0x14 + pos
- elif line == 4:
- pos_new = 0x54 + pos
- self.lcd_write0(0x80 + pos_new)
- for char in string:
- self.lcd_write0(ord(char), Rs)
- # define precise positioning (addition from the forum)
- def lcd_display_string_pos1(self, string, line, pos):
- if line == 1:
- pos_new = pos
- elif line == 2:
- pos_new = 0x40 + pos
- elif line == 3:
- pos_new = 0x14 + pos
- elif line == 4:
- pos_new = 0x54 + pos
- self.lcd_write1(0x80 + pos_new)
- for char in string:
- self.lcd_write1(ord(char), Rs)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement