一、介绍
OLED,即有机发光二极管(Organic Light-Emitting Diode),又称为有机电激光显示(OrganicElectroluminesence Display, OELD)。OLED 由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。
二、实验材料
OLED显示屏:
驱动器型号:使用MCU控制OLED本质上是MCU与屏的驱动控制器进行通信,本项目中OLED的驱动器是SSD1306。
物理尺寸:0.96寸
分辨率:在图像方面,分辨率表示图像上的像素点的个数和分布情况。物理尺寸相同时,分辨率越大,则图片更清晰。
像素点:构成图像的最小单元,每个像素点仅有一种颜色。
与OLED通信:通信方式、通信速度、接口…
开发板: 采用STM32f103系列
原理图:
确定使用SPI通信,分析以上引脚的配置方法:
O_MOSI – 数据传输引脚(主发从收) PB15 推挽复用输出
(这里没有O_MISO引脚原因是驱动OLED时,不需要接收来自OLED的数据)
O_CLK – 时钟引脚 PB13 推挽复用输出
O_RST – 复位引脚(低电平有效) PB14 推挽输出
O_DC – 数据/命令选择引脚 PB12 推挽输出
使用OLED屏时,会传输各类数据,至少包含 字模数据 和 坐标数据,但这些数据都是通过O_MOSI数据线传输的,为了区分各类数据的类型,所以OLED上有O_DC引脚:
当O_DC表示数据选择时,接下来流过O_MOSI的一个字节将视为参数。
当O_DC表示命令选择时,接下来流过O_MOSI的一个字节将视为命令。
三、实验步骤
OLED显示文字
在单色屏下,一般文字的大小为16 x 16 、 24 x 24 或 32 x 32。
- 运行取模软件PCtoLCD 2002
- 选择“模式”->“字符模式”,点击“选项”,按如下要求
0x00,0x80,0x60,0xF8,0x07,0x40,0x20,0x18,0x0F,0x08,0xC8,0x08,0x08,0x28,0x18,0x00,
0x01,0x00,0x00,0xFF,0x00,0x10,0x0C,0x03,0x40,0x80,0x7F,0x00,0x01,0x06,0x18,0x00,/“你”,0/
0x10,0x10,0xF0,0x1F,0x10,0xF0,0x00,0x80,0x82,0x82,0xE2,0x92,0x8A,0x86,0x80,0x00,
0x40,0x22,0x15,0x08,0x16,0x61,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,/“好”,1/
- 设置字宽、字高、字体
- 输入文字
- 取模,并保存到工程中
/***********************************
函数名:spi2_init
参数:无
返回值:无
功能:SPI2初始化
备注:SPI2_SCK PB13
SPI2_MOSI PB15
连接到OLED
***********************************/
static void spi2_init(void)
{
GPIO_InitTypeDef gpio_InitStruct;
SPI_InitTypeDef spi_InitStruct;
/*1.将SPI2相关引脚配置为复用*/
//激活相应的GPIOx
RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOB, ENABLE);
//引脚的推挽复用输出(变为SPI2引脚)
gpio_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP ;
gpio_InitStruct.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15 ;
gpio_InitStruct.GPIO_Speed = GPIO_Speed_2MHz ;
//导入清单,进行配置
GPIO_Init (GPIOB, &gpio_InitStruct);
/*2.激活SPI2,SPI2库函数初始化*/
RCC_APB1PeriphClockCmd (RCC_APB1Periph_SPI2, ENABLE);//36MHz
//需要根据模块的不同调整配置
spi_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4 ;//36 / 4 == 9M Hz
spi_InitStruct.SPI_CPHA = SPI_CPHA_1Edge ;
spi_InitStruct.SPI_CPOL = SPI_CPOL_Low ;
spi_InitStruct.SPI_DataSize = SPI_DataSize_8b ; //一帧数据8位
spi_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB ;//先发送数据高位
//几乎是固定的配置
spi_InitStruct.SPI_Direction = SPI_Direction_2Lines_FullDuplex ;//全双工
sp