🎯 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长度匹配)。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐