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)