最近在淘宝上找到了一款便宜的12864 OLED屏,阅读了相关的数据手册后整理了一些关于这种屏的资料,方便大家写驱动
硬件结构
这款屏幕模块尺寸约为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
基本测试
了解基本驱动指令后便可以开始C驱动程序了,不过这里推荐使用arduino的一个屏幕驱动库u8g2
来进行测试,会非常方便,下面程序用于显示“hello world”。
//"hello world" test
#include <U8g2lib.h>
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);
}
显示效果如图
除了字符外,也可以用于显示动态图形:
u8g2
是一个非常强大的8位屏幕显示库,兼容性很强,不仅支持数十种驱动芯片,其强大之处还在于有丰富的字体可供选择,而且字体的大小间距都可以细致调节,也可以实现比较复杂的图形动态显示,关于它的安装、使用说明请看我的另外一篇博客(待完成:-)