【分享帖】官方OLED模块_bug解决与额外功能函数开源
官方的OLED使用的是SH1106G。在使用官方代码驱动时存在显示不稳定,抖动的情况。经过一段时间的分析发现原因出在官方代码设置低列地址时寄存器地址错误

SH1106-CN中文数据手册中:
设置低列地址:(00H-0FH)

官方代码
static void oled_set_pos(uint8_t x, uint8_t y)
{
x += 2;
oled_write_byte((0xb0 + y), OLED_CMD); //set page address y
oled_write_byte(((x&0xf0)>>4)|0x10, OLED_CMD); //set column high address
oled_write_byte((x&0xf0), OLED_CMD); //set column low address
}

应修改为:
static void oled_set_pos(uint8_t x, uint8_t y)
{
x += 2;
oled_write_byte((0xb0 + y), OLED_CMD); //set page address y
oled_write_byte(((x&0xf0)>>4)|0x10, OLED_CMD); //set column high address
oled_write_byte((x&0x0f), OLED_CMD); //set column low address
}

即可解决问题。

顺便开源几个函数:分别为调整对比度、取反色、屏幕全亮、图像沿X轴翻转。
/**
* @brief set the OLED contrast
*
* @param contrast 0-255
*/
void oled_contrast_set(uint8_t contrast)
{
oled_write_byte(0x81, OLED_CMD);
oled_write_byte(contrast, OLED_CMD);
}

/**
* @brief set the reverse mode
*
* @param on normal display(0) or reverse display(1)
*/
void oled_reverse_play(bool on)
{
oled_write_byte(0xa6+on, OLED_CMD);
}

/**
* @brief all points turn on or normal display
*
* @param on normal display(0) or entire display on(1)
*/
void oled_entire_dispay(bool on)
{
oled_write_byte(0xa4+on, OLED_CMD);
}
/**
* @brief Invert OLED on the X-axis
*
* @param rollover: right(0) or left(1) display
*/
void oled_dispaly_rollover(bool rollover)
{
if(rollover)oled_write_byte(0xa0, OLED_CMD);
else oled_write_byte(0xa1, OLED_CMD);
}


注:bool类型调用<stdbool.h>。











请问这篇文章对你有用吗?
【分享帖】官方OLED模块_bug解决与额外功能函数开源
所有评论
暂无更多
暂无更多
关于作者
clouder
clouder
0 关注Ta
0 文章
0 经验值
0 获赞