其实我没买OLED屏哈哈哈,这个只是学习了,没机会实践。

大部分图片来源:正点原子HAL库课程

 专栏目录:记录自己的嵌入式学习之路-CSDN博客


目录

1    显示原理

2    读写方式:8080并口

2.1    支持的指令类型

2.2    读写过程

2.3    三种设置内存地址模式

2.4    软件读写方式

2.5    页地址模式的本质

2.6    屏幕驱动步骤


1    显示原理

MCU驱动OLED的控制器进行读写:MCU←→OLED控制器←→OLED屏幕。


2    读写方式:8080并口

2.1    支持的指令类型

2.2    读写过程

  • CS:OLED 片选信号,就是告诉系统,我要对该芯片/内存进行通信了,后续我发的信号就是给这个芯片/内存的;
  • WR:向 OLED 写入数据;
  • RD:从 OLED 读取数据;
  • D[7:0]:8 位双向数据线;
  • RST(RES):硬复位 OLED;
  • DC:命令/数据标志(0,读写命令;1,读写数据)。

一个示例的读写过程(也许不代表真正的代码,但逻辑是对的):

2.3    三种设置内存地址模式

  • 页地址模式
  • 水平地址模式
  • 垂直地址模式

2.4    软件读写方式

2.5    页地址模式的本质

由于屏幕是128*64,所以弄了一个显存区域,其每页有128字节,一共有8页。这里用128字节是因为内存是以一字节为单位存储的,而128是为了对上列数,而因为一个字节只有8位,所以一页是128*8,为了完全映射128*64,就弄了8页。

其需要设置段重映射,这是为了将页地址完全一致地映射到屏幕像素上去。否则第一列对应的就是屏幕的第128列了。所以总体来说,页数相当于行数除以8,列地址相当于真正的列数。

内存和页地址的联系可参考下图确认每个点的操作:

这里的内存其实就是在单片机中开辟一个[128][8]的二维数组,作为显存的作用,在程序中需要显示字符的时候先对该显存进行赋值,再调用自己写的屏幕更新函数来更新整个屏幕。

画点方式:算出像素的行数位(即下图temp),用数组获取原有像素所在列的值(8位)。若开启像素,则并将其与temp进行或运算;关闭像素则需要将其与temp的反值进行与运算。

2.6    屏幕驱动步骤

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部