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

基于 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.xdnf.cn/news/15921.html

相关文章:

  • JavaWeb笔记四
  • 【VASP】VASP 机器学习力场(MLFF)实战
  • 超越基于角色的手术领域建模:手术室中的可泛化再识别|文献速递-医学影像算法文献分享
  • 神经网络——非线性激活
  • 深入解析 SymPy 中的符号计算:导数与变量替换的实践指南
  • 【设计模式】观察者模式 (发布-订阅模式,模型-视图模式,源-监听器模式,从属者模式)
  • OpenEuler 22.03 系统上安装配置gitlab runner
  • 基于Python的多传感器融合的障碍物检测与避障演示
  • Jetpack ViewModel LiveData:现代Android架构组件的核心力量
  • 【Vue进阶学习笔记】实现图片懒加载
  • k8s的calico无法启动报错解决
  • Docker实践:使用Docker部署blog轻量级博客系统
  • 【Java + Vue 实现图片上传后 导出图片及Excel 并压缩为zip压缩包】
  • 【跨国数仓迁移最佳实践2】MaxCompute SQL执行引擎对复杂类型处理全面重构,保障客户从BigQuery平滑迁移
  • IDEA 同时修改某个区域内所有相同变量名
  • 深入解析IP协议:组成、地址管理与路由选择
  • Freemarker实现下载word可能遇到的问题
  • docker--挂载
  • 深入解析:如何在Kafka中配置Source和Sink连接器构建高效数据管道
  • 【Linux指南】Linux系统 -权限全面解析
  • 万界星空科技锂电池MES解决方案
  • 移星科技 modbus-tcp 转 modbus-Rtu模块
  • CMakeLists.txt 中一些最常见和核心的命令
  • AG32 cpld部分bin的烧录
  • 20250721
  • .NET依赖注入IOC你了解吗?
  • 14.6 《3步实战LLaMA2-7B指令微调:Hugging Face生态+LoRA技术,MT-Bench得分从5.1直升7.3》
  • 基于爬虫技术的电影数据可视化系统 Python+Django+Vue.js
  • C# 集合(Collection)
  • Playwright-MCP浏览器会话复用全解析