yc0526vip 发表于 2023-12-20 18:48:03

micropython

本帖最后由 yc0526vip 于 2023-12-20 18:53 编辑

@FishC

micropython 在ssd1306 自动换行 上下滚动显示 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzZYXWVUTSRQPONMLKJIHGFECBAzyxwvutsrqponmlkjihgfecba0987654321

FishC 发表于 2023-12-20 18:48:17

首先,您需要连接一个 SSD1306 OLED 显示屏到您的 MicroPython 设备上。然后,您可以使用 u8g2lib 库来控制该显示屏。

下面是一段示例代码,可以实现在 SSD1306 上以滚动的方式显示字符串 "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzZYXWVUTSRQPONMLKJIHGFECBAzyxwvutsrqponmlkjihgfecba0987654321":

import machine
import u8g2

# 初始化 SSD1306 显示屏
i2c = machine.I2C(scl=machine.Pin(5), sda=machine.Pin(4))
ssd1306 = u8g2.SSD1306_I2C(128, 64, i2c)

# 设置字体和显示位置
ssd1306.setFont(u8g2.font_6x10_tf)
x = 0
y = 10

# 要显示的字符串
text = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzZYXWVUTSRQPONMLKJIHGFECBAzyxwvutsrqponmlkjihgfecba0987654321"

while True:
    # 清空显示屏
    ssd1306.clearBuffer()

    # 在指定位置显示文本
    ssd1306.setCursor(x, y)
    ssd1306.print(text)

    # 更新显示
    ssd1306.sendBuffer()

    # 滚动文本
    x -= 1
    if x < -(len(text) * 6):
      x = 128

    # 延时
    machine.delay(50)

请注意,这段代码假设您已经正确配置了 MicroPython 设备和 SSD1306 显示屏的连接。如果您的连接方式有所不同,请根据具体情况进行调整。

希望这可以帮助到您!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

yc0526vip 发表于 2023-12-20 18:53:29

FishC 发表于 2023-12-20 18:48
首先,您需要连接一个 SSD1306 OLED 显示屏到您的 MicroPython 设备上。然后,您可以使用 u8g2lib 库来控制 ...

micropython 在ssd1306 自动换行 上下滚动显示 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzZYXWVUTSRQPONMLKJIHGFECBAzyxwvutsrqponmlkjihgfecba0987654321

FishC 发表于 2023-12-20 18:53:45

yc0526vip 发表于 2023-12-20 18:53
micropython 在ssd1306 自动换行 上下滚动显示 123456 ...

对不起,我的回答前面有一处错误。在MicroPython中使用u8g2库控制SSD1306显示屏是不正确的,应该使用ssd1306库。

要在SSD1306上实现自动换行和上下滚动显示文本,您可以使用以下示例代码:

import machine
import ssd1306

# 初始化I2C总线和SSD1306显示屏
i2c = machine.I2C(scl=machine.Pin(5), sda=machine.Pin(4))
display = ssd1306.SSD1306_I2C(128, 64, i2c)

# 要显示的字符串
text = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzZYXWVUTSRQPONMLKJIHGFECBAzyxwvutsrqponmlkjihgfecba0987654321"

# 文本显示位置和滚动速度
x = 0
y = 0
scroll_speed = 1

# 设置字体大小
font_width = 6
font_height = 8

# 计算可以容纳的最大字符数和行数
max_chars_per_line = display.width // font_width
max_lines = display.height // font_height

# 循环显示文本
while True:
    # 清空显示屏
    display.fill(0)
   
    # 分割文本为多行
    lines = for i in range(0, len(text), max_chars_per_line)]
   
    # 按行显示文本
    for line_index, line in enumerate(lines):
      # 计算当前行的y坐标
      line_y = y + line_index * font_height
      
      # 显示文本
      display.text(x, line_y, line)
      
      # 当超出可显示的行数时,实现上下滚动效果
      if len(lines) > max_lines:
            display.text(x, line_y - font_height * (len(lines) - max_lines), lines)
   
    # 更新显示
    display.show()
   
    # 滚动文本
    x -= scroll_speed
   
    # 当文本超出左侧屏幕外时,重置x位置
    if x < -(len(text) * font_width):
      x = display.width
   
    # 延时
    machine.delay(50)

这段代码会在SSD1306上以自动换行和上下滚动的方式显示给定的文本字符串。请根据您的具体需求进行调整,并确保正确连接了SSD1306显示屏到MicroPython设备。

希望这次能帮到您!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

yc0526vip 发表于 2023-12-20 19:00:27

FishC 发表于 2023-12-20 18:53
对不起,我的回答前面有一处错误。在MicroPython中使用u8g2库控制SSD1306显示屏是不正确的,应该使用ssd1 ...

File "<stdin>", line 32, in <module>

FishC 发表于 2023-12-20 19:00:42

yc0526vip 发表于 2023-12-20 19:00
File "", line 32, in

抱歉,我之前的代码有一个错误。在更新显示之前,我应该先调用`display.fill(0)`来清空显示屏。以下是修正后的代码:import machineimport ssd1306# 初始化I2C总线和SSD1306显示屏i2c = machine.I2C(scl=machine.Pin(5), sda=machine.Pin(4))display = ssd1306.SSD1306_I2C(128, 64, i2c)# 要显示的字符串text = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzZYXWVUTSRQPONMLKJIHGFECBAzyxwvutsrqponmlkjihgfecba0987654321"# 文本显示位置和滚动速度x = 0y = 0scroll_speed = 1# 设置字体大小font_width = 6font_height = 8# 计算可以容纳的最大字符数和行数max_chars_per_line = display.width // font_widthmax_lines = display.height // font_height# 循环显示文本while True:    # 清空显示屏    display.fill(0)      # 分割文本为多行    lines = for i in range(0, len(text), max_chars_per_line)]      # 按行显示文本    for line_index, line in enumerate(lines):      # 计算当前行的y坐标      line_y = y + line_index * font_height                # 显示文本      display.text(x, line_y, line)                # 当超出可显示的行数时,实现上下滚动效果      if len(lines) > max_lines:            display.text(x, line_y - font_height * (len(lines) - max_lines), line)      # 更新显示    display.show()      # 滚动文本    x -= scroll_speed      # 当文本超出左侧屏幕外时,重置x位置    if x < -(len(text) * font_width):      x = display.width      # 延时    machine.delay(50)希望这次能顺利运行!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

yc0526vip 发表于 2023-12-20 19:01:09

yc0526vip 发表于 2023-12-20 19:00
File "", line 32, in

TypeError: can't convert 'int' object to str implicitly

FishC 发表于 2023-12-20 19:01:20

yc0526vip 发表于 2023-12-20 19:01
TypeError: can't convert 'int' object to str impli ...

非常抱歉,我之前的代码中有一个错误。在显示文本时,需要将整数类型的`line_y`变量转换为字符串类型。修正后的代码如下所示:import machineimport ssd1306# 初始化I2C总线和SSD1306显示屏i2c = machine.I2C(scl=machine.Pin(5), sda=machine.Pin(4))display = ssd1306.SSD1306_I2C(128, 64, i2c)# 要显示的字符串text = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzZYXWVUTSRQPONMLKJIHGFECBAzyxwvutsrqponmlkjihgfecba0987654321"# 文本显示位置和滚动速度x = 0y = 0scroll_speed = 1# 设置字体大小font_width = 6font_height = 8# 计算可以容纳的最大字符数和行数max_chars_per_line = display.width // font_widthmax_lines = display.height // font_height# 循环显示文本while True:    # 清空显示屏    display.fill(0)      # 分割文本为多行    lines = for i in range(0, len(text), max_chars_per_line)]      # 按行显示文本    for line_index, line in enumerate(lines):      # 计算当前行的y坐标      line_y = y + line_index * font_height                # 显示文本      display.text(x, line_y, str(line))                # 当超出可显示的行数时,实现上下滚动效果      if len(lines) > max_lines:            display.text(x, line_y - font_height * (len(lines) - max_lines), str(line))      # 更新显示    display.show()      # 滚动文本    x -= scroll_speed      # 当文本超出左侧屏幕外时,重置x位置    if x < -(len(text) * font_width):      x = display.width      # 延时    machine.delay(50)请尝试使用这段修正后的代码。如果还有问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: micropython