Advertisement
Guest User

lcd.py

a guest
May 24th, 2025
6
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.84 KB | None | 0 0
  1. import time
  2. import RPi.GPIO as GPIO
  3.  
  4. class LCD_GPIO(object):
  5. # Timing constants
  6. E_PULSE = 0.000005
  7. E_DELAY = 0.000005
  8.  
  9. def __init__(self, RST,RS,RW,E,CS1,CS2, D0, D1, D2, D3, D4, D5, D6, D7):
  10.  
  11. #GPIO number Assignment
  12.  
  13. self.CS1=CS1
  14. self.CS2=CS2
  15. self.RST=RST
  16. self.E = E
  17. self.RS = RS
  18. self.RW = RW
  19.  
  20. self.D0 = D0
  21. self.D1 = D1
  22. self.D2 = D2
  23. self.D3 = D3
  24. self.D4 = D4
  25. self.D5 = D5
  26. self.D6 = D6
  27. self.D7 = D7
  28.  
  29. GPIO.setmode(GPIO.BCM) # Use BCM GPIO numbers
  30.  
  31. GPIO.setup(self.E, GPIO.OUT) # E
  32. GPIO.setup(self.RW, GPIO.OUT) # RW
  33. GPIO.setup(self.RS, GPIO.OUT) # RS
  34.  
  35. GPIO.setup(self.D0, GPIO.OUT) # DB0
  36. GPIO.setup(self.D1, GPIO.OUT) # DB1
  37. GPIO.setup(self.D2, GPIO.OUT) # DB2
  38. GPIO.setup(self.D3, GPIO.OUT) # DB3
  39. GPIO.setup(self.D4, GPIO.OUT) # DB4
  40. GPIO.setup(self.D5, GPIO.OUT) # DB5
  41. GPIO.setup(self.D6, GPIO.OUT) # DB6
  42. GPIO.setup(self.D7, GPIO.OUT) # DB7
  43.  
  44. GPIO.setup(self.CS1, GPIO.OUT) # CS1
  45. GPIO.setup(self.CS2, GPIO.OUT) # CS2
  46.  
  47. GPIO.output(self.RS, 0)
  48. GPIO.output(self.RW, 0)
  49. GPIO.output(self.E, 0)
  50. GPIO.output(self.CS1, 0)
  51. GPIO.output(self.CS2, 0)
  52. GPIO.setup(self.RST, GPIO.OUT) # RST
  53.  
  54. GPIO.output(self.RST, 0)
  55. time.sleep(0.5)
  56. GPIO.output(self.RST, 1)
  57.  
  58. time.sleep(0.03)
  59.  
  60.  
  61.  
  62. def useDisp1(self):
  63. # use Controller 1 (Display's LEFT part)
  64. GPIO.output(self.CS1, 1)
  65. GPIO.output(self.CS2, 0)
  66.  
  67. def useDisp2(self):
  68. # use Controller 2 (Display's RIGHT part) -- correction in comment
  69. GPIO.output(self.CS1, 0)
  70. GPIO.output(self.CS2, 1)
  71.  
  72.  
  73. def lcd_byte(self,value, mode):
  74.  
  75. GPIO.output(self.RW,0) # RW is permanently low (write mode)
  76. GPIO.output(self.RS,mode)
  77. GPIO.output(self.D0, (value) & 0x01)
  78. GPIO.output(self.D1, (value) & 0x02)
  79. GPIO.output(self.D2, (value) & 0x04)
  80. GPIO.output(self.D3, (value) & 0x08)
  81. GPIO.output(self.D4, (value) & 0x10)
  82. GPIO.output(self.D5, (value) & 0x20)
  83. GPIO.output(self.D6, (value) & 0x40)
  84. GPIO.output(self.D7, (value) & 0x80)
  85.  
  86. # Toggle E
  87. time.sleep(self.E_DELAY)
  88. GPIO.output(self.E, True)
  89. time.sleep(self.E_PULSE)
  90. GPIO.output(self.E, False)
  91. time.sleep(self.E_DELAY)
  92.  
  93. class LCD12864(object):
  94. def __init__(self, driver):
  95. self.driver = driver
  96. self.lcd_init()
  97.  
  98. def setPage(self, value):
  99. # set y=value * 8
  100. self.driver.lcd_byte(0xB8|(value&0x07),0)
  101.  
  102. def setAddress(self, value):
  103. # set x=value
  104. self.driver.lcd_byte(0x40|(value&0x3F),0)
  105.  
  106. def lcd_cls(self):
  107. # clear screen by write 0x00 to all display memory
  108. self.driver.useDisp1()
  109.  
  110. for y in range(8):
  111. self.setPage(y)
  112. self.setAddress(0)
  113. for i in range(64):
  114. self.driver.lcd_byte(0x00,1)
  115.  
  116. self.driver.useDisp2()
  117.  
  118. for y in range(8):
  119. self.setPage(y)
  120. self.setAddress(0)
  121. for i in range(64):
  122. self.driver.lcd_byte(0x00,1)
  123.  
  124. def lcd_init(self):
  125. self.driver.useDisp1()
  126. self.driver.lcd_byte(0x3F,0) # Display ON for controller 1
  127. self.driver.useDisp2() # Need to select controller 2 as well
  128. self.driver.lcd_byte(0x3F,0) # Display ON for controller 2
  129.  
  130.  
  131. def lcd_picdemo(self):
  132. #draw a 16x16 sprite
  133. self.driver.useDisp1()
  134.  
  135. self.setPage(3)
  136. self.setAddress(0)
  137. self.driver.lcd_byte(0x00,1)
  138. self.driver.lcd_byte(0xD0,1)
  139. self.driver.lcd_byte(0x30,1)
  140. self.driver.lcd_byte(0x93,1)
  141. self.driver.lcd_byte(0xDF,1)
  142. self.driver.lcd_byte(0xB7,1)
  143. self.driver.lcd_byte(0x77,1)
  144. self.driver.lcd_byte(0x17,1)
  145. self.driver.lcd_byte(0x17,1)
  146. self.driver.lcd_byte(0x77,1)
  147. self.driver.lcd_byte(0xB7,1)
  148. self.driver.lcd_byte(0xDF,1)
  149. self.driver.lcd_byte(0x33,1)
  150. self.driver.lcd_byte(0xD0,1)
  151. self.driver.lcd_byte(0x10,1)
  152.  
  153. self.setPage(4)
  154. self.setAddress(0)
  155. self.driver.lcd_byte(0x04,1)
  156. self.driver.lcd_byte(0x0A,1)
  157. self.driver.lcd_byte(0x0B,1)
  158. self.driver.lcd_byte(0x07,1)
  159. self.driver.lcd_byte(0x0F,1)
  160. self.driver.lcd_byte(0xFF,1)
  161. self.driver.lcd_byte(0x71,1)
  162. self.driver.lcd_byte(0x71,1)
  163. self.driver.lcd_byte(0xF1,1)
  164. self.driver.lcd_byte(0xBF,1)
  165. self.driver.lcd_byte(0x7F,1)
  166. self.driver.lcd_byte(0x1F,1)
  167. self.driver.lcd_byte(0x0F,1)
  168. self.driver.lcd_byte(0x17,1)
  169. self.driver.lcd_byte(0x16,1)
  170. self.driver.lcd_byte(0x08,1)
  171.  
  172. def demo():
  173.  
  174. driver = LCD_GPIO(
  175. RS=12,
  176. RW=0, # Set to 0 because it's hard-wired to GND (write mode)
  177. E=16,
  178. D0=20, D1=21, D2=22, D3=23, D4=24, D5=25, D6=26, D7=27,
  179. CS1=6,
  180. CS2=13,
  181. RST=19
  182. )
  183.  
  184. lcd = LCD12864(driver=driver)
  185.  
  186.  
  187. # --- Begin LCD operations ---
  188. try:
  189. lcd.lcd_cls()
  190. lcd.lcd_picdemo()
  191.  
  192. time.sleep(15)
  193.  
  194. except KeyboardInterrupt:
  195. print("\nExiting demo.")
  196. except Exception as e:
  197. print(f"An error occurred: {e}")
  198. print("Please check your wiring and ensure the GPIO pin numbers in the script match your connections.")
  199. print("Also ensure the contrast potentiometer is adjusted correctly.")
  200. finally:
  201. GPIO.cleanup() # Clean up GPIO pins on exit
  202. print("GPIO cleanup complete.")
  203.  
  204.  
  205. def main():
  206. demo()
  207.  
  208. if __name__ == "__main__":
  209. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement