基于ssd1306驱动的12864oled屏介绍

最近在淘宝上找到了一款便宜的12864 OLED屏,阅读了相关的数据手册后整理了一些关于这种屏的资料,方便大家写驱动


基于ssd1306驱动的12864oled屏介绍_第1张图片
屏幕模块图片

硬件结构

这款屏幕模块尺寸约为0.96英寸,主要由裸屏和底板PCB组成,裸屏由SSD1306驱动,这也是一种较为广泛使用的led驱动芯片。

基本信息 参数
驱动电压 3.3~5V
分辨率 128x64
驱动接口 I2C
I2C地址 0x3c(默认)\0x3d可选

关于这个模块要注意的是:

  • ssd1306本身支持多种总线驱动方式包括SPI以及并口等,通过芯片的相应IO口拉低拉高来选择哪一种接口,本例中模块通过电阻将相应IO口配置固化使用了I2C接口方式,但可能你买到的同样的驱动芯片的模块会采用其他接口
  • 使用I2C接口时,SSD1306允许有最多两个7位的I2C地址,同样通过相应的IO口拉低拉高来切换,一般默认是0x3c,在屏幕模块的背面,可以看到一个I2C地址切换提示,需要改变模块I2C地址时,只需要把提示位置的电阻取下焊接到另外一端即可。要注意的是板上的I2C地址是加上了第零位读写位后的数值,即0x78 = 0x3c<<1 0x7A = 0x3d<<1
    基于ssd1306驱动的12864oled屏介绍_第2张图片
    I2C地址切换

基本测试

了解基本驱动指令后便可以开始C驱动程序了,不过这里推荐使用arduino的一个屏幕驱动库u8g2来进行测试,会非常方便,下面程序用于显示“hello world”。

//"hello world" test
#include 

U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0);

void setup(void) {
  u8g2.begin();
}

void loop(void) {
  u8g2.clearBuffer();                   // clear the internal memory
  u8g2.setFont(u8g2_font_ncenB14_tr);   // choose a suitable font
  u8g2.drawStr(0,20,"Hello World!");    // write something to the internal memory
  u8g2.sendBuffer();                    // transfer internal memory to the display
  delay(1000);  
}

显示效果如图


基于ssd1306驱动的12864oled屏介绍_第3张图片
hello world 显示

除了字符外,也可以用于显示动态图形:

基于ssd1306驱动的12864oled屏介绍_第4张图片
圆形显示

u8g2是一个非常强大的8位屏幕显示库,兼容性很强,不仅支持数十种驱动芯片,其强大之处还在于有丰富的字体可供选择,而且字体的大小间距都可以细致调节,也可以实现比较复杂的图形动态显示,关于它的安装、使用说明请看我的另外一篇博客(待完成:-)

你可能感兴趣的:(基于ssd1306驱动的12864oled屏介绍)