一、清屏函数
根据ssd1306手册可以写出以下清屏函数,这个是清除整个屏幕。
void oled_clear() {
int i, j;
//选择页模式
iic_write_cmd(0x20);
iic_write_cmd(0x02);
// 清除整个屏幕,8页 * 128列
for(i = 0; i < 8; i ++) {
//选择操作的页
iic_write_cmd(0xB0+i);
//下面两个命令设置从页的起始位置开始写入
iic_write_cmd(0x00);
iic_write_cmd(0x10);
for(j = 0; j < 128; j ++) {
iic_write_data(0);
}
}
}
如果想清除屏幕的一部分,那该如何操作?答案也简单,就是选择页,然后选择列即可。完整代码展示如下:
void oled_clear(uint8_t x0, uint8_t x1, uint8_t y0, uint8_t y1) {
assert_param(x0 <= 8);
assert_param(x1 <= 8);
assert_param(x1 >= x0);
assert_param(y0 <= 128);
assert_param(y1 <= 128);
assert_param(y1 >= y0);
int i, j;
//选择页模式
iic_write_cmd(0x20);
iic_write_cmd(0x02);
for(i = x0; i < x1; i ++) {
//选择操作的页
iic_write_cmd(0xB0+i);
//下面两个命令设置从页的起始位置开始写入
iic_write_cmd(0x00 + y0 % 16);
iic_write_cmd(0x10 + y0 / 16);
for(j = y0; j < y1; j ++) {
iic_write_data(0);
}
}
}
列的处理如下,具体如何计算的看 51单片机之手撸IIC协议,并点亮oled-CSDN博客
文章里所有的函数也都在文章内
iic_write_cmd(0x00 + y0 % 16);
iic_write_cmd(0x10 + y0 / 16);
二、常用清屏函数
下面常用的局部清屏代码如下,包括清除某一行,或上半部分、下半部分。
void oled_clear_1_line() {
oled_clear(0, 2, 0, 128);
}
void oled_clear_2_line() {
oled_clear(2, 4, 0, 128);
}
void oled_clear_3_line() {
oled_clear(4, 6, 0, 128);
}
void oled_clear_4_line() {
oled_clear(6, 8, 0, 128);
}
void oled_clear_all() {
oled_clear(0, 8, 0, 128);
}
void old__clear_top_half() {
oled_clear(1, 4, 0, 128);
}
void old__clear_bottom_half() {
oled_clear(4, 8, 0, 128);
}
三、效果演示
刷新右下角1/4区域视频效果:
oled_clear(4, 8, 64, 128);
oled局部刷新