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

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

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文件路径,然后开始仿真。开始仿真默认进入时间显示模式,显示电脑当前时间。

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

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

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

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

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

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

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

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

3. 程序代码

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

c 复制代码
  
//主函数
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绘制,可供实物参考。

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

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

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

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

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

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

参考元器件清单

元件 型号 数量
单片机 AT89C51 1
电容 10uf 1
电容 30pf 2
晶振 12MHZ 1
电阻 10k 1
按钮 17
译码器 74LS138 1
存储器 24C02 1
实时时钟 DS1302 1
LED 绿色 2
LED 黄色 2
LED 红色 3
电阻 100欧 5
电阻 1k 1
三极管 PNP 1
蜂鸣器 无源 1
数码管 8位共阴 1
排阻 10k 1
晶振 32.768khz 1

5. 设计报告

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

6. 设计资料内容清单

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

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

1、仿真图

2、程序源码

3、开题报告

3、原理图

5、功能要求

6、元器件清单

7、设计报告

8、软硬件流程框图

9、讲解视频

Altium Designer 软件资料

filename.bat

KEIL软件资料

Proteus软件资料

单片机学习资料

目录清单.txt

答辩技巧

设计报告常用描述

74HC138(中文资料).pdf

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

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

更多资源 点击下方链接:

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

相关推荐
小屁孩大帅-杨一凡2 小时前
Python-flet实现个人视频播放器
开发语言·python·音视频
EasyCVR5 小时前
私有化部署视频平台EasyCVR宇视设备视频平台如何构建视频联网平台及升级视频转码业务?
大数据·网络·音视频·h.265
天空中的野鸟5 小时前
Android音频采集
android·音视频
计算机毕设孵化场6 小时前
计算机毕设-基于springboot的高校网上缴费综合务系统视频的设计与实现(附源码+lw+ppt+开题报告)
java·spring boot·计算机外设·音视频·课程设计·高校网上缴费综合务系统视频·计算机毕设ppt
兰_博9 小时前
51单片机-独立按键与数码管联动
单片机·嵌入式硬件·51单片机
-一杯为品-10 小时前
【51单片机】程序实验5&6.独立按键-矩阵按键
c语言·笔记·学习·51单片机·硬件工程
简鹿办公13 小时前
如何提取某站 MV 视频中的音乐为 MP3 音频
音视频·简鹿视频格式转换器·视频提取mp3音频
yufengxinpian13 小时前
集成了高性能ARM Cortex-M0+处理器的一款SimpleLink 2.4 GHz无线模块-RF-BM-2340B1
单片机·嵌入式硬件·音视频·智能硬件
runing_an_min15 小时前
ffmpeg视频滤镜:替换部分帧-freezeframes
ffmpeg·音视频·freezeframes
runing_an_min17 小时前
ffmpeg视频滤镜:提取缩略图-framestep
ffmpeg·音视频·framestep