正点原子的OLED是使用SSD1306来驱动的,并设计了多种通讯方式,通过背后的焊点来选择
这里以正点原子开发板最常用的8080并口通讯来讲
引脚定义
各正点原子开发板对OLED的接线
8080时序图
发送数据示例代码
void oled_wr_byte(uint8_t data, uint8_t cmd)
{
OLED_RS (cmd); /* 数据类型,由传参决定 */
OLED_CS ( 0 ); /* 拉低片选线,选中SSD1306 */
OLED_WR ( 0 ); /* 拉低WR线,准备数据 */
oled_data_out(data); /* WR低电平期间,准备数据 */
OLED_WR ( 1 ); /* 在WR上升沿,数据发出 */
OLED_CS ( 1 ); /* 取消片选 */
OLED_RS ( 1 ); /* 释放RS线,恢复默认 */
}
void oled_data_out(uint8_t data)
{
GPIOC->ODR = (GPIOC->ODR & 0XFF00) | (data & 0X00FF);
}
指令集
你可想象成有OLED芯片内有个缓冲区GRAM,接收你通过输入列地址页地址和对应数据存进去的一个跟oled一样大的缓冲区图片数据,该区域就是保存你输入进来的图片数据再通过你想要的输出方式输出给屏幕
其他指令
输出方式:
为了提高速度,正点的代码里在mcu的ram创建了个数组来存储要发送的图片,发送时把这个数组发出去就是一张图片,GRAM是oled屏里面接收mcu发来的图片信息的地方,oled芯片被设置显示方式后就会自动刷新GRAM图片以被设定好的更新方向刷新到oled屏
页与段的概念:
为了更好的的传输,OLED设计时就把行的概念用页替代,只不过现在是八行为一页,然后用段代替列,然后把页编号为0xB0 0xB1.....
这样指定哪一页哪一列就能输出一个8位数据,指定其中哪一个点亮哪一个点灭 0灭1亮
正点原子代码解析:
因为正点原子使用的 转字模软件是从上到下从左到右从高位到低位输出对应数组的点位信息,所以该代码也是这样设计的
0x00,0x04,0x00,0x3C,0x03,0xC4,0x1C,0x40, 0x07,0x40,0x00,0xE4,0x00,0x1C,0x00,0x04这是字符A输出的结果,那就得把图像倒过来显示
因为它是把要把原本横排显示的变成竖排排序写成第一第三字节.....,把原本竖排显示的编成横排编号,所以你显示时要行竖换着显示