一、硬件与原理
1. OLED显示屏信息
类型:0.96寸或1.3寸OLED
接口:I2C(2线制)
驱动IC:SSD1306
工作电压:3.3V-5V
分辨率:128*32
驱动芯片:SSD1306
通信接口:IC
二、原理图:
从原理图上可以与板子上结合看,找到P1端口的PA3,PF5,并把线连接好。特别要注意电源和地不要连接反了。
三、连接示意图
四、代码
- <font color="#0d0d0d" face="-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, Arial, Noto Sans, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji"><span style="font-size: 14px; white-space: pre;">// OLED引脚定义
- // 定义OLED的SCL(时钟)引脚操作宏,使用GPIOA的PIN3
- #define OLED_SCL_Clr() GPIO_ClearBit(GPIOA, GPIO_PIN_3) // 将SCL引脚拉低
- #define OLED_SCL_Set() GPIO_SetBit(GPIOA, GPIO_PIN_3) // 将SCL引脚拉高
- // 定义OLED的SDA(数据)引脚操作宏,使用GPIOF的PIN5
- #define OLED_SDA_Clr() GPIO_ClearBit(GPIOF, GPIO_PIN_5) // 将SDA引脚拉低
- #define OLED_SDA_Set() GPIO_SetBit(GPIOF, GPIO_PIN_5) // 将SDA引脚拉高
- // 主函数
- int main(void)
- {
- GPIO_Config_T gpioConfig; // 定义GPIO配置结构体
-
- // 使能AHB总线时钟,为LED2和LED3所在的GPIO端口提供时钟
- RCM_EnableAHBPeriphClock(LED2_GPIO_CLK | LED3_GPIO_CLK);
-
- /* 配置LED2的GPIO参数 */
- gpioConfig.pin = LED2_PIN; // 设置引脚号
- gpioConfig.mode = GPIO_MODE_OUT; // 设置为输出模式
- gpioConfig.outtype = GPIO_OUT_TYPE_PP; // 推挽输出
- gpioConfig.speed = GPIO_SPEED_50MHz; // 输出速度50MHz
- gpioConfig.pupd = GPIO_PUPD_NO; // 无上下拉
- GPIO_Config(LED2_GPIO_PORT, &gpioConfig); // 应用配置到具体GPIO端口
-
- // 初始化OLED显示屏
- OLED_Init();
-
- // 设置OLED显示模式
- OLED_ColorTurn(0); // 0: 正常显示,1: 反色显示
- OLED_DisplayTurn(0); // 0: 正常显示,1: 屏幕翻转显示
-
- // 在OLED上显示字符串
- // 参数说明:(x坐标, y坐标, 字符串指针, 字体大小, 显示模式)
- OLED_ShowString(0, 0, "Hello 21IC", 16, 1); // 在(0,0)位置显示"Hello 21IC",16号字体
- OLED_ShowString(0, 20, "APM32F030 OLED", 16, 1); // 在(0,20)位置显示"APM32F030 OLED"
-
- while(1)
- {
- // 主循环
- }
- }
- // OLED显示字符串函数
- // 参数说明:
- // x: 起始X坐标
- // y: 起始Y坐标
- // chr: 要显示的字符串指针
- // size1: 字体大小(8或16)
- // mode: 显示模式(通常控制是否反色)
- void OLED_ShowString(u8 x, u8 y, u8 *chr, u8 size1, u8 mode)
- {
- // 遍历字符串中的每个字符,直到遇到非可显示字符(ASCII码不在' '到'~'之间)
- while((*chr >= ' ') && (*chr <= '~'))
- {
- // 显示当前字符
- OLED_ShowChar(x, y, *chr, size1, mode);
-
- // 根据字体大小更新X坐标(光标位置)
- if(size1 == 8)
- x += 6; // 8号字体,每个字符占6像素宽度
- else
- x += size1 / 2; // 16号字体,每个字符占8像素宽度(16/2)
-
- chr++; // 移动到下一个字符
- }
- }</span></font>
解释
引脚定义: OLED使用I2C或SPI接口(从代码看是类似I2C的软件模拟,因为使用了SCL和SDA) SCL(时钟)连接在PA3,SDA(数据)连接在PF5 OLED初始化: OLED_Init() 函数(未显示)应该包含了OLED的初始化序列,如设置显示模式、清屏等 显示功能: OLED_ShowChar() 是实际显示单个字符的函数(未显示) 字符串显示通过循环调用字符显示实现,并自动处理光标移动 字体大小: 代码支持8像素和16像素高的字体 对于8号字体,字符宽度固定为6像素 对于16号字体,字符宽度为字体高度的一半(8像素) 显示模式: mode参数可能控制是否反色显示(由OLED_ShowChar()实现)
五、显示效果
|