基于51单片机的数字电子钟设计(二)

1、简介
基于51单片机的电子时钟系统。该系统由单片机系统、数码管显示系统、键盘、蜂鸣器等组成,通过单片机自身的定时计数器溢出标志产生最小计时单元,经过变量的累加和判断后,将数据送入数码显示屏显示。通过按键来控制单片机实现数字时钟的时分秒、闹钟等功能,并通过P0口的输出在数码管上显示。

2、主要功能
a.通过数码管显示时分秒、闹钟,初始状态:11:59:50。

b.通过独立按键设置时和分、闹钟。

c.通过蜂鸣器显示闹钟状态。

3、环境搭建
资料清单:C程序+仿真+设计报告+使用说明+元件清单+操作视频
仿真版本:Proteus8.6及以上版本
编译平台:Keil C51
编程语言:C语言

4、源程序
使用keil C51软件(内附安装包)实现程序编写与编译。

#include<reg52.h> 
unsigned char led[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00};  //用一维数组定义0-9、横杠、全灭 
unsigned char a[8];     
unsigned char second=50,minute=59,hour=11; 
unsigned char minute1=0,hour1=12; 
unsigned char b[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //扫描 
unsigned char k=0; unsigned int temp;   // 记录毫秒为秒的变量 
unsigned char M,S_flag; //M是模式,更新时间的种模式加上正常模式 S_flag闪烁标志 
sbit K1=P1^0; 
sbit K2=P1^1; 
sbit K3=P1^2; 
sbit BEEP=P3^3; 
void delay(unsigned n)       //0.2毫秒 
{  
int x,y;   
for(x=0;x<n;x++)   
for(y=0;y<24;y++);
 }  
void time1()
interrupt 3   //定时器中断函数
{    
TH1=0xfc;     //定时ms    
TL1=0x18;    
temp++;    
if(temp==1000)   //配合定时器定时s   
{  
temp=0;  
second++;    
}  
if(second==59)  
{  
second=0;   
if(minute<59)  
minute++;  
else       
{ 
minute=0;   
hour++;   
hour%=24;      
} 
}    
if(hour1==hour&&minute1==minute&&second<5)    //闹钟时间到    
{ 
if(M==0)    
BEEP=!BEEP;    
}      
if(temp%250==0)            //每ms        
S_flag=!S_flag;       //闪烁标志位取反     
if(k==8)  
k=0;   
P0=a[k];     
P2=b[k++];       
delay(1);     
P2=0xff;   
}        
void display() 
{  
switch(M)  
{  
case 0:   
{    
a[0]=led[hour/10];    
a[1]=led[hour%10];    
a[2]=led[10];    
a[3]=led[minute/10];    
a[4]=led[minute%10];    
a[5]=led[10];    
a[6]=led[second/10];    
a[7]=led[second%10];   
}
break;  
case 1:   
{    
if(S_flag==1)    
{     
a[0]=led[hour/10];     
a[1]=led[hour%10];    
}    
else    
{ 
a[0]=led[11];   
a[1]=led[11];    
}    
a[2]=led[10];    
a[3]=led[minute/10];    
a[4]=led[minute%10];    
a[5]=led[10];    
a[6]=led[second/10];   
a[7]=led[second%10];   
}
break;  
case 2:
{    
a[0]=led[hour/10];    
a[1]=led[hour%10];    
a[2]=led[10];   
if(S_flag==1)    
{     
a[3]=led[minute/10];     
a[4]=led[minute%10];    
}    
else    
{     
a[3]=led[11];     
a[4]=led[11];    
}    
a[5]=led[10];    
a[6]=led[second/10];    
a[7]=led[second%10];   
}
break;  
case 3:   
{    
if(S_flag==1)    
{     
a[0]=led[hour1/10];     
a[1]=led[hour1%10];    
}    
else    
{     
a[0]=led[11];     
a[1]=led[11];    
}    
a[2]=led[10];    
a[3]=led[minute1/10];   
a[4]=led[minute1%10]; 
a[5]=led[11];    
a[6]=led[11];    
a[7]=led[11];   
}break;  
case 4:   
{    
a[0]=led[hour1/10];    
a[1]=led[hour1%10];   
a[2]=led[10];    
if(S_flag==1)    
{     
a[3]=led[minute1/10];     
a[4]=led[minute1%10];    
}    
else    
{     
a[3]=led[11];     
a[4]=led[11];    
}    
a[5]=led[11];   
 a[6]=led[11];    
a[7]=led[11];   
}  
}
}    

5、proteus8.6仿真
采用proteus8.6软件(内附安装包)实现仿真设计,如下图所示。proteus软件一般存在高低版本兼容问题,该仿真是通过proteus8.6导出的,所以请尽量使用proteus8.6打开文件,低于proteus8.6的版本不能够正常使用,高于proteus8.6的版本除了proteus8.8/8.9理论上可以正常使用。

初始界面:
在这里插入图片描述
闹钟设置:
在这里插入图片描述

6、设计资料清单
设计资料主要包括C程序+仿真+设计报告+使用说明+元件清单+操作视频等,设计报告主要包括硬件电路、软件设计、仿真调试等等,仅供参考。由于不定期更新,最新的资料包不一定与下面图片完全一致,但主要资料都有。
在这里插入图片描述

在这里插入图片描述

7、资料获取方式
II05下载链接1:百度网盘(推荐)
II05下载链接2:优快云免积分
有偿,非诚勿扰🙏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值