Guest User

Untitled

a guest
Jul 14th, 2016
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.96 KB | None | 0 0
  1. import i2c_lib
  2. from time import sleep
  3.  
  4. # LCD Address
  5. ADDRESS = 0x3e
  6.  
  7. # commands
  8. LCD_CLEARDISPLAY = 0x01
  9. LCD_RETURNHOME = 0x02
  10. LCD_ENTRYMODESET = 0x04
  11. LCD_DISPLAYCONTROL = 0x08
  12. LCD_CURSORSHIFT = 0x10
  13. LCD_FUNCTIONSET = 0x20
  14. LCD_SETCGRAMADDR = 0x40
  15. LCD_SETDDRAMADDR = 0x80
  16.  
  17. # flags for display entry mode
  18. LCD_ENTRYRIGHT = 0x00
  19. LCD_ENTRYLEFT = 0x02
  20. LCD_ENTRYSHIFTINCREMENT = 0x01
  21. LCD_ENTRYSHIFTDECREMENT = 0x00
  22.  
  23. # flags for display on/off control
  24. LCD_DISPLAYON = 0x04
  25. LCD_DISPLAYOFF = 0x00
  26. LCD_CURSORON = 0x02
  27. LCD_CURSOROFF = 0x00
  28. LCD_BLINKON = 0x01
  29. LCD_BLINKOFF = 0x00
  30.  
  31. # flags for display/cursor shift
  32. LCD_DISPLAYMOVE = 0x08
  33. LCD_CURSORMOVE = 0x00
  34. LCD_MOVERIGHT = 0x04
  35. LCD_MOVELEFT = 0x00
  36.  
  37. # flags for function set
  38. LCD_8BITMODE = 0x10
  39. LCD_4BITMODE = 0x00
  40. LCD_2LINE = 0x08
  41. LCD_1LINE = 0x00
  42. LCD_5x10DOTS = 0x04
  43. LCD_5x8DOTS = 0x00
  44.  
  45. # flags for backlight control
  46. LCD_BACKLIGHT = 0x08
  47. LCD_NOBACKLIGHT = 0x00
  48.  
  49. En = 0b00000100 # Enable bit
  50. Rw = 0b00000010 # Read/Write bit
  51. Rs = 0b00000001 # Register select bit
  52.  
  53. class lcd:
  54.    #initializes objects and lcd
  55.    def __init__(self):
  56.        self.lcd_device = i2c_lib.i2c_device(ADDRESS)
  57.        self.lcd_write(0x03)
  58.        self.lcd_write(0x03)
  59.        self.lcd_write(0x03)
  60.        self.lcd_write(0x02)
  61.        
  62.        self.lcd_write(LCD_FUNCTIONSET | LCD_2LINE | LCD_5x8DOTS | LCD_4BITMODE)
  63.        self.lcd_write(LCD_DISPLAYCONTROL | LCD_DISPLAYON)
  64.        self.lcd_write(LCD_CLEARDISPLAY)  
  65.        self.lcd_write(LCD_ENTRYMODESET | LCD_ENTRYLEFT)
  66.        sleep(0.2)  
  67.  
  68.    # clocks EN to latch command
  69.    def lcd_strobe(self, data):
  70.        self.lcd_device.write_cmd(data | En | LCD_BACKLIGHT)
  71.        sleep(.0005)
  72.        self.lcd_device.write_cmd(((data & ~En) | LCD_BACKLIGHT))
  73.        sleep(.0001)  
  74.  
  75.    def lcd_write_four_bits(self, data):
  76.        self.lcd_device.write_cmd(data | LCD_BACKLIGHT)
  77.        self.lcd_strobe(data)
  78.  
  79. # write a command to lcd
  80.    def lcd_write(self, cmd, mode=0):
  81.        self.lcd_write_four_bits(mode | (cmd & 0xF0))
  82.        self.lcd_write_four_bits(mode | ((cmd << 4) & 0xF0))
  83.  
  84. # put string function
  85.    def lcd_display_string(self, string, line, offset):
  86.        if line == 1:
  87.            #0x80 | 0x00 = 0x80
  88.            #self.lcd_write(0x80 + offset)
  89.            self.lcd_write((LCD_SETDDRAMADDR | 0x00) + offset)
  90.        if line == 2:
  91.            #0x80 | 0x40 = 0xC0
  92.            #self.lcd_write(0xC0 + offset)
  93.            self.lcd_write((LCD_SETDDRAMADDR | 0x40) + offset)
  94.        if line == 3:
  95.            #0x80 | 0x14 = 0x94
  96.            #self.lcd_write(0x94 + offset)
  97.            self.lcd_write((LCD_SETDDRAMADDR | 0x14) + offset)
  98.        if line == 4:
  99.            #0x80 | 0x54 = D4
  100.            #self.lcd_write(0xD4 + offset)
  101.            self.lcd_write((LCD_SETDDRAMADDR | 0x54) + offset)
  102.  
  103.        for char in string:
  104.            self.lcd_write(ord(char), Rs)
  105.  
  106. # clear lcd and set to home
  107.    def lcd_clear(self):
  108.        self.lcd_write(LCD_CLEARDISPLAY)
  109.        self.lcd_write(LCD_RETURNHOME)
Add Comment
Please, Sign In to add comment