JHD128x64E(基于 GLCD 的 KS0108 控制器)中芯片 2 的内容未被清除
Contents of Chip 2 in JHD128x64E (KS0108 controller based GLCD) is not getting cleared
下面显示的代码仅清除 page_1 数据,其中主要在芯片 1 上显示一些文本,即 page_1(在代码中),但在将光标列设置为 63+ 后,文本写入芯片 2即,page_2(在代码中)但是其中的数据没有被清除,而 page_1 的内容在任何情况下都会被清除
import time
import RPi.GPIO as GPIO
# timing constants
E_PULSE = 0.0000001
E_DELAY = 0.0000005
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(4, GPIO.OUT) # rs
GPIO.setup(7, GPIO.OUT) # rw
GPIO.setup(8, GPIO.OUT) # en
GPIO.setup(9, GPIO.OUT) # d0
GPIO.setup(10, GPIO.OUT) # d1
GPIO.setup(11, GPIO.OUT) # d2
GPIO.setup(14, GPIO.OUT) # d3
GPIO.setup(15, GPIO.OUT) # d4
GPIO.setup(17, GPIO.OUT) # d5
GPIO.setup(18, GPIO.OUT) # d6
GPIO.setup(22, GPIO.OUT) # cs1
GPIO.setup(23, GPIO.OUT) # cs2
GPIO.setup(24, GPIO.OUT) # rst
# Set pins to low
GPIO.output(4, 0) # rs
GPIO.output(7, 0) # rw
GPIO.output(8, 0) # en
GPIO.output(22, 0) # cs1
GPIO.output(23, 0) # cs2
GPIO.output(24, 0) # rst
def data_write(value, mode):
GPIO.setup(25, GPIO.OUT) # d7 as o/p
GPIO.output(7, 0)
GPIO.output(4, mode)
GPIO.output(9, value & 0x01)
GPIO.output(10, value & 0x02)
GPIO.output(11, value & 0x04)
GPIO.output(14, value & 0x08)
GPIO.output(15, value & 0x10)
GPIO.output(17, value & 0x20)
GPIO.output(18, value & 0x40)
GPIO.output(25, value & 0x80)
# Toggle E
time.sleep(E_DELAY)
GPIO.output(8, True)
time.sleep(E_PULSE)
GPIO.output(8, False)
time.sleep(E_DELAY)
# Waiting write operation complete by listening BUSY signal
def busy_chk():
GPIO.setup(25, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.output(7, 1)
GPIO.output(4, 0)
time.sleep(E_DELAY)
GPIO.output(8, True)
time.sleep(E_PULSE)
GPIO.output(8, False)
time.sleep(E_DELAY)
# Wait until BUSY(d7) is off
while GPIO.input(25):
pass
GPIO.setup(25, GPIO.OUT) # set d7 back to Output
def page_1():
GPIO.output(22, 1) # Select left controller
GPIO.output(23, 0) # Select right controller
def page_2():
GPIO.output(22, 0) # Select left controller
GPIO.output(23, 1) # Select right controller
def init_disp():
GPIO.output(24, 1) # Reset the display
page_1()
data_write(0x3F, 0) # command to turn ON LCD
page_2()
data_write(0x3F, 0) # command to turn ON LCD
page_1()
data_write(0xC0, 0) # start line command
page_2()
data_write(0xC0, 0) # start line command
def clr_disp():
page_1()
for y in range(8):
set_cursor(0, y)
for i in range(64):
data_write(0x00, 1)
page_2()
for y in range(8):
set_cursor(0, y)
for i in range(64):
data_write(0x00, 1)
def set_cursor(col, row):
if row >= 8:
raise ValueError('Invalid Input')
pass
data_write((row | 0xB8) & 0xBF, 0)
if col < 63:
page_1() # Enable left controller
data_write((col | 0x40) & 0x7F, 0)
else:
page_2() # Enable right controller
data_write(((col - 64) | 0x40) & 0x7F, 0)
def main():
init_disp()
busy_chk()
clr_disp()
set_cursor(0, 0)
data_write(0x02, 1)
data_write(0x02, 1)
data_write(0xFE, 1)
data_write(0x02, 1)
if __name__ == "__main__":
main()
下面的代码应该清除 page_2
的点
def clr_disp():
page_1()
for y in range(8):
set_cursor(0, y)
for i in range(64):
data_write(0x00, 1)
page_2()
for y in range(8):
set_cursor(0, y)
for i in range(64):
data_write(0x00, 1)
有些人请告诉我我哪里错了,我不是很擅长编码
谢谢
在函数 clr_disp()
中,您首先调用 page_2()
,然后在 for 循环中调用 set_cursor(0, y)
,因为您将 0
作为 col
传递,我们进入将光标重置回 page1 的第一个 if 条件。
如果你评论清除显示的第一部分,你可以测试这个,你应该看到你的第二部分也清除了 page1。
您应该像这样清除显示:
def clr_disp():
for y in range(8):
set_cursor(0, y)
for i in range(64):
data_write(0x00, 1)
for y in range(8):
set_cursor(64, y)
for i in range(64):
data_write(0x00, 1)
下面显示的代码仅清除 page_1 数据,其中主要在芯片 1 上显示一些文本,即 page_1(在代码中),但在将光标列设置为 63+ 后,文本写入芯片 2即,page_2(在代码中)但是其中的数据没有被清除,而 page_1 的内容在任何情况下都会被清除
import time
import RPi.GPIO as GPIO
# timing constants
E_PULSE = 0.0000001
E_DELAY = 0.0000005
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(4, GPIO.OUT) # rs
GPIO.setup(7, GPIO.OUT) # rw
GPIO.setup(8, GPIO.OUT) # en
GPIO.setup(9, GPIO.OUT) # d0
GPIO.setup(10, GPIO.OUT) # d1
GPIO.setup(11, GPIO.OUT) # d2
GPIO.setup(14, GPIO.OUT) # d3
GPIO.setup(15, GPIO.OUT) # d4
GPIO.setup(17, GPIO.OUT) # d5
GPIO.setup(18, GPIO.OUT) # d6
GPIO.setup(22, GPIO.OUT) # cs1
GPIO.setup(23, GPIO.OUT) # cs2
GPIO.setup(24, GPIO.OUT) # rst
# Set pins to low
GPIO.output(4, 0) # rs
GPIO.output(7, 0) # rw
GPIO.output(8, 0) # en
GPIO.output(22, 0) # cs1
GPIO.output(23, 0) # cs2
GPIO.output(24, 0) # rst
def data_write(value, mode):
GPIO.setup(25, GPIO.OUT) # d7 as o/p
GPIO.output(7, 0)
GPIO.output(4, mode)
GPIO.output(9, value & 0x01)
GPIO.output(10, value & 0x02)
GPIO.output(11, value & 0x04)
GPIO.output(14, value & 0x08)
GPIO.output(15, value & 0x10)
GPIO.output(17, value & 0x20)
GPIO.output(18, value & 0x40)
GPIO.output(25, value & 0x80)
# Toggle E
time.sleep(E_DELAY)
GPIO.output(8, True)
time.sleep(E_PULSE)
GPIO.output(8, False)
time.sleep(E_DELAY)
# Waiting write operation complete by listening BUSY signal
def busy_chk():
GPIO.setup(25, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.output(7, 1)
GPIO.output(4, 0)
time.sleep(E_DELAY)
GPIO.output(8, True)
time.sleep(E_PULSE)
GPIO.output(8, False)
time.sleep(E_DELAY)
# Wait until BUSY(d7) is off
while GPIO.input(25):
pass
GPIO.setup(25, GPIO.OUT) # set d7 back to Output
def page_1():
GPIO.output(22, 1) # Select left controller
GPIO.output(23, 0) # Select right controller
def page_2():
GPIO.output(22, 0) # Select left controller
GPIO.output(23, 1) # Select right controller
def init_disp():
GPIO.output(24, 1) # Reset the display
page_1()
data_write(0x3F, 0) # command to turn ON LCD
page_2()
data_write(0x3F, 0) # command to turn ON LCD
page_1()
data_write(0xC0, 0) # start line command
page_2()
data_write(0xC0, 0) # start line command
def clr_disp():
page_1()
for y in range(8):
set_cursor(0, y)
for i in range(64):
data_write(0x00, 1)
page_2()
for y in range(8):
set_cursor(0, y)
for i in range(64):
data_write(0x00, 1)
def set_cursor(col, row):
if row >= 8:
raise ValueError('Invalid Input')
pass
data_write((row | 0xB8) & 0xBF, 0)
if col < 63:
page_1() # Enable left controller
data_write((col | 0x40) & 0x7F, 0)
else:
page_2() # Enable right controller
data_write(((col - 64) | 0x40) & 0x7F, 0)
def main():
init_disp()
busy_chk()
clr_disp()
set_cursor(0, 0)
data_write(0x02, 1)
data_write(0x02, 1)
data_write(0xFE, 1)
data_write(0x02, 1)
if __name__ == "__main__":
main()
下面的代码应该清除 page_2
的点def clr_disp():
page_1()
for y in range(8):
set_cursor(0, y)
for i in range(64):
data_write(0x00, 1)
page_2()
for y in range(8):
set_cursor(0, y)
for i in range(64):
data_write(0x00, 1)
有些人请告诉我我哪里错了,我不是很擅长编码
谢谢
在函数 clr_disp()
中,您首先调用 page_2()
,然后在 for 循环中调用 set_cursor(0, y)
,因为您将 0
作为 col
传递,我们进入将光标重置回 page1 的第一个 if 条件。
如果你评论清除显示的第一部分,你可以测试这个,你应该看到你的第二部分也清除了 page1。
您应该像这样清除显示:
def clr_disp():
for y in range(8):
set_cursor(0, y)
for i in range(64):
data_write(0x00, 1)
for y in range(8):
set_cursor(64, y)
for i in range(64):
data_write(0x00, 1)