OLED指令整理

——此为自己对OLED使用的整理

对于OLED使用经验总结:

本此次使用开发板为正点原子的stm32精英板(芯片为stm32f103zet6)

此次使用的是中景园0.96寸的OLED显示屏,采取的是七线SPI模式进行程序抒写

在写程序前,首先要明白七线SPI模式的意义,即七个端口依次为:GND(地) VCC(高电位) SCLK(时钟线) DATA(数据线) RES(硬件复位) DC(数据/命令控制) CS(片选)

此次七线SPI就是将这七个I/O口依次接入STM32的I/O口,再按照SPI的形式进行模拟

但是通常所说的SPI模式只有四个串口:SCLK(时钟线) MISO(数据输出) MOSI(数据输入) CS(片选)

当然这个七线SPI也可以通过焊接其他的模块来达到四个串口的形式,但是在这里并没有用到这个模块焊接到OLED屏上,所以只能用这七个口来模拟SPI的输入方式

原理:SCLK产生上升沿的电位变化的动作时,会从DATA里读取一个数据进入OLED屏中,DC若为高电平就是指此动作读取的为data,DC若为低电平就是指此动作读取的为cmd,RES为高电位就将OLED屏进行硬件复位,CS为高电平表示此设备被选中,为低电平就与之相反

此时就可以通过将其中五个口都以:推挽式输出(GPIO_Mode_Out_PP)

此处用PCout(0) 、PCout(1)、PCout(2)、PCout(3)、PCout(4)分别对应着SCLK(时钟线) DATA(数据线) RES(硬件复位) DC(数据/命令控制) CS(片选)

GND(地) VCC(高电位)该两位直接与单片机上的高电位与低电位的输出口连接即可

最后通过模拟SPI输出写出一个数据传输函数,再分别包装成命令输入和数据输入两个函数

#define SPI_Cmd 0

#define SPI_Data 1

void SPI_WriteByte(u8 cmd,u8 data)

{

​ u8 i=0;

​ DC=cmd;

​ DATA=1;

​ SCLK=0;

​ for(i=0;i<8;i++)

​ {

​ SCLK=0;

​ if(data&0x80) DATA=1;

​ else DATA=0;

​ SCLK=1;

​ DATA<<=1;//从高位开始传输数据

​ }

​ SCLK=1;

​ DC=1;

}

void SPI_WriteCmd(u8 data)

{

​ CS=1;

​ SPI_WriteByte(SPI_Cmd ,data);

​ CS=0;

}

void SPI_WriteData(u8 data)

{

​ CS=1;

​ SPI_WriteByte(SPI_Data ,data);

​ CS=0;

}

接着就是对OLED输入函数的包装

u8 OLED_DATA_SHIFT [128] [8]//模拟坐标轴建立横坐标为128列,纵坐标8大列的数组

void OLED_GRAM_UPDATA(void);//此处为数据更新
void OLED_POINT_PAINT(u8 x,u8 y,u8 mode);//此处为大点
void OLED_CHAR_PAINT(u8 x,u8 y,u8 chr,u8 size,u8 mode);//通过上面函数进行字符抒写
void OLED_NUM_PAINT(u8 x,u8 y,u16 num,u8 len,u8 size,u8 mode);//通过上面函数进行数字抒写
void OLED_STRING_PAINT(u8 x,u8 y,const u8* p,u8 size,u8 mode);//通过上上面的函数进行字符串的 //抒写

主要函数为此上的五个函数,每个函数都是对上个函数的层层包装,程序内容不再过多讲述

此为编写理念的讲述:OLED模块有8个横轴大块,128列,每一个横轴的大块的一列就是一个8位的字节

OLED屏上的是由64*128个LED灯组成上面两个大块是黄色LED区间,下面的部分是绿色LED区间,点亮就是1,未点亮就是0,所以采取包装函数的形式进行每个部分的区块化,更加便于抒写和理解

如下有部分指令是必须掌握指令
在这里插入图片描述
还有事初始化指令,不需要一定掌握
在这里插入图片描述
此编程需要#include "oledfont.h"该文件是包含着字符库有12,16,24字符大小的字符库

以上是自己对自己学习OLED的部分见解

发布了1 篇原创文章 · 获赞 1 · 访问量 20

猜你喜欢

转载自blog.csdn.net/weixin_43804648/article/details/104339379