SSD1306 上的滚动问题

问题描述 投票:0回答:1

我下载了一个标准软件,用于将 I2C 数据发送到 SSD1306 128 x 64 显示器,以便了解其工作原理。

大多数例程都按预期工作,但我面临着该芯片的滚动功能的问题。

程序将一些文本写入屏幕,然后使用 start_row = 0 和 end_row = 7 调用以下例程

此代码实际发生的情况是,显示的第 0 页正确滚动,但其余部分保持固定。 以下例程与 ssd1306 数据表中概述的描述非常匹配。

但是,为了让所有页面滚动,我必须更改第四个 WRITECOMMAND 以发送 6 或 7 而不是 0,以便所有文本滚动。这两个数字都有效,可能是因为显示屏的第 7 页是空的。事实上,将此数字从 0 更改为 7 会导致滚动相同数量的页面,这与数据表本身给出的描述相悖。

相反,更改 start_row 和 end_row 的值似乎只改变滚动速度。

看来这些参数的意图颠倒了!!!

请问有什么解释吗?

void SSD1306_ScrollRight(uint8_t start_row, uint8_t end_row)
{
  SSD1306_WRITECOMMAND (SSD1306_RIGHT_HORIZONTAL_SCROLL);  // send 0x26
  SSD1306_WRITECOMMAND (0x00);  // send dummy
  SSD1306_WRITECOMMAND(start_row);  // start page address
  SSD1306_WRITECOMMAND(0X00);  // time interval 5 frames
  SSD1306_WRITECOMMAND(end_row);  // end page address
  SSD1306_WRITECOMMAND(0X00);
  SSD1306_WRITECOMMAND(0XFF);
  SSD1306_WRITECOMMAND (SSD1306_ACTIVATE_SCROLL); // start scroll
}

xuraax

c horizontal-scrolling
1个回答
0
投票

给出结束页地址命令后,根据文档的下一个命令是您正确给出的虚拟字节0x00。但随后 1306 驱动程序会调用接下来的两个命令来定义起始列和结束列。您创建了 0xFF 的起始列(该列不存在,因为 255 超出了 127 的范围),然后尝试在不给出结束列的情况下激活滚动(因此它将您的结束列解释为 0x2F,即激活滚动)。您只需要在激活滚动和结束列之前添加一个附加命令(例如第 0 列的 0x00)并将 0xFF 更改为 Ox7F(如果您想让滚动填充屏幕)。

© www.soinside.com 2019 - 2024. All rights reserved.