前提是已经有了OLED的其它功能代码,此文仅用于介绍描点。
通常代码当中的,OLED位置设置为
void OLED_Set_Pos(unsigned char x, unsigned char y)
{
OLED_WR_Byte(0xb0+y,OLED_CMD);
OLED_WR_Byte(((x&0xf0)>>4)|0x10,OLED_CMD);
OLED_WR_Byte((x&0x0f)|0x01,OLED_CMD);
}
但这里的y,由于为了开发汉字和字符等,通常智能为0~8,汉字为16×16,字符8×16,在x,y方向y通常只能写4行,OLED本质为123(x)×64(y),64/16=4,估只能4行。
SSD1306,按页写入,共8页,每页128个可写入,我认为对应128个x坐标
对应为 参照下图指令,写入地址
OLED_WR_Byte(((x&0xf0)>>4)|0x10,OLED_CMD);
OLED_WR_Byte((x&0x0f)|0x01,OLED_CMD);
而,我们知道y轴有64个单位长度,而对应每个点都在8个页内
ps:此处开始写找到y点的部分
一共有64个单位长度,对应8页,1~8在第一页,(注意0,这里为了方便理解,我就不写0了),9~18在第二页,以此类推
y为50所在的页数为 50/8
OLED_WR_Byte(0xb0+(y/8),OLED_CMD); 前面的B0是看指令得来的
此时页的位置也已经确定了,但每一页可以写的点,有8行多,128列,
x已经确定,则得确定是那一行。则写入数据。
OLED_WR_Byte(0x01<<((y%8),OLED_DATA); //写入一个点
0x01,为第一行,0x02为第二行,0x04为第三行,
如y=9时,y%8=1,则为第二页的第一行,转化完成。 写入数据0x01
如y=11时,y%8=3,则为第二页的第一行,转化完成。 写入数据0x04 为0x01向左平移3个点(此时这里没考虑0)
故而综合一下
找到x,y页位置
写入具体点。
ps:本人水平较低,如有错误还请多多包涵!