当前位置: 首页 > news >正文

【西门子杯工业嵌入式-7-OLED】


链接: B站视频

一、OLED 显示屏简介

1. OLED 的基本特性

自发光,无需背光源

对比度高

响应速度快

视角广

功耗低

在嵌入式系统中应用广泛

2. 本次课程使用的 OLED 说明

使用 I2C (I²C, IPHONEC) 接口通信

驱动芯片为 SSD1306

显示屏为 0.91 寸 OLED

OLED 接口:采用 模拟 I2C 模式,GPIO 引脚为 PB8(SCL) 和 PB9(SDA)

二、I2C(IPHONEC)通信协议详解

1. I2C 协议简介

飞利浦公司开发的同步串行通信协议
使用两根线:
SCL(串行时钟线)
SDA(串行数据线)

特性:
双向通信
多主多从支持
地址和数据均为 8 位
支持总线仲裁

2. I2C 的实现方式

(1)软件模拟 I2C
使用任意 GPIO 模拟时序

优点:灵活、调试方便、不受硬件限制

缺点:占用 CPU,速度慢,需精确延时

(2)硬件 I2C
使用 MCU 内置 I2C 外设

优点:速度快、支持中断/DMA、CPU 占用低

缺点:引脚固定、调试复杂

三、SSD1306 驱动芯片及显示流程

1. 驱动芯片简介

支持命令设置对比度、显示开关、显示模式等

通过 I2C 接收 MCU 命令进行控制

2. OLED 驱动程序设计要点

初始化:设置地址模式、方向、对比度等

显示缓冲区设计:

数据先写入缓存,再刷新显示屏

避免闪烁、提高刷新效率

注意事项:

使用硬件复位模式

初始化必须在发送指令之前完成

四、OLED 驱动代码结构说明

1. 头文件和源文件说明

oled.h / oled.c:基础驱动函数定义与实现
很多都是写好的,可以直接拿来用,以下师oled.h

#ifndef __OLED_H
#define __OLED_H/************************* 头文件 *************************/#include "HeaderFiles.h"//-----------------OLED端口定义---------------- #define u8 unsigned char
#define u32 unsigned int/* 引脚定义 - 模拟IIC */
#define OLED_SCL_PORT    GPIOB
#define OLED_SCL_PIN     GPIO_PIN_8
#define OLED_SDA_PORT    GPIOB
#define OLED_SDA_PIN     GPIO_PIN_9
/* SCL和SDA引脚控制宏定义 */
#define OLED_SCLK_Set()     gpio_bit_set(OLED_SCL_PORT, OLED_SCL_PIN)
#define OLED_SCLK_Clr()     gpio_bit_reset(OLED_SCL_PORT, OLED_SCL_PIN)
#define OLED_SDIN_Set()     gpio_bit_set(OLED_SDA_PORT, OLED_SDA_PIN)
#define OLED_SDIN_Clr()     gpio_bit_reset(OLED_SDA_PORT, OLED_SDA_PIN)
#define IIC_READ_SDA  gpio_input_bit_get(OLED_SDA_PORT, OLED_SDA_PIN)#define OLED_CMD  0	//写命令
#define OLED_DATA 1	//写数据void OLED_ClearPoint(u8 x,u8 y);
void OLED_ColorTurn(u8 i);
void OLED_DisplayTurn(u8 i);
void I2C_Start(void);
void I2C_Stop(void);
void I2C_WaitAck(void);
void Send_Byte(u8 dat);
void OLED_WR_Byte(u8 dat,u8 mode);
void OLED_DisPlay_On(void);
void OLED_DisPlay_Off(void);
void OLED_Refresh(void);
void OLED_Clear(void);
void OLED_DrawPoint(u8 x,u8 y);
void OLED_DrawLine(u8 x1,u8 y1,u8 x2,u8 y2);
void OLED_DrawCircle(u8 x,u8 y,u8 r);
void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size1);
void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 size1);
void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size1);
void OLED_ShowChinese(u8 x,u8 y,u8 num,u8 size1);
void OLED_ScrollDisplay(u8 num,u8 space);
void OLED_WR_BP(u8 x,u8 y);
void OLED_ShowPicture(u8 x0,u8 y0,u8 x1,u8 y1,u8 BMP[]);
void OLED_Init(void);#endif

oledfont.h:字模库文件(包含 ASCII 字符与汉字模组)

2. 驱动引脚设置

模拟 I2C 使用引脚:PB8 (SCL)、PB9 (SDA)

五、汉字显示与取模方法

1. 汉字取模软件使用方法(PCtoLCD2002)

设置格式为:

扫描方式:音码逆向列行式

输出格式:C51 格式

输入汉字,例如“智能制造”

选择字体,点击生成字模

将生成的数据复制进 oledfont.h 汉字库中
在这里插入图片描述

2. show_chinese 函数使用说明

函数原型:Show_Chinese(x, y, num, size)

参数说明:

x, y:起始坐标

num:汉字在数组中的编号

size:字体大小(16/24)

排列显示时,注意按字宽(如 16)偏移 x 坐标

//显示汉字
//x,y:起点坐标
//num:汉字对应的序号
void OLED_ShowChinese(u8 x,u8 y,u8 num,u8 size1)
{u8 i,m,n=0,temp,chr1;u8 x0=x,y0=y;u8 size3=size1/8;while(size3--){chr1=num*size1/8+n;n++;for(i=0;i<size1;i++){if(size1==16){temp=Hzk1[chr1][i];}//调用16*16字体else if(size1==24){temp=Hzk2[chr1][i];}//调用24*24字体else if(size1==32)       {temp=Hzk3[chr1][i];}//调用32*32字体else if(size1==64){temp=Hzk4[chr1][i];}//调用64*64字体else return;for(m=0;m<8;m++){if(temp&0x01)OLED_DrawPoint(x,y);else OLED_ClearPoint(x,y);temp>>=1;y++;}x++;if((x-x0)==size1){x=x0;y0=y0+8;}y=y0;}}
}

六、动态数据显示:ADC 电压显示实例

1. 基础思路

板子本身不带oled,要自己焊接

通过 ADC 获取电压值

使用 printf + OLED 显示电压值

利用 sprintf 将变量格式化为字符串显示

2. 具体实现

char date[20];
sprintf(date, "Voltage=%.2fV", voltage_value);
OLED_ShowString(0, 16, date, 16);

OLED_ShowString 函数参数:

x = 0,y = 16 显示在第二行

date:要显示的字符串

16:字体大小

void UsrFunction(void)
{unsigned char data[]=" ";while(1){OLED_ShowString(0,0,"**Hello CIMC**",16);/* 延时1秒 */delay_1ms(1000);adc_flag_clear(ADC0,ADC_FLAG_EOC);  //  清除结束标志while(SET != adc_flag_get(ADC0,ADC_FLAG_EOC)){}  //  获取转换结束标志adc_value = ADC_RDATA(ADC0);  // 读取ADC数据Vol_Value = adc_value*3.3/4095;  //  转换成电压值printf("adc_value=%d\r\n",adc_value);         // 结果输出原始值printf("Vol_Value=%.2f\r\n",Vol_Value);         // 结果输出电压值sprintf(data,"Vol=%.2f V",Vol_Value);OLED_ShowString(0,16,data,16);delay_1ms(1000);OLED_Refresh();}
}

七、优化建议与总结

1. 字模与显示优化技巧

使用页面缓存、局部更新,提升刷新效率

利用 DMA 传输降低 CPU 占用

适当管理显示缓冲区,避免重复刷新

2. 总结与扩展建议

掌握 OLED 驱动和显示流程

可扩展应用如:电压表、菜单系统、图形显示等

鼓励学生动手实现更多创意功能

相关文章:

  • 第二章 感知机
  • 火山 RTC 引擎10 ----远端视频 转网易视频格式
  • Houdini POP入门学习07 - 分组
  • 算法岗面试经验分享-大模型篇
  • 学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
  • 软件开发工程师如何在项目开发中了解学习 ISO 13485
  • WPS2024 软件下载及安装教程!
  • Java多线程实现之Thread类深度解析
  • AI电销机器人智能的发展趋势是什么?
  • 无需改造业务系统,数据导出行为也能“可控、可审、可溯”
  • 验证回文串
  • 根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
  • Docker拉取MySQL后数据库连接失败的解决方案
  • 解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
  • 如何在Android Studio中导出apk文件
  • 使用LangGraph和LangSmith构建多智能体人工智能系统
  • 快速排序算法改进:随机快排-荷兰国旗划分详解
  • Python异步编程:深入理解协程的原理与实践指南
  • AI辅助办公让公司陷入数据泄密危机
  • 今日行情明日机会——20250609
  • 做网站需要执照嘛/北京竞价托管代运营
  • 个人网站做联盟营销/百度竞价排名技巧
  • 定制型网站一般价格/旺道营销软件
  • 黄冈网站建设价格/网站自然排名怎么优化
  • 做视频网站公司要怎么做/网站的优化公司
  • 网站开发在无形资产中/宁波网站建设推广平台