这是我在淘宝上买的7针LED屏,根据卖家提供的资料整理出如何驱动这块OLED屏显示
首先是接线,我们直接打开例程的文件夹,找到自己对应的板子,卖家提供了51、arduino、MSP430、STM8和STM32的驱动程序,打开之后看到代码main函数里会提示如何接线
接好线以后我们可以试着编译下载提供的例程,对比源码与实物,初步认识OLED是如何工作的;
从源码中我们可以看出,在显示的时候,当我们选择16x16显示的时候,X取值最大可以取到108,Y最大可以取到48,这是因为这块OLED屏幕像素是128*64,选择16x16显示的时候,把长16个像素和宽16个像素划分出一个区域,屏幕显示汉字时就会根据你定的X和Y坐标,在该区域显示出来,为了不重叠,我们最好设置每一个汉字的列都隔开两个像素,这样我们就把屏幕划分为一个4行x7列,共可以显示28个汉字。另外两种大小的显示可以以此类推。
接着我们来查看显示函数
void OLED_ShowChinese(u8 x,u8 y,u8 num,u8 size1)
{u8 i,m,n=0,temp,chr1;u8 x0=x,y0=y;u8 size3=size1/8;while(size3--){chr1=num*size1/8+n;n++;for(i=0;i<size1;i++){if(size1==16){temp=Hzk1[chr1][i];}//调用16*16字体else if(size1==24){temp=Hzk2[chr1][i];}//调用24*24字体else if(size1==32) {temp=Hzk3[chr1][i];}//调用32*32字体else if(size1==64){temp=Hzk4[chr1][i];}//调用64*64字体else return;for(m=0;m<8;m++){if(temp&0x01)OLED_DrawPoint(x,y);else OLED_ClearPoint(x,y);temp>>=1;y++;}x++;if((x-x0)==size1){x=x0;y0=y0+8;}y=y0;}}
}
我们可以看到该显示先判断传进来的字符大小size1,假设我们选16*16,那实际显示的是数组Hzk1[chr1][i]的内容,接着我们去查看该数组,数组是由文字取模工具生成,我们可以自己用文字取模工具生成文字,然后放到数组中;(取模步骤过于简单,略)
在调用文字显示函数OLED_ShowChinese(u8 x,u8 y,u8 num,u8 size1),第三个参数num即是我们取模生成的数组中第几个字,例程中最大可以存放11个字,当我们需要存放超过11个时会报错,只需把数组的行改为适当的数字或者不填(c语言中数组的行可不填,列必须填)即可;
测试,运行成功: