这个是仿照商家的IIC例程改成SPI的写法,其实驱动OLED的方法都是一样的,只不过IIC和SPI略有不同而已(3个输入参数会在稍后讲到)
void OLED_DISPLAY_16x16(u8 x,u8 y, u16 w){
u8 j,t,c=0;
y=y-14;
for(t=0;t<2;t++){
WriteCmd(0xb0+x);
WriteCmd(y/16+0x10);
WriteCmd(y%16);
for(j=0;j<16;j++){
WriteData(M_16[(w*32)+c]);
c++;}x++;
}
WriteCmd(0xAF);
}
- 第一个参数x:字符的行:0、2、4、6共4行(4*16=64,把64个像素分为4行)
- 第二个参数y:字符的列:共128列(像素),但是因为字符是16*16的,所以用n * 16代替,便于计算
- 第三个参数w:对应库中的第几个字符
- 库:M_16(在倒数第5行),这个内容马上就讲到
比如:OLED_DISPLAY_16x16(4,8*16,8),在OLED屏幕第3行的第8列,显示库中的第9个字符
这个库是需要咱们自己建立的,可以由取模软件自动生成每个字符对应的16进制数据。
我们用到的取模软件是:PCtoLCD2002
配置如图:
用它生成数据以后就可以把数据放到一个单独的.h文件中,作为我们自己的字符库。这里以两个16*16的空白为例
uc8 M_16[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
请发表评论