admin管理员组

文章数量:1558696

实验描述:
ALIENTEK OLED模块的控制器是SSD1306,本章,通过STM32来控制该模块显示字符和数字。代码通过SPI与OLED 屏幕相连
OLED 简介:
OLED,即有机发光二极管(OrganicLight-EmittingDiode),又称为有机电激光显示(OrganicElectroluminesenceDisplay,OELD)。OLED由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。
SPI:
串口模式使用的信号线有如下几条:CS:OLED片选信号。RST(RES):硬复位OLED。DC:命令/数据标志(0,读写命令;1,读写数据)。SCLK:串行时钟线。在4线串行模式下,D0信号线作为串行时钟线SCLK。SDIN:串行数据线。在4线串行模式下,D1信号线作为串行数据线SDIN。模块的D2需要悬空,其他引脚可以接到GND。在4线串行模式下,只能往模块写数据而不能读数据。在4线SPI模式下,每个数据长度均为8位,在SCLK的上升沿,数据从SDIN移入到SSD1306,并且是高位在前的。DC线还是用作命令/数据的标志线。
相关设置步骤如下:
1)根据连接电路以及OLED模块所设置的通讯模式来设置设置STM32与OLED模块相连接的模块相连接的IO。这一步,先将我们与OLED模块相连的IO口设置为输出。
2)初始化初始化OLED模块,通过对OLED相关寄存器的初始化,来启动OLED的显示。为后续显示字符和数字做准备。
3)通过函数将字符和数字显示到通过函数将字符和数字显示到OLED模块上。通过我们设计的程序,将要显示的字符送到OLED模块上。

软件设计:
OLED_Init函数的结构比较简单,开始是对IO口的初始化,这里我们用了宏定义OLED_MODE来决定要设置的IO口,其他一些初始化序列,我们按照厂家提供的资料来做就可以。OLED_Init函数代码如下:

//初始化SSD1306
voidOLED_Init(void){
   GPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOG,ENABLE);//使能PC,D,G端口时钟
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_6;//PD3,PD6推挽输出
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//速度
50MHzGPIO_Init(GPIOD,&GPIO_InitStructure);//初始化
GPIOD3,6GPIO_SetBits(GPIOD,GPIO_Pin_3|GPIO_Pin_6);//PD3,PD6输出高
#ifOLED_MODE==1GPIO_InitStructure.GPIO_Pin=0xFF;//PC0~7OUT推挽输出
GPIO_Init(GPIOC,&GPIO_InitStructure);GPIO_SetBits(GPIOC,0xFF);//PC0~7输出高//PG13,14,15OUT推挽输出
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;GPIO_Init(GPIOG,&GPIO_InitStructure);//PG13,14,15OUT输出高
GPIO_SetBits(GPIOG,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);#elseGPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1;//PC0,1OUT推挽输出
GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_SetBits(GPIOC,GPIO_Pin_0|GPIO_Pin_1);//PC0,1OUT输出高
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_15;//PG15OUT推挽输出
RSTGPIO_Init(GPIOG,&GPIO_InitStructure);GPIO_SetBits(GPIOG,GPIO_Pin_15);//PG15OUT输出高
#endifOLED_RST=0;delay_ms(100);OLED_RST=1;OLED_WR_Byte(0xAE,OLED_CMD);//关闭显示
OLED_WR_Byte(0xD5,OLED_CMD);//设置时钟分频因子,震荡频率OLED_WR_Byte

本文标签: 屏幕oled