3. OLED模块

您所在的位置:网站首页 oled屏幕息屏后有中间有一个有规则的圆框 3. OLED模块

3. OLED模块

2024-07-03 14:12| 来源: 网络整理| 查看: 265

3. OLED模块¶ 3.1. 模块简介¶

野火0.96寸黄蓝双色OLED模块通讯方式为IIC,分辨率为128*64。

3.2. 模块的引脚说明¶

该模块使用IIC通讯,管脚定义如下,

黄蓝双色OLED模块的引脚说明¶

编号

名称

说明

1

VCC

电源正

2

GND

地线

3

SCL

IIC时钟引脚

4

SDA

IIC数据引脚

3.3. 实验现象¶

这里不管你是用的野火哪款开发板,请打开对应的开发板LOED例程,打开 OLED_I2C.h,就可以看到I2C的引脚定义,这里以STM32F103霸道开发板为例,

可以看到,I2C的SCL引脚为PB6,SDA引脚为PB7。

OLED_I2C.h¶ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 /*I2C接口*/ #define OLED_I2C I2C1 #define OLED_I2C_CLK RCC_APB1Periph_I2C1 #define OLED_I2C_CLK_INIT RCC_APB1PeriphClockCmd #define OLED_I2C_SCL_PIN GPIO_Pin_6 #define OLED_I2C_SCL_GPIO_PORT GPIOB #define OLED_I2C_SCL_GPIO_CLK RCC_AHB1Periph_GPIOB #define OLED_I2C_SCL_SOURCE GPIO_PinSource6 #define OLED_I2C_SCL_AF GPIO_AF_I2C1 #define OLED_I2C_SDA_PIN GPIO_Pin_7 #define OLED_I2C_SDA_GPIO_PORT GPIOB #define OLED_I2C_SDA_GPIO_CLK RCC_AHB1Periph_GPIOB #define OLED_I2C_SDA_SOURCE GPIO_PinSource7 #define OLED_I2C_SDA_AF GPIO_AF_I2C1

将OLED与开发板按照上面定义的方式连接,再用USB线连接开发板与电脑,打开电脑上的野火多功能上位机助手,与开发板进行连接,然后将程序下载到开发板, 上位机会打印如下信息,

同时,OLED上会显示如下内容,

3.4. 例程介绍¶

首先来看一下IIC的初始化,这里将SCL、SDA引脚都设置为开漏模式,将IIC设置为快速模式,代码如下,

OLED_I2C.c¶ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 void I2C_Configuration(void) { I2C_InitTypeDef I2C_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; OLED_I2C_CLK_INIT(OLED_I2C_CLK,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); GPIO_InitStructure.GPIO_Pin = OLED_I2C_SCL_PIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD; // 开漏输出 GPIO_Init(OLED_I2C_SCL_GPIO_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = OLED_I2C_SDA_PIN; GPIO_Init(OLED_I2C_SDA_GPIO_PORT, &GPIO_InitStructure); I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;// 高电平数据稳定,低电平数据变化 SCL 时钟线的占空比 I2C_InitStructure.I2C_OwnAddress1 = OLED_ADDRESS; // OLED的I2C地址 I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; // ACK使能 I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;// I2C的寻址模式 I2C_InitStructure.I2C_ClockSpeed = I2C_Speed; // 设置为快捷模式 I2C_Init(I2C1, &I2C_InitStructure); // I2C1 初始化 I2C_Cmd(I2C1, ENABLE); // 使能 I2C1 }

再来看一下OLED的初始化,这里是对OLED的寄存器进行操作,这些参数不需要去了解,默认也不需要修改。

OLED_I2C.c¶ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 void OLED_Init(void) { Delay_s(1); // 1s,这里的延时很重要,上电后延时,没有错误的冗余设计 WriteCmd(0xAE); //display off WriteCmd(0x20); //Set Memory Addressing Mode WriteCmd(0x10); //00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode (RESET);11,Invalid WriteCmd(0xb0); //Set Page Start Address for Page Addressing Mode,0-7 WriteCmd(0xc8); //Set COM Output Scan Direction WriteCmd(0x00); //---set low column address WriteCmd(0x10); //---set high column address WriteCmd(0x40); //--set start line address WriteCmd(0x81); //--set contrast control register WriteCmd(0xff); //亮度调节 0x00~0xff WriteCmd(0xa1); //--set segment re-map 0 to 127 WriteCmd(0xa6); //--set normal display WriteCmd(0xa8); //--set multiplex ratio(1 to 64) WriteCmd(0x3F); // WriteCmd(0xa4); //0xa4,Output follows RAM content;0xa5,Output ignores RAM content WriteCmd(0xd3); //-set display offset WriteCmd(0x00); //-not offset WriteCmd(0xd5); //--set display clock divide ratio/oscillator frequency WriteCmd(0xf0); //--set divide ratio WriteCmd(0xd9); //--set pre-charge period WriteCmd(0x22); // WriteCmd(0xda); //--set com pins hardware configuration WriteCmd(0x12); WriteCmd(0xdb); //--set vcomh WriteCmd(0x20); //0x20,0.77xVcc WriteCmd(0x8d); //--set DC-DC enable WriteCmd(0x14); // WriteCmd(0xaf); //--turn on oled panel }

最后来看一下main函数,在这里需要先初始化LED和串口,用于调试,初始化系统滴答定时器,用于调用延时函数, 再初始化IIC的配置及OLED。

在循环中点亮全屏,再息屏,然后用 OLED_ShowCN 函数在OLED上显示中文,用 OLED_ShowStr函数显示字符串,用 OLED_DrawBMP函数显示BMP位图。

main.c¶ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 int main(void) { unsigned char i; /*初始化LED、串口*/ LED_GPIO_Config(); USART_Config(); LED_BLUE; printf("\r\n 欢迎使用野火 F103-霸道 STM32 开发板 \r\n"); printf("\r\n 这是一个I2C外设OLED测试例程! \r\n"); SysTick_Init(); //初始化延迟函数 I2C_Configuration();//配置CPU的硬件I2C OLED_Init(); //初始化OLED printf("\r\n OLED初始化成功,OLED正在工作! \r\n"); while(1) { OLED_Fill(0xFF);//全屏点亮 Delay_s(2); // 2s OLED_Fill(0x00);//全屏灭 Delay_s(2); // 2s LED_GREEN; for(i=0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3