基于基于STM32F103ZET6实现实现OLED显示显示(4线线SPI)
硬件设备:硬件设备:
(1):0.96寸的oled显示屏
(2):stm32开发板,不带接口也可以可,可以用杜邦线引出来插上即可
目的:目的:
我们将利用精英 STM32 开发板上的 OLED 模块接口来点亮OLED,并实现 ASCII 字符的显示。
原理原理
LCD 都需要背光,而 OLED 不需要,因为它是自发光的。
OLED有多种点亮方式,包括:
(1):6800并行接口方式
(2):8080并行接口方式
(3):三线spi接口方式
(4):四线spi接口方式
(5):IIC 接口方式(只需要 2 根线就可以控制 OLED 了!)
这五种模式怎们设置呢?就是在模块的背面有一些电阻,分别BS0与BS1在控制模式,想要改变模式,就在相应位置焊上电阻
当然了,有的小伙伴并不是这样的oled,我的模块就不是正点原子的0.96oled,我是自己定义的引脚来控制的!可以根据厂家提供的数据手册资料来修改模式,原理差不多!
重点来了(四线重点来了(四线spi))
想要写好OLED程序,了解模块的原理,流程,数据写入的方向与方式等等都是很重要的,而不是拿着标准的程序死记硬背!下面就对我使用的OLED进行我的理解说明:
引脚说明引脚说明
CS:OLED 片选信号。
RST(RES):硬复位 OLED。
DC:命令/数据标志(0,读写命令;1,读写数据)。
SCLK:串行时钟线,D0 信号线作为串行时钟线
SDIN:串行数据线,D1 信号线作为串行数据线
VCC与GND也是必须要有的,这么算下来就是7针的OLED模块
IO口的配置比较简单:配置的引脚也能看到
void oled_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOG, ENABLE);
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_6;
GPIO_Init(GPIOD,&GPIO_InitStructure);
GPIO_SetBits(GPIOD,GPIO_Pin_3|GPIO_Pin_6);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_0;
GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_SetBits(GPIOC,GPIO_Pin_1|GPIO_Pin_0);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_15;
GPIO_Init(GPIOG,&GPIO_InitStructure);
GPIO_SetBits(GPIOG,GPIO_Pin_15);
//oled¸´Î»
OLED_RST=0;
delay_ms(100);
OLED_RST=1;
//oled³õʼ»¯
oled_writebyte(0xAE,OLED_CMD);
oled_writebyte(0xD5,OLED_CMD);
oled_writebyte(0x80,OLED_CMD);
oled_writebyte(0xA8,OLED_CMD);
oled_writebyte(0X3F,OLED_CMD);
oled_writebyte(0xD3,OLED_CMD);
oled_writebyte(0X00,OLED_CMD);
oled_writebyte(0x40,OLED_CMD);
oled_writebyte(0x8D,OLED_CMD);
oled_writebyte(0x14,OLED_CMD);
oled_writebyte(0x20,OLED_CMD);
oled_writebyte(0x02,OLED_CMD);
oled_writebyte(0xC8,OLED_CMD);
oled_writebyte(0xA1,OLED_CMD);
oled_writebyte(0xDA,OLED_CMD);
oled_writebyte(0x12,OLED_CMD);
oled_writebyte(0x81,OLED_CMD);
oled_writebyte(0xEF,OLED_CMD);
oled_writebyte(0xD9,OLED_CMD);
oled_writebyte(0xf1,OLED_CMD);
oled_writebyte(0xDB,OLED_CMD);
oled_writebyte(0x30,OLED_CMD);
oled_writebyte(0xA4,OLED_CMD);
oled_writebyte(0xA6,OLED_CMD);
oled_writebyte(0xAF,OLED_CMD);
OLED_Clear();
}
如图:
评论0