STM32的数字秒表OLED显示设计
- 基于STM32的数字秒表OLED显示设计
-
- 一、开发环境
- 二、主要功能
- 三、仿真设计
- 四、程序代码
- 五、设计说明书
- 六、资料清单&下载链接
基于STM32的数字秒表OLED显示设计
本设计包含proteus仿真+程序代码+设计报告+讲解视频
一、开发环境
仿真图:proteus 8.17
程序编译器:keil 5
编程语言:C语言
设计编号:C0138
二、主要功能
设计一个基于STM32的数字秒表系统。
设计要求:
(1)开始/停止/清零;
(2)3组时间记录;
(3)成绩查询。
具体功能:
1、使用OLED显示秒表时间和查看历史成绩;
2、一个按键实现开始/暂停/清零,一个按键查询3组成绩;
3、按键按下有蜂鸣器响。
资料下载链接:
KEY_C0138 STM32数字秒表OLED显示
链接: https://pan.baidu.com/s/1DDNJGo5tBumhx_cnqHz9nw?pwd=bscw
提取码: bscw
以下为本设计资料展示:
三、仿真设计
打开仿真工程,双击proteus中的单片机,选择hex文件路径,然后开始仿真。
四、程序代码
程序是用keil5 mdk版本打开的,如果打开有问题,核实下keil的版本。程序有注释可以结合讲解视频理解。
#include "delay.h"#include "key.h"#include "led.h"#include "timer.h"#include "OLED_I2C.h"#include "stdio.h"/* ---- 秒表状态 ---- */#define SW_STOPPED 0#define SW_RUNNING 1#define SW_PAUSED 2#define SW_RECORD 3u8 sw_state = SW_STOPPED;u8 sw_prev = SW_STOPPED;u16 sw_min = 0;u8 sw_sec = 0;u8 sw_ds = 0;/* ---- 记录存储 ---- */typedef struct { u16 minutes; u8 seconds; u8 deciseconds;} TimeRec;TimeRec records[3];u8 rec_count = 0;u8 rec_index = 0;static char dbuf[17];/* 格式化时间: "00:00.0" (7字符+结束符) */static void fmt_time(char *s, u16 min, u8 sec, u8 ds){ s[0] = '0' + (min / 10) % 10; s[1] = '0' + (min % 10); s[2] = ':'; s[3] = '0' + (sec / 10); s[4] = '0' + (sec % 10); s[5] = '.'; s[6] = '0' + ds; s[7] = '�';}static u8 rec_empty(u8 i){ return (records[i].minutes == 0xFFFF);}static void draw_main(void){ char t[8]; /* 第1行:空白 */ OLED_ShowStr(0, 0, (unsigned char *)" ", 2); /* 第2行:标题 */ OLED_ShowStr(0, 2, (unsigned char *)"== STOPWATCH == ", 2); /* 第3行:当前计时 + 状态 */ fmt_time(t, sw_min, sw_sec, sw_ds); if (sw_state == SW_RUNNING) sprintf(dbuf, " %s RUN ", t); else if (sw_state == SW_PAUSED) sprintf(dbuf, " %s PAU ", t); else sprintf(dbuf, " %s STP ", t); OLED_ShowStr(0, 4, (unsigned char *)dbuf, 2); /* 第4行:空白 */ OLED_ShowStr(0, 6, (unsigned char *)" ", 2);}static void draw_record(void){ char t[8]; u8 i; /* 第1行:标题(16字符覆盖旧内容) */ OLED_ShowStr(0, 0, (unsigned char *)" RECORD ", 2); /* 第2-4行:R1 / R2 / R3,补足16字符 */ for (i = 0; i < 3; i++) { if (!rec_empty(i)) { fmt_time(t, records[i].minutes, records[i].seconds, records[i].deciseconds); sprintf(dbuf, "R%d %s ", i + 1, t); } else { sprintf(dbuf, "R%d --:--.- ", i + 1); } OLED_ShowStr(0, 2 + i * 2, (unsigned char *)dbuf, 2); }}int main(void){ u8 i; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); LED_Init(); OLED_Init(); OLED_CLS(); TIM2_Int_Init(99, 7199); KEY_Init(); /* 欢迎界面 */ OLED_ShowStr(24, 0, (unsigned char *)"Digital", 2); OLED_ShowStr(16, 2, (unsigned char *)"Stopwatch", 2); OLED_ShowStr(24, 4, (unsigned char *)"STM32F1", 2); delay_ms(1000); OLED_CLS(); /* 初始化记录为空 */ for (i = 0; i < 3; i++) records[i].minutes = 0xFFFF; draw_main(); while (1) { if (flag_timer) { flag_timer = 0; if (sw_state == SW_RECORD) draw_record(); else draw_main(); } KEY_Handle(); }}
程序流程图:
五、设计说明书
11191字,内容包括硬件设计、软件设计、结论等。
六、资料清单&下载链接
资料下载链接:
链接: https://pan.baidu.com/s/1DDNJGo5tBumhx_cnqHz9nw?pwd=bscw
提取码: bscw
更多资源 点击下方链接:
https://docs.qq.com/sheet/DS0xIa0llTmtNakRW
以下是实物图,需要定制实物可联系。
293