51单片机音乐闹钟秒表倒计时整点报时多功能电子钟万年历数码管显示( proteus仿真+程序+原理图+报告+讲解视频)

news2024/11/25 7:33:58

51单片机音乐闹钟秒表倒计时整点报时多功能电子钟万年历数码管显示( proteus仿真+程序+原理图+报告+讲解视频)

  • 讲解视频
  • 1.主要功能:
  • 2.仿真
  • 3. 程序代码
  • 4.原理图
  • 5. 设计报告
  • 6. 设计资料内容清单

51单片机音乐闹钟秒表倒计时整点报时多功能电子钟万年历数码管显示( proteus仿真+程序+原理图+报告+讲解视频)

仿真图proteus7.8及以上

程序编译器:keil 4/keil 5

编程语言:C语言

设计编号:S0053

讲解视频

51单片机音乐闹钟秒表倒计时整点报时多功能电子钟万年历数码管显示( proteus仿真+程序+原理图+报告+讲解视频)

1.主要功能:

基于51单片机的日期时间闹钟秒表倒计时多功能电子钟万年历仿真设计

1、数码管显示当前日期,时间,可以通过按键修改日期时间;

2、设置闹钟时间,时间到播放音乐;

3、具有秒表功能;

4、具有倒计时功能;

5、具有整点报时功能,多少点蜂鸣器响多少次;

6、具备闰年判断功能,设置日期的时候遵守正常大小月规律。

需注意仿真中51单片机芯片是通用的,AT89C51,AT89C52都是51单片机的具体型号,内核是兼容的。相同的原理图里,无论stc还是at都一样,引脚功能都是一样的,程序也是一样的,芯片可以替换为STC89C52/STC89C51/AT89C52/AT89C51等51单片机芯片。

以下为本设计资料展示图:

2.仿真

开始仿真

打开仿真工程,双击proteus中的单片机,选择hex文件路径,然后开始仿真。开始仿真默认进入时间显示模式,显示电脑当前时间。

img

显示时间的情况下,按下设置键进入设置模式,时间指示灯亮。整点会有蜂鸣器报时,多少点就响多少次。

按下设置按键分别设置时钟,分钟和秒钟,设置模式下对应设置的变量会闪烁,方便用户设置。设置到秒钟再按下设置按键退出设置模式。通过按键加和减调整设置的时分秒。

img

通过按下日期按键切换到现实日期模式,数码管显示年月日,日期指示灯亮。

按下设置键进入设置模式,先设置年份,年份闪烁,通过按键加和减完成年份的设置。设置完年份再设置月份,操作同年份调整。再按下设置按键设置日。设置完日期再按下设置键退出设置。

img

通过按下闹钟按键进入闹钟显示模式,闹钟指示灯亮。显示默认闹钟时间16.30。需要修改闹钟时间的话按下设置键,时间闪烁表示设置时钟,再按下表示设置分钟,设置完分钟再按下设置键退出闹钟设置模式。闹钟时间到了会通过蜂鸣器播放闹钟铃声。期间如果想停止闹铃可以按下停止闹铃按键。

img

通过按下闹钟按键进入闹钟显示模式,秒表指示灯亮。开始按键启动秒表计时,暂停按键暂停当前秒表计时并显示计时时间。按下复位键复位计时时间为0。

img

通过按下倒计时按键进入倒计时模式,倒计时指示灯亮。开始按键启动倒计时,暂停按键暂停当前倒计时时间并显示在数码管上。按下复位键复位计时时间为0。

以上仿真结果均符合设计要求。

3. 程序代码

使用keil4或者keil5编译,代码有注释,可以结合报告理解代码含义。

img

  
//主函数
void main()
{
	uchar i=0;

	TMOD=0X11;//定时器0,工作方式1。
	TH0=0XFC;	//定时1ms
	TL0=0X18;
	TH1=(65536-10000)/256;
	TL1=(65536-10000)%256;
	ET1=1;
	TR1=1;	
	ET0=1;//打开定时器0中断允许
	EA=1;//打开总中断
//	Ds1302Init();   //解注释 显示初始时间	2023年9月3日星期天12点00分00秒 可到ds1302.c修改
while(1)
{	
	disp();//显示
	switch(mode)//LED
	{
		case 0:led1=0;led2=1;led3=1;led4=1;led5=1;break;
		case 1:led1=1;led2=0;led3=1;led4=1;led5=1;break;
		case 2:led1=1;led2=1;led3=0;led4=1;led5=1;break;
		case 3:led1=1;led2=1;led3=1;led4=0;led5=1;break;
		case 4:led1=1;led2=1;led3=1;led4=1;led5=0;
	}
	i=key_scan();//按键检测
	if(i==1)//日期
	{
		mode=0;flag=0;
	}
	if(i==2)//时间
	{
		mode=1;flag=0;
	}
	if(i==3)//闹钟
	{
		mode=2;flag=0;
	}
	if(i==4)//秒表
	{
		mode=3;flag=0;
	}
	if(i==5)//倒计时
	{
		mode=4;flag=0;
	}
	if(i==9)//停止响铃
	{
		TR0=0;num=0;
	}
	if(i==6)//设置
	{
		if(mode<2)
		{
		if(flag<3)
			flag++;
		else
			flag=0;
		}
		if(mode==2)
		{
		if(flag<2)
			flag++;
		else
			flag=0;
		}
		if(mode==4)
		{
		if(flag<3)
			flag++;
		else
			flag=0;
		}
	}
	if(i==7)//加
	{
		if(mode==0)//日期设置// ds1302_time[7] = {秒, 分, 时, 日, 月, 星期, 年};
		{
			if(flag==1)	//年
			{
				if(ds1302_time[6]<99)
					ds1302_time[6]++;					
				Ds1302Init();
			}
			if(flag==2)	//月
			{
				if(ds1302_time[4]<12){
					ds1302_time[4]++;
				}else{
					ds1302_time[4] = 1;
				}
									
				Ds1302Init();
			}
			if(flag==3)	//日
			{
				if(ds1302_time[3]<MonthDays(ds1302_time[6],ds1302_time[4])){
					ds1302_time[3]++;//如果日期小于于当前月份最后一天 
				}else{
					ds1302_time[3] = 1;
				}
										
				Ds1302Init();
			}
		}
		if(mode==1)//时间设置
		{
			if(flag==1)	//时
			{
				if(ds1302_time[2]<99)
					ds1302_time[2]++;					
				Ds1302Init();
			}
			if(flag==2)	//分
			{
				if(ds1302_time[1]<59)
					ds1302_time[1]++;					
				Ds1302Init();
			}
			if(flag==3)	//秒
			{
				if(ds1302_time[0]<59)
					ds1302_time[0]++;					
				Ds1302Init();
			}
		}
		if(mode==2)//闹钟设置
		{
			if(flag==1)	//时
			{
				if(shi<23)
					shi++;					
//				At24c02Write(0,shi);
			}
			if(flag==2)	//分
			{
				if(fen<59)
					fen++;					
//				At24c02Write(1,fen);
			}
		}
		if(mode==4)//倒计时设置
		{
			if(flag==1)	//时
			{
				if(shi1<23)
					shi1++;		
			}
			if(flag==2)	//分
			{
				if(fen1<59)
					fen1++;	
			}
			if(flag==3)	//秒
			{
				if(miao1<59)
					miao1++;
			}
		}
	}
	if(i==8)//减
	{
		if(mode==0)//日期设置
		{
			if(flag==1)	//年
			{
				if(ds1302_time[6]>0)
					ds1302_time[6]--;					
				Ds1302Init();
			}
			if(flag==2)	//月
			{
				if(ds1302_time[4]>1){
					ds1302_time[4]--;
				}else{
					ds1302_time[4] = 12;
				}					
				Ds1302Init();
			}
			if(flag==3)	//日
			{
				if(ds1302_time[3]>1){
					ds1302_time[3]--;		
				}else{
					ds1302_time[3] =MonthDays(ds1302_time[6],ds1302_time[4]);//日期从1变为当前月份最后一天 
				}
								
				Ds1302Init();
			}
		}
		if(mode==1)//时间设置
		{
			if(flag==1)	//时
			{
				if(ds1302_time[2]>0)
					ds1302_time[2]--;					
				Ds1302Init();
			}
			if(flag==2)	//分
			{
				if(ds1302_time[1]>0)
					ds1302_time[1]--;					
				Ds1302Init();
			}
			if(flag==3)	//秒
			{
				if(ds1302_time[0]>0)
					ds1302_time[0]--;					
				Ds1302Init();
			}
		}
		if(mode==2)//闹钟设置
		{
			if(flag==1)	//时
			{
				if(shi>0)
					shi--;					
//				At24c02Write(0,shi);
			}
			if(flag==2)	//分
			{
				if(fen>0)
					fen--;					
//				At24c02Write(1,fen);
			}
		}
		if((mode==4)&&(start==0))//倒计时设置
		{
			if(flag==1)	//时
			{
				if(shi1>0)
					shi1--;		
			}
			if(flag==2)	//分
			{
				if(fen1>0)
					fen1--;	
			}
			if(flag==3)	//秒
			{
				if(miao1>0)
					miao1--;
			}
		}
	}
	//倒计时,秒表控制
	if(mode>2)
	{
		if(i==10)//开始
		{
			start=1;
			flag=0;
		}
		if(i==11)//暂停
			start=!start;
		if(i==12)//复位
		{
			start=0;
			fen2=0;miao2=0;haomiao=0;
			shi1=0;fen1=0;miao1=0;
		}
	}
	
}
}

4.原理图

原理图使用AD绘制,可供实物参考。

img

Proteus仿真和实物作品的区别:

1.运行环境:Proteus仿真是在计算机上运行的,而实物则是在硬件电路板上运行。

2.调试方式:在Proteus仿真中,可以方便地进行单步调试和观察变量值的变化,而在实物中则需要通过调试器或者串口输出等方式进行调试。

电路连接方式:在Proteus仿真中,可以通过软件设置进行电路连接的修改,而在实物中则需要通过硬件电路板和连接线进行修改。

3.运行速度:Proteus仿真通常比实物运行速度快,因为仿真是基于计算机运行的,而实物则需要考虑电路板上的物理限制和器件的响应时间等因素。

4.功能实现:在Proteus仿真中,可以通过软件设置实现不同的功能,而在实物中则需要根据电路设计和器件的性能进行实现。

参考元器件清单

元件型号数量
单片机AT89C511
电容10uf1
电容30pf2
晶振12MHZ1
电阻10k1
按钮17
译码器74LS1381
存储器24C021
实时时钟DS13021
LED绿色2
LED黄色2
LED红色3
电阻100欧5
电阻1k1
三极管PNP1
蜂鸣器无源1
数码管8位共阴1
排阻10k1
晶振32.768khz1

5. 设计报告

7027字设计报告,内容包括引言,硬件设计、软件设计、软硬件框图、调试、总结和展望等

img

6. 设计资料内容清单

资料设计资料包括仿真,程序代码、讲解视频、功能要求、设计报告、软硬件设计框图等。

0、常见使用问题及解决方法–必读!!!!

1、仿真图

2、程序源码

3、开题报告

3、原理图

5、功能要求

6、元器件清单

7、设计报告

8、软硬件流程框图

9、讲解视频

Altium Designer 软件资料

filename.bat

KEIL软件资料

Proteus软件资料

单片机学习资料

目录清单.txt

答辩技巧

设计报告常用描述

74HC138(中文资料).pdf

鼠标双击打开查找更多51 STM32单片机课程毕业设计.url

img

资料下载链接(可点击):

https://docs.qq.com/doc/DS0NsTWlHRFRSWmNM

更多资源 点击下方链接:

https://docs.qq.com/sheet/DS0xIa0llTmtNakRW

微信公众号:嘉盛单片机

img

(可点击):

https://docs.qq.com/doc/DS0NsTWlHRFRSWmNM

更多资源 点击下方链接:

https://docs.qq.com/sheet/DS0xIa0llTmtNakRW

微信公众号:嘉盛单片机

[外链图片转存中…(img-KgN9htrx-1695978329675)]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1050725.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Scala第一章节

Scala第一章节 scala总目录 章节目标 理解Scala的相关概述掌握Scala的环境搭建掌握Scala小案例: 做最好的自己 1. Scala简介 1.1 概述 ​ Scala(斯嘎拉)这个名字来源于"Scalable Language(可伸缩的语言)", 它是一门基于JVM的多范式编程语言, 通俗的说: Scala是一…

面向对象【递归方法】

文章目录 递归编写递归函数递归的工作原理常见的递归应用场景递归注意点 递归 递归是一种解决问题的方法&#xff0c;其中一个函数调用自身以解决较小的实例&#xff0c;直到达到基本情况&#xff08;停止条件&#xff09;&#xff0c;然后开始返回结果。递归可以让我们更容易地…

CSS详细基础(五)选择器的优先级

本节介绍选择器优先级&#xff0c;优先级决定了元素最终展示的样式~ 浏览器是通过判断CSS优先级&#xff0c;来决定到底哪些属性值是与元素最为相关的&#xff0c;从而作用到该元素上。CSS选择器的合理组成规则决定了优先级&#xff0c;我们也常常用选择器优先级来合理控制元素…

038:vue页面头部提示低版本浏览器升级问题

第038个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使…

一例疑似MMCore下载器分析

概述 这是一例文件夹病毒&#xff0c;手法相对比较高级&#xff0c;通过域名关联到MMCore样本&#xff0c;可能与印度方向APT组织有关联。 这个病毒使用了分离免杀技术&#xff0c;有2个样本&#xff0c;一个加载器&#xff0c;一个payload。 加载器(文件名为dwm22.exe)的主要…

并发——中断机制

1.中断概述 中断只是一种协商机制&#xff0c;如果要中断一个线程&#xff0c;需要手动调用该线程的interrupt方法&#xff0c;将此线程对象的中断标识设为true(默认中断标志位为false)&#xff0c;接着我们需要手动写代码去不断的检测要中断线程的标识位&#xff0c;如果为tr…

阿木实验室PrometheusV1.1安装+Ubuntu 20.04

1. 安装ros-noetic 2. 安装Mavros包 sudo apt-get install ros-noetic-mavros ros-noetic-mavros-extras3. GeographicLib wget https://raw.githubusercontent.com/mavlink/mavros/master/mavros/scripts/install_geographiclib_datasets.sh这里可以使用代理 &#xff1a;wg…

笔训day1

目录 选择题 1、%m.ns 编程题 第一题 第二题 选择题 1、%m.ns m&#xff1a;字符串的宽度。 n&#xff1a;左起截取目标字符串n个字符&#xff0c;右对齐&#xff0c;补空格。 1、字符串长度>n>m : 受n控制&#xff0c;左起截取n个字符&#xff0c;右对齐&#x…

什么是Times New Roman 字体

如何评价 Times New Roman 字体&#xff1f;&#xff1a;https://www.zhihu.com/question/24614549?sortcreated 新罗马字体是Times New Roman字体&#xff0c;是Office Word默认自带的英文字体之一。 中英文字体 写作中&#xff0c;英文和数字的标准字体为 Times New Roma…

什么是AI客流量算法?如何应用在实际场景中?

客流量分析算法简而言之就是一种利用数据分析和机器学习技术进行人流量统计、预测和分析的算法。它能够根据不同的数据来源&#xff0c;如摄像头、传感器等&#xff0c;对特定区域内的客流量进行实时监测和分析&#xff0c;并通过对历史数据的综合分析&#xff0c;提供客流趋势…

MySQL索引优化,设计原则 及 trace 详解(思维导图)

MySQL版本&#xff1a;8.0.33 MySQL联合索引使用总结&#xff1a;

基于 Python+Django 实现一个电商购物网站系统

随着互联网的高速发展&#xff0c;电子商务行业也正迎来了其黄金时代。如何搭建一个功能完备、体验良好的电商网站成了许多开发者的关心话题。 今天&#xff0c;我将带大家使用Python语言和Django框架&#xff0c;快速打造一个电商购物系统。如果你有一定的Python基础&#xf…

轻松批量重命名:使用编号为文件重新命名,提高工作效率!

如果你经常需要处理大量文件&#xff0c;那么你一定知道给文件重命名是一项多么繁琐的任务。但是&#xff0c;我们今天将为你提供一种简单的方法&#xff0c;可以批量给文件进行重命名&#xff0c;让你轻松提高工作效率 首先我们要进入文件批量改名高手主页面&#xff0c;并在…

px4的gazebo仿真相机模型报错解决办法,返回值256

&#x1f449;事情起因&#xff1a;我想做关于PX4无人机的摄像头仿真&#xff0c;根据PX4的官网文件 Tools/sitl_gazebo文件夹里面有对应的模型可以使用&#xff0c;我就想在mavros_posix_sitl文件里面修改vehicle参数&#xff0c;比如直接将vehicle“iris_stereo_camera”。然…

C++核心编程--对象篇

4.2、对象 4.2.1、对象的初始化和清理 用于对对象进行初始化设置&#xff0c;以及对象销毁前的清理数据的设置。 构造函数和析构函数 防止对象初始化和清理也是非常重要的安全问题 一个对象或变量没有初始化状态&#xff0c;对其使用后果是未知的同样使用完一个对象或变量&…

【Java 进阶篇】MySQL 多表查询详解

MySQL 是一个强大的关系型数据库管理系统&#xff0c;多表查询是数据库操作中的重要部分之一。多表查询允许您从多个表中检索和操作数据&#xff0c;以满足复杂的数据需求。本文将介绍 MySQL 多表查询的基本概念、语法和示例&#xff0c;以及一些常见的多表查询场景。 什么是多…

PC版企业微信逆向之消息发送CALL-找不到参数文本消息内容,但是确定这就是消息发送CALL

现在遇到的问题是消息内容-如何查看通过esi里面的消息内容&#xff0c;找不到有效的 找不到参数文本消息内容&#xff0c;但是确定这就是消息发送CALL 消息发送call特征码为8d 47 08 50 56 e8 ?? ?? ?? ?? 8b 07 //消息发送CALL如下 **02852932 8B07 mov eax,dword ptr…

进度条程序的编写

目录 回车换行和换行的区别 倒计时程序 进度条程序 进度条代码的优化 version2 进度条代码的优化version3 在编写进度条程序之前我们需要先了解一个概念&#xff1a;回车换行和换行的区别。 回车换行和换行的区别 刚听到的时候会很好奇&#xff0c;回车换行和换行有什么区别吗&…

【数据结构】树、二叉树的概念和二叉树的顺序结构及实现

目录 前言&#xff1a;一、树的概念及结构1.树的概念2.树的相关概念3.树的存储4.树在实际中的运用 二、二叉树概念及结构1.概念2.特殊的二叉树&#xff08;1&#xff09;满二叉树&#xff08;2&#xff09;完全二叉树 3.二叉树的性质4.二叉树的存储(1)顺序存储(2)链式存储 三、…

山西电力市场日前价格预测【2023-09-30】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-09-30&#xff09;山西电力市场全天平均日前电价为267.99元/MWh。其中&#xff0c;最高日前电价为485.05元/MWh&#xff0c;预计出现在18: 45。最低日前电价为0.00元/MWh&#xff0c;预计出…