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

江协STM32学习笔记+自测--OLED显示屏

🎯 OLED 自测题

一、基础概念题

  1. 填空题:0.96 寸 I2C 接口 OLED 的分辨率为______,I2C 通信核心引脚为______(数据线)和______(时钟线);OLED 显示数字的函数是______,显示字符串的函数是______。
  2. 选择题:OLED 初始化的核心步骤不包括()A. 配置 I2C 通信引脚 B. 发送 OLED 寄存器初始化命令 C. 直接点亮全屏幕 D. 设置显示对比度
  3. 判断题:OLED 的ShowString()函数可直接显示中文汉字,无需额外操作()(对打√,错打 ×)
  4. 简答题:简述 OLED 显示一个字符串的核心流程。

二、代码实操题

  1. OLED 0~99 循环计数显示:实现2行 8列显示 2 位数字,1 秒刷新一次,计数到 99 后重置为 0。
  2. 声光报警器 + OLED 模式联动显示:
    • 开机默认自动模式,按键点按切换自动 / 手动模式;
    • 自动模式:OLED1 行显示Auto Mode,2 行根据光敏显示Light: Bright/Light: Dark,光敏暗时蜂鸣器响 + LED 闪烁,光敏亮时蜂鸣器关 + LED 常亮;
    • 手动模式:OLED1 行显示Manual Mode,2 行显示Buzzer: OFF,光敏失效,强制 LED 常亮、蜂鸣器关


参考答案

一、基础概念题

1. 填空题

0.96 寸 I2C 接口 OLED 的分辨率为128×64,I2C 通信核心引脚为SDA(数据线)SCL(时钟线);OLED 显示数字的函数是OLED_ShowNum,显示字符串的函数是OLED_ShowString

2. 选择题

OLED 初始化的核心步骤不包括(C)

A. 配置 I2C 通信引脚 B. 发送 OLED 寄存器初始化命令 C. 直接点亮全屏幕 D. 设置显示对比度

3. 判断题

OLED 的ShowString()函数可直接显示中文汉字,无需额外操作(×)

4. 简答题

简述 OLED 显示一个字符串的核心流程

答:① 调用OLED_Init()初始化 OLED 模块;② 调用OLED_ShowString(行,列,字符串)指定显示位置和内容;③ 驱动函数将字符串点阵数据写入 OLED 显存;④ 屏幕根据显存数据点亮对应像素完成显示。

二、代码实操题(可直接跑通,适配你的工程)

题目 1:OLED 0~99 循环计数显示(1 秒刷新,2行 8 列显示 2 位数字)

#include "stm32f10x.h" #include "Delay.h" #include "OLED.h" int main(void) { OLED_Init(); int num = 0; while(1) { OLED_ShowNum(2,8, num, 2); // 第4行显示2位数字 num++; if(num>99) num=0; Delay_ms(10); // 1秒加1 } }

题目 2:声光报警器 + OLED 模式联动显示

管脚和之前相同

#include "stm32f10x.h" #include "Delay.h" #include "LED.h" #include "Key.h" #include "LightSensor.h" #include "Buzzer.h" #include "OLED.h" int main(void) { LED_Init(); Key_Init(); LightSensor_Init(); Buzzer_Init(); OLED_Init(); OLED_Clear(); // 开机清屏(重要!),启动写了,不写也行 uint8_t KeyNum; uint8_t Mode = 0; // 0=自动 1=手动 while(1) { KeyNum = Key_GetNum(); // 按键切换模式 if(KeyNum == 1) { Mode = !Mode; } // 自动模式 if(Mode == 0) { OLED_ShowString(1,1,"Auto Mode"); if(LightSensor_Get() == 1) { OLED_ShowString(2,1,"Light: Dark "); Buzzer_ON(); LED_Turn(); Delay_ms(100); } else { OLED_ShowString(2,1,"Light: Bright"); Buzzer_OFF(); GPIO_ResetBits(GPIOA, GPIO_Pin_0); } } // 手动模式 else { OLED_ShowString(1,1,"Manual Mode"); OLED_ShowString(2,1,"Buzzer: OFF "); Buzzer_OFF(); GPIO_ResetBits(GPIOA, GPIO_Pin_0); } } }


排错总结

题目 1:OLED 通电后无任何显示,代码无报错,排查 3 个核心原因 + 解决方法

答:① 未调用OLED_Init():在main开头添加初始化代码;② OLED 硬件接线错(SDA/SCL 接反、未共 GND):重新核对引脚接线,确保所有模块共 GND;③ OLED 正负极接反:调换 OLED 供电正负极。

题目 2:OLED 显示字符有残影(如 Bright 切换为 Dark 后,末尾仍显示 t),解决方法

答:用空格补齐短字符串,使新字符串长度与旧字符串一致,覆盖原有显存数据(如Light: Dark加 2 个空格,与Light: Bright长度匹配)。

http://www.jsqmd.com/news/581730/

相关文章:

  • 如何统计不同电话号码的个数?—位图法
  • 从AutoDock-GPU编译到ADFR套件:在超算集群上部署完整分子对接工作流的实战记录
  • 以数据为中心的安全成为AI部署关键层——企业亟需构建可信数据平台
  • Innovus与Calibre DRC Violation自动化修复实战:从分析到脚本实现
  • 避坑!Golang整型溢出那些事儿:从uint8到int64的边界处理实战
  • 3个时间序列数据增强策略让模型突破性能瓶颈:实战指南
  • 解析Android Studio中文适配困局:社区语言包的技术架构与部署实践
  • OpenClaw对接Qwen3-4B实战:本地部署与自动化任务调试指南
  • claude code小白windows安装教程
  • NVIDIA Profile Inspector深度解析:解锁显卡隐藏性能的5个关键技术维度
  • 终极指南:如何用BallonTranslator快速完成漫画翻译?
  • 如何用Huggingface lerobot和so-arm100机械臂录制自定义数据集(含离线录制技巧)
  • 高级语言的技巧的使用边界探讨
  • 实战应用:基于快马平台构建支持markdown实时预览的nodepad编辑器
  • 寻找高效的开源媒体解决方案?这款播放器让内容管理变得简单
  • 双层PDF转换:让扫描文档实现文本检索与原始排版的完美平衡
  • 【单片机】位域非原子写的风险
  • javaweb文创产品商城众筹平台设计与实现
  • 从理论到实践:锁相环(PLL)在FOC电机控制中的核心算法与参数调优
  • 乌鲁木齐玖拾捌空间设计装修设计效果好吗,详细解读公司概况 - 工业品牌热点
  • 如何用开源工具openLCA轻松完成产品碳足迹分析:完整实践指南
  • 新手福音:告别复杂opencode下载,用快马AI生成可学可用的入门项目
  • 从系统编程到 JavaScript/TypeScript
  • 智能提取与效率工具:B站视频转文字全流程自动化解决方案
  • SpringBoot与LangChain4j实战:多模型动态切换与OpenAI/DeepSeek集成指南
  • 微信小程序接入Pixel Couplet Gen避坑指南:跨域、CORS与Token配置
  • 基于Matlab粒子群算法PSO的水、火电系统优化调度
  • SAP财务凭证冲销全攻略:FB08、AB08、VF11、FBRA实战避坑指南
  • 原神帧率解锁技术:突破游戏性能限制的实现方案与应用指南
  • 告别枯燥手册:用CANoe LINstress实战模拟总线异常,手把手教你做车载网络压力测试