SSD1306 I2C驱动时,牺牲内存换刷新速度

  • 使用两个显示缓存,图形计算时使用缓存1,需要更新画面时,用缓存2来与缓存1单节对比,不一致时再更新。
  • 好处是小范围刷新时速度超级翻倍。弊端是内存翻倍,大范围刷新时会更慢。

原代码:

void ssd1306_UpdateScreen(void)
{
    // Write data to each page of RAM. Number of pages
    // depends on the screen height:
    //
    //  * 32px   ==  4 pages
    //  * 64px   ==  8 pages
    //  * 128px  ==  16 pages
    for (uint8_t i = 0; i < SSD1306_HEIGHT / 8; i++)
    {
        ssd1306_WriteCommand(0xB0 + i); // Set the current RAM page address.
        ssd1306_WriteCommand(0x10);
        ssd1306_WriteCommand(0x00);

        uint8_t *buffer = &SSD1306_Buffer[SSD1306_WIDTH * i];
        for (int i = 0; i < SSD1306_WIDTH; i++)
        {
            uint8_t buf[2] = {SSD1306_CTRL_DATA, buffer[i]};
            rt_i2c_master_send(i2c_bus, SSD1306_I2C_ADDR, RT_I2C_WR, buf, 2);
        }
    }
}

你可能感兴趣的:(单片机)