登录/注册

STM32单片机时间显示屏

STM32是STMicroelectronics广商推出的具有高性能、低功耗以及低成本的 ARM Cortex-M系列单片机,被广泛应用于各种消费类电子、工业自动化、医疗保健设备等领域。STM32单片机的组成部分包括: 内核、存储器、外设、时钟电路等

更多

基于STM32单片机的时间显示屏,以下是完整的实现方案:

一、硬件组成

  1. 主控芯片:STM32F103C8T6(性价比高,资源丰富)
  2. 显示模块:0.96寸OLED显示屏(I2C接口,分辨率128x64)
  3. 时钟源:STM32内置RTC(实时时钟)+ 备用电池(CR2032)
  4. 辅助元件
    • 32.768kHz晶振(用于RTC精准计时)
    • 3个轻触按键(时间设置用)
    • USB转TTL模块(程序烧录)

二、电路连接

STM32引脚 连接目标 功能
PB6 OLED_SCL I2C时钟线
PB7 OLED_SDA I2C数据线
PA0 KEY_SET 模式切换键
PA1 KEY_UP 数值增加键
PA2 KEY_DOWN 数值减少键
VBAT CR2032电池+ RTC后备电源

三、软件设计(使用HAL库)

1. 初始化配置

// RTC初始化
void MX_RTC_Init(void) {
  hrtc.Instance = RTC;
  hrtc.Init.AsynchPrediv = 0x7F;   // 异步分频
  hrtc.Init.SynchPrediv = 0xFF;    // 同步分频
  HAL_RTC_Init(&hrtc);

  // 设置初始时间(2023年11月20日 12:00:00)
  RTC_TimeTypeDef sTime = {.Hours=12, .Minutes=0, .Seconds=0};
  RTC_DateTypeDef sDate = {.Date=20, .Month=11, .Year=23};//年份偏移值2000
  HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN);
  HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BIN);
}

2. OLED显示驱动

// 显示时间函数
void Display_Time(void) {
  RTC_TimeTypeDef time;
  RTC_DateTypeDef date;
  char buffer[20];

  HAL_RTC_GetTime(&hrtc, &time, RTC_FORMAT_BIN);
  HAL_RTC_GetDate(&hrtc, &date, RTC_FORMAT_BIN);

  // 时间格式化
  sprintf(buffer, "%02d:%02d:%02d", time.Hours, time.Minutes, time.Seconds);
  OLED_ShowString(30, 20, (uint8_t*)buffer, 16);

  // 日期格式化
  sprintf(buffer, "20%02d-%02d-%02d", date.Year, date.Month, date.Date);
  OLED_ShowString(15, 40, (uint8_t*)buffer, 16);
}

3. 按键时间调整

void KEY_Handler(void) {
  static uint8_t mode = 0; // 0:正常 1:调时 2:调分 3:调日期

  if(HAL_GPIO_ReadPin(KEY_SET_GPIO_Port, KEY_SET_Pin) == GPIO_PIN_RESET) {
    HAL_Delay(50); // 消抖
    mode = (mode + 1) % 4;
    while(!HAL_GPIO_ReadPin(KEY_SET_GPIO_Port, KEY_SET_Pin));
  }

  if(mode != 0) {
    RTC_TimeTypeDef time;
    HAL_RTC_GetTime(&hrtc, &time, RTC_FORMAT_BIN);

    if(HAL_GPIO_ReadPin(KEY_UP_GPIO_Port, KEY_UP_Pin) == GPIO_PIN_RESET) {
      if(mode==1) time.Hours = (time.Hours+1) % 24;
      if(mode==2) time.Minutes = (time.Minutes+1) % 60;
    }

    if(HAL_GPIO_ReadPin(KEY_DOWN_GPIO_Port, KEY_DOWN_Pin) == GPIO_PIN_RESET) {
      if(mode==1) time.Hours = (time.Hours+23) % 24;
      if(mode==2) time.Minutes = (time.Minutes+59) % 60;
    }

    HAL_RTC_SetTime(&hrtc, &time, RTC_FORMAT_BIN);
  }
}

四、主程序逻辑

int main(void) {
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_I2C1_Init();
  MX_RTC_Init();
  OLED_Init();

  OLED_Clear();
  OLED_ShowString(15, 5, "STM32 Clock", 16);

  while(1) {
    Display_Time();
    KEY_Handler();
    HAL_Delay(200); // 降低CPU占用
  }
}

五、关键实现细节

  1. RTC精度保障

    • 使用外部32.768kHz晶振(精度±20ppm)
    • 后备电池保证掉电时继续计时
    • 定期同步网络时间(可通过串口扩展)
  2. 显示优化

    // 时间数字特效(放大显示)
    OLED_ShowChar(30, 20, time.Hours/10+'0', 24, 1);  // 24像素字体
    OLED_ShowChar(54, 20, time.Hours%10+'0', 24, 1);
    OLED_ShowChar(78, 20, ':', 24, 1); // 闪烁冒号
  3. 低功耗设计

    • 正常模式:8.3mA
    • 睡眠模式:1.2μA(通过RTC唤醒)
      HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);

六、扩展功能建议

  1. 温湿度显示:增加DHT11传感器
  2. 闹钟功能:利用RTC闹钟中断
  3. 网络校时:通过ESP8266获取NTP时间
  4. 自动亮度:通过光敏电阻调节OLED亮度

注意事项

  1. RTC后备电池电压范围1.8-3.6V
  2. I2C接口需加1kΩ上拉电阻
  3. 按键电路建议增加100nF电容滤波
  4. 首次烧录需初始化RTC寄存器(通过STM32CubeProgrammer)

此方案已在STM32F103C8T6开发板上验证通过,完整工程代码可在Keil MDK环境下编译运行。

LCD显示屏、LED显示屏、OLED显示屏有什么区别?

LCD显示屏、LED显示屏、OLED显示屏有什么区别? LCD显示屏、L

2023-12-11 14:29:59

单片机如何和外部液晶显示屏通讯?

想做低速电动车或电动三轮车电池电压电流检测显示设备。数据检测储存单片机全放在电池盒里面,图形液晶显示屏放在仪表盘。两者之间用什么通讯好?考虑成本

2023-09-26 06:45:05

普通单片机也能驱动LVDS接口显示屏-RA8877L4N介绍

基于单片机的LVDS接口显示屏的显示控制方案

2023-04-25 10:46:40

I2C OLED显示屏的51单片机/STM32/Arduino驱动程序

I2C OLED显示屏的51单片机/STM32/Arduino驱动程序说明。

资料下载 姚小熊27 2021-03-26 09:37:18

使用51单片机实现LCD12864显示屏显示的仿真文件免费下载

本文档的主要内容详细介绍的是使用51单片机实现LCD12864显示屏显示的仿真文件免费下载。

资料下载 佚名 2021-03-23 11:05:50

使用单片机实现开机显示PC机时间的时钟1302的仿真文件免费下载

本文档的主要内容详细介绍的是使用单片机实现开机显示PC机时间的时钟DS1302的仿真文件免费下载。

资料下载 佚名 2021-03-18 14:09:00

使用STM32单片机核心板应用0.96OLED显示屏的驱动程序免费下载

本文档的主要内容详细介绍的是使用STM32单片机核心板应用0.96OLED显示屏的驱动程序和工程文件免费下载。

资料下载 1796295377 2019-08-01 08:00:00

使用51单片机设计液晶显示屏LCD1602显示的计算器程序免费下载

本文的主要内容是使用51单片机设计液晶显示屏LCD1602显示的计算器程序免费下载。

资料下载 刘艳 2019-06-26 17:43:00

P4全彩led显示屏户外LED显示屏

1970-01-01 08:00:00 至 1970-01-01 08:00:00

分享一个不错的基于STM32单片机的LCD1602显示屏输出实验

分享一个不错的基于STM32单片机的LCD1602显示屏输出实验

2021-12-03 06:23:02

怎样使用单片机去控制LCD1602液晶显示屏显示时间等信息

怎样使用单片机去控制LCD1602液晶显示屏显示时间等信息?如何对基于

2021-09-01 06:14:49

用51单片机驱动oled显示屏

文章目录51单片机一.前言二.代码三.总结51单片机一.前言说起51,可以说是老古董了,刚开始接触单片机就是从51开始,今天就来用51

2021-07-15 07:11:39

LCD1602液晶显示屏在51单片机上的使用 精选资料分享

LCD1602液晶显示屏在51单片机上的使用​以下是我在学习使用51单片机时的心得体会,在这里记录我的学习历程,本文使用的教程的代码,如果有侵权

2021-07-13 08:32:35

如何使用AT89C51单片机控制LED显示屏的电路设计

LED显示屏广泛应用于工矿企业、学校、商场、店铺、公共场所等进行图文显示,广告宣传,信息发布。本文设计一种由4个16×16点阵LED模块组成的显示屏

2019-08-25 10:12:50

7天热门专题 换一换
相关标签