基于STM32电子钟闹钟数码管显示设计
基于STM32电子钟闹钟数码管显示设计(Proteus仿真+程序+设计报告+原理图PCB+讲解视频)
仿真图proteus 8.9
程序编译器:keil 5
编程语言:C语言
设计编号:C0104
1.主要功能
设计一个基于STM32单片机的电子钟闹钟proteus仿真设计,可以显示时、分、秒,并且可以设置时间和闹钟。
1、采用单片机内部RTC模块实现计时;
2、采用八位数码管显示时分秒;
3、可对时分秒分别进行加减设置,设置时对应数码管闪烁;
4、可设置闹钟,并且到时间后蜂鸣器响;
5、闹钟鸣响时,按下任意按键可手动消除闹钟;
6、可以通过Proteus仿真或者实物演示。
资料下载链接:
通过网盘分享的文件:KEY_C0104
链接: https://pan.baidu.com/s/1iKdIqVMCHvNg0642rKrteA?pwd=vtrf
提取码: vtrf
2.仿真设计
打开仿真工程,双击proteus中的单片机,选择hex文件路径,然后开始仿真。
开始仿真后,数码管显示12-00-50,分别代表时分秒。

默认闹钟时间12-01-00,时间到了之后闹钟响,指示灯亮。响铃期间按下任意按键关掉闹钟。

按下设置键可对时分秒分别进行加减设置,设置时对应数码管闪烁。

3.程序设计
程序是用keil5 mdk版本打开的,如果打开有问题,核实下keil的版本。程序是HAL版本编写的,有stm32cubemx配置文件。有注释可以结合讲解视频理解。

c
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
if(step==0){
//十进制格式
HAL_RTC_GetTime(&hrtc, &sTimeStructure, RTC_FORMAT_BIN); //RTC时间获取函数
//十进制格式
HAL_RTC_GetDate(&hrtc, &sDateStructure, RTC_FORMAT_BIN); //RTC日期获取函数
if( (sTimeStructure.Hours == sAlrmStructure.Hours) && (sTimeStructure.Minutes == sAlrmStructure.Minutes)&&(sTimeStructure.Seconds==0))//判断闹钟时间
{
beep_state=1;//闹钟标志位
LED_ALARM_STA_ON();
}
if( (sTimeStructure.Hours != sAlrmStructure.Hours) || (sTimeStructure.Minutes != sAlrmStructure.Minutes)){
beep_state=0;//取消闹钟标志位
}
if(beep_state==1){
BEEP_ON(); //蜂鸣器响
LED_ALARM_STA_ON();//指示灯亮
}else{
BEEP_OFF(); //关蜂鸣器
LED_ALARM_STA_OFF();//指示灯灭
}
//格式转换为字符串
memset(smgbuf, 0, sizeof(smgbuf));//清空数组
smgbuf[0]=gsmg_code[sTimeStructure.Hours/10];//时间十位
smgbuf[1]=gsmg_code[sTimeStructure.Hours%10];//时间个位
smgbuf[2]=0x40;
smgbuf[3]=gsmg_code[sTimeStructure.Minutes/10];//分钟十位
smgbuf[4]=gsmg_code[sTimeStructure.Minutes%10];//分钟个位
smgbuf[5]=0x40;
smgbuf[6]=gsmg_code[sTimeStructure.Seconds/10];//显示秒十位
smgbuf[7]=gsmg_code[sTimeStructure.Seconds%10];//显示个位
SMG_Display(smgbuf,1);
// HAL_Delay(10);//延时一段时间,等待显示稳定
}else{//设置状态下的显示
memset(smgbuf, 0, sizeof(smgbuf));//清空数组
if(step>=1&&step<=3){//设置时钟时间
if(step==1&&flick_cnt<50){
}else{
smgbuf[0]=gsmg_code[sTimeStructure.Hours/10];//时间十位
smgbuf[1]=gsmg_code[sTimeStructure.Hours%10];//时间个位
}
smgbuf[2]=0x40;//显示横杠
if(step==2&&flick_cnt<50){
}else{
smgbuf[3]=gsmg_code[sTimeStructure.Minutes/10];//分钟十位
smgbuf[4]=gsmg_code[sTimeStructure.Minutes%10];//分钟个位
}
smgbuf[5]=0x40;//显示横杠
if(step==3&&flick_cnt<50){
}else{
smgbuf[6]=gsmg_code[sTimeStructure.Seconds/10];//显示秒十位
smgbuf[7]=gsmg_code[sTimeStructure.Seconds%10];//显示个位
}
SMG_Display(smgbuf,1);
// HAL_Delay(10);//延时一段时间,等待显示稳定
}else if(step>=4){//设置闹钟时间
if(step==4&&flick_cnt<50){
}else{
smgbuf[0]=gsmg_code[sAlrmStructure.Hours/10];//闹钟时十位
smgbuf[1]=gsmg_code[sAlrmStructure.Hours%10];//闹钟时个位
}
smgbuf[2]=0x40;//显示横杠
if(step==5&&flick_cnt<50){
}else{
smgbuf[3]=gsmg_code[sAlrmStructure.Minutes/10];//闹钟分钟十位
smgbuf[4]=gsmg_code[sAlrmStructure.Minutes%10];//闹钟分钟个位
}
SMG_Display(smgbuf,1);
// HAL_Delay(5);//延时一段时间,等待显示稳定
}
}
}
/* USER CODE END 3 */
}
程序流程图

4.设计报告
8272字设计报告,内容包括设计目标、硬件设计、软件设计、结论等。

随着电子技术的飞速发展,智能家居和便携式电子设备的需求日益增长,数字时钟作为日常生活中不可或缺的一部分,其功能性和用户体验成为用户关注的重点。本项目旨在设计一款基于STM32单片机的多功能数字时钟闹钟,通过Proteus软件进行仿真设计,实现时间显示、时间设置、闹钟设置及响铃提醒等功能,不仅提升了时钟的基本计时功能,还增加了用户交互性和实用性,对于学习STM32单片机应用、RTC(实时时钟)模块使用以及Proteus仿真技术具有重要意义。
5.原理图PCB
下面是原理图和PCB


6.实物图
实物如下图所示

7.下载链接

0、常见使用问题及解决方法--必读!!!!
1、程序代码
2、Proteus仿真
3、功能要求
4、开题报告
5、设计报告
6、框图
7、讲解视频
Altium Designer 安装破解
KEIL+proteus 单片机仿真设计教程
KEIL安装破解
Proteus元器件查找
Proteus安装
Proteus简易使用教程
单片机学习资料
相关数据手册
答辩技巧
设计报告常用描述
鼠标双击打开查找嘉盛单片机51 STM32单片机课程毕业设计.url
资料下载链接:
通过网盘分享的文件:KEY_C0104
链接: https://pan.baidu.com/s/1iKdIqVMCHvNg0642rKrteA?pwd=vtrf提取码: vtrf
更多资源 点击下方链接:
https://docs.qq.com/sheet/DS0xIa0llTmtNakRW
单片机学习资料
相关数据手册
答辩技巧
设计报告常用描述
鼠标双击打开查找嘉盛单片机51 STM32单片机课程毕业设计.url
资料下载链接:
通过网盘分享的文件:KEY_C0104
链接: https://pan.baidu.com/s/1iKdIqVMCHvNg0642rKrteA?pwd=vtrf提取码: vtrf