STM32单片机时间显示屏
STM32是STMicroelectronics广商推出的具有高性能、低功耗以及低成本的 ARM Cortex-M系列单片机,被广泛应用于各种消费类电子、工业自动化、医疗保健设备等领域。STM32单片机的组成部分包括: 内核、存储器、外设、时钟电路等
基于STM32单片机的时间显示屏,以下是完整的实现方案:
一、硬件组成
- 主控芯片:STM32F103C8T6(性价比高,资源丰富)
- 显示模块:0.96寸OLED显示屏(I2C接口,分辨率128x64)
- 时钟源:STM32内置RTC(实时时钟)+ 备用电池(CR2032)
- 辅助元件:
- 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占用
}
}
五、关键实现细节
-
RTC精度保障:
- 使用外部32.768kHz晶振(精度±20ppm)
- 后备电池保证掉电时继续计时
- 定期同步网络时间(可通过串口扩展)
-
显示优化:
// 时间数字特效(放大显示) 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); // 闪烁冒号 -
低功耗设计:
- 正常模式:8.3mA
- 睡眠模式:1.2μA(通过RTC唤醒)
HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);
六、扩展功能建议
- 温湿度显示:增加DHT11传感器
- 闹钟功能:利用RTC闹钟中断
- 网络校时:通过ESP8266获取NTP时间
- 自动亮度:通过光敏电阻调节OLED亮度
注意事项:
- RTC后备电池电压范围1.8-3.6V
- I2C接口需加1kΩ上拉电阻
- 按键电路建议增加100nF电容滤波
- 首次烧录需初始化RTC寄存器(通过STM32CubeProgrammer)
此方案已在STM32F103C8T6开发板上验证通过,完整工程代码可在Keil MDK环境下编译运行。
单片机如何和外部液晶显示屏通讯?
想做低速电动车或电动三轮车电池电压电流检测显示设备。数据检测储存单片机全放在电池盒里面,图形液晶显示屏放在仪表盘。两者之间用什么通讯好?考虑成本
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
用51单片机驱动oled显示屏
文章目录51单片机一.前言二.代码三.总结51单片机一.前言说起51,可以说是老古董了,刚开始接触单片机就是从51开始,今天就来用51
LCD1602液晶显示屏在51单片机上的使用 精选资料分享
LCD1602液晶显示屏在51单片机上的使用以下是我在学习使用51单片机时的心得体会,在这里记录我的学习历程,本文使用的教程的代码,如果有侵权
如何使用AT89C51单片机控制LED显示屏的电路设计
LED显示屏广泛应用于工矿企业、学校、商场、店铺、公共场所等进行图文显示,广告宣传,信息发布。本文设计一种由4个16×16点阵LED模块组成的显示屏
2019-08-25 10:12:50
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- dtmb信号覆盖城市查询
- EDA是什么?有什么作用?
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 什么是场效应管?它的作用是什么?
- 如何进行编码器的正确接线?接线方法介绍
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- 苹果nfc功能怎么复制门禁卡
- amoled屏幕和oled区别
- 单片机和嵌入式的区别是什么
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 通讯隔离作用
- 苹果笔记本macbookpro18款与19款区别
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机
- 元宇宙概念龙头股一览