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

基于 STM32 的数字闹钟系统 Proteus 仿真设计与实现

一、引言

        在嵌入式开发学习中,数字闹钟系统是一个经典的综合实践项目,既能巩固 STM32 微控制器、实时时钟(RTC)、外设交互等知识点,又能通过仿真工具快速验证设计合理性。本文将详细分享基于 STM32F103C6 的数字闹钟系统在 Proteus 中的仿真设计过程,包括系统架构、模块实现、仿真效果及核心代码解析,适合嵌入式初学者参考学习。

二、设计需求

1. 功能需求

基于 STM32 的数字闹钟系统需实现以下核心功能:

  • 实时显示:通过 LCD 屏幕显示日期(年 / 月 / 日)、时间(时 / 分 / 秒)及星期;
  • 交互控制:通过按键修改系统时间和设置闹钟;
  • 报警提示:到达设定闹钟时间时,蜂鸣器发声 + LED 闪烁报警;
  • 时间精度:依赖 RTC 芯片(DS1302)实现掉电仍能保持计时。

2. 仿真要求(Proteus)

  • 需在 Proteus 中搭建完整电路,包括 STM32 主控、LCD 显示、时钟模块、按键、报警电路;
  • 仿真过程中需验证时间显示、按键设置、闹钟触发等全流程功能;
  • 确保各模块引脚连接正确,时序逻辑无冲突(如 RTC 晶振频率 32.768kHz)。

三、系统总体设计

系统以 STM32F103C6 为核心,配合 5 大功能模块实现数字闹钟功能,整体架构如下:

STM32F103C6(主控) ←→ 时钟模块(DS1302)  // 提供实时时间←→ 显示模块(LM016L)   // 显示时间信息←→ 按键模块(4个按键)   // 时间/闹钟设置←→ 报警模块(蜂鸣器+LED)// 闹钟提示

各模块在 Proteus 中的设计细节如下:

3.1 主控模块(STM32F103C6)

  • 核心功能:处理时间数据、驱动外设、响应按键中断;
  • Proteus 配置:选择 STM32F103C6 芯片,配置外部晶振(8MHz)和 RTC 相关引脚(连接 DS1302 的 SCLK、I/O、RST);
  • 引脚分配:PA0~PA3 连接按键,PB 端口连接 LCD1602 的 8 位数据总线,PC13 控制报警 LED。

3.2 显示模块(LM016L LCD)

  • 功能:显示日期(如 2024-09-26)、时间(如 17:08:20)及设置界面;
  • Proteus 设计
    • 采用 16x2 字符型 LCD(LM016L),通过 8 位并行接口与 STM32 的 PB0~PB7 连接;
    • 控制引脚 RS(PB8)、RW(PB9)、E(PB10)用于指令 / 数据切换和读写控制;
    • 外接电位器调节 V0 引脚电压,优化显示对比度。
  • 仿真效果:通电后自动显示当前时间,设置模式下通过 “>” 符号指示可修改项(如年份、小时)。

3.3 时钟模块(DS1302)

  • 功能:提供高精度实时时钟,掉电后通过 3V 电池保持计时;
  • Proteus 设计
    • 选用 DS1302 芯片,外接 32.768kHz 晶振(X1)保证时间精度;
    • 电池(BAT1)接 VCC2 引脚,主电源接 VCC1,确保断电不丢数据;
    • 通过串行接口(SCLK、I/O、RST)与 STM32 的 PA1~PA3 通信,实现时间读写。

3.4 按键与报警模块

  • 按键模块
    • 4 个独立按键(设置时间、设置加、设置减、设置闹钟),通过 PA0~PA3 连接 STM32;
    • Proteus 中需添加下拉电阻(10kΩ),配合软件去抖(延迟 10ms)避免误触发。
  • 报警模块
    • 由蜂鸣器(BUZ1)、PNP 三极管(8550)和红色 LED(D1)组成;
    • STM32 通过 PB12 输出高电平时,三极管导通,蜂鸣器发声 + LED 点亮,实现声光报警。
  • 3.5 电路设计:

四、Proteus 仿真实现

1. 实时时间显示仿真

  • 启动 Proteus 仿真后,系统自动初始化 DS1302,LCD 显示当前日期(如 2024-09-26 Wed)和时间(如 15:08:54);
  • 时间每秒自动刷新,星期随日期联动更新(通过代码中RTC_Get_Week函数计算)。

2. 时间设置仿真

  • 按下 “设置时间” 键,LCD 进入设置界面,“>” 符号默认指向年份;
  • 再次按下 “设置时间” 键,“>” 依次切换到月份、日、时、分;
  • 通过 “设置加 / 减” 键调整对应数值(如年份从 2024 增至 2025),调整完成后再次按 “设置时间” 键保存退出。

3. 闹钟功能仿真

  • 按下 “设置闹钟” 键,LCD 显示 “Set Alarm” 界面,“>” 默认指向小时;
  • 调整完成后,当系统时间与闹钟时间(如 17:50)匹配时,蜂鸣器发声 + LED 闪烁,按下 “设置减” 键可关闭报警。

五、核心代码解析

以下为仿真中关键功能的代码片段(基于 STM32 标准库):

c

/**********************************************************************************************/
#include "delay.h"
#include "LCD1602.h" 
#include "key.h"#include "led.h"
#include "ds1302.h"#include "stdio.h" 	
#include "stdlib.h" 	extern _Bool flag_timer;			//定时时间到标志位int main(void)
{	_Bool Alarm = 0;unsigned char key_value = 0;					//按键返回值NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);	//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级Lcd1602_Init();									//液晶1602初始化LED_Init();KEY_Init();										//初始化端口DS1302_Init();  			   					//DS1302初始化KEY_Init();while(1){	DS1302_ReadTime();							//读取DS1302delay_ms(60);		key_value = KEY_Scan(0);		 			//按键单击switch(key_value){case 1:KEY_Set();	break;case 2:BEEP = 1;							//取消报警break;case 4:KEY_Set_Alarm();					//设置闹钟	break;}DS1302_Time();							//显示时钟if(Timer_info.hou == Ahour&&Timer_info.min ==Amin )		//到达闹钟时间{if(Timer_info.sec==0)				//秒钟为0{if(Alarm==0){Alarm = 1;BEEP = 0;					//开报警}}}else{if(Alarm==1){Alarm = 0;BEEP = 1;						//关报警}}}	
}

 另外附赠设计报告如下:

六、总结与展望

本设计通过 Proteus 完成了基于 STM32 的数字闹钟系统仿真,实现了时间显示、设置、闹钟等核心功能,验证了硬件电路与软件逻辑的合理性。后续可扩展温度显示(添加 DS18B20)或蓝牙同步功能,进一步提升实用性。对于嵌入式学习者,该项目是理解 “硬件 + 软件” 协同设计的绝佳案例,建议结合 Proteus 仿真逐步调试代码,加深对 STM32 外设的理解。

如果需要完整仿真工程文件或代码,可留言获取~

http://www.dtcms.com/a/290524.html

相关文章:

  • ASP .NET Core 8高效集成Redis缓存实战
  • C++中的deque容器
  • C#/.NET/.NET Core技术前沿周刊 | 第 47 期(2025年7.14-7.20)
  • 解决vscode中vue格式化后缩进太小的问题,并去除分号 - 设置Vetur tabSize从2到4,设置prettier取消分号semi
  • Hyperledger Fabric V2.5 生产环境部署及安装Java智能合约
  • 从0开始学习R语言--Day53--AFT模型
  • 什么是“差分“?
  • WebkitSpeechRecognition 语音识别
  • 【备忘录】Ubuntu 配置虚拟显示器
  • 嵌入式学习-土堆目标检测(1)-day26
  • 每日数据推荐:一线城市基于手机信令的职住数据
  • 主流监控设备RTSP地址
  • 从env到mm_struct:环境变量与虚拟内存的底层实现
  • Linux 任务调度在进程管理中的关系和运行机制
  • STM32键盘带蓝牙功能
  • 时空数据可视化新范式:基于Three.js的生产全流程时间轴回溯技术解析
  • 首家!数巅AskBI通过中国信通院数据分析智能体专项测试
  • Shell实现服务检查看门程序
  • 实时数据可视化的“心跳”设计:毫秒级延迟下的动态图表抗闪烁优化方案
  • 基于爬虫技术的电影数据可视化系统 Python+Django+Vue.js
  • 我国《数字中国规划》对虚拟产权的监管:合规框架下的渐进式创新
  • 前端开发者快速理解Spring Boot项目指南
  • nav2 基于插件的控制 + pp_controller
  • 机器学习中核心评估指标(准确率、精确率、召回率、F1分数)
  • Node.js的Transform 流
  • iOS打开开发者模式
  • STM32与树莓派通信
  • Elasticsearch、Solr 与 OpenSearch 搜索引擎方案对比分析及选型建议
  • 二分查找-35.搜索插入位置-力扣(LeetCode)
  • 基于NSD8389评估板快速测试电子膨胀阀