Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于单片机的电子时钟设计(keil+protues仿真,含代码及原理图)

基于单片机的电子时钟设计(keil+protues仿真,含代码及原理图)

作者头像
全栈程序员站长
发布于 2022-09-14 23:56:23
发布于 2022-09-14 23:56:23
4.7K20
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

本学期单片机课程要求做课程设计,我选取的课题如下: 基于单片机的电子时钟设计,要求: (1)实时显示当前时间; (2)能够对时间进行设置; (3)包括年月日,小时,分钟,秒. (4)整点提醒功能. 经过一周的时间已实现上述功能,故在此分享一下;

所选用器材 单片机最小系统(这就不用细说了吧,这里我选用AT89C51),排阻,四个按钮开关,8位共阴数码管,蜂鸣器;

protues仿真电路原理图

注:P1^1引脚接的是蜂鸣器,但是因为单片机的引脚输出太低,不能驱动蜂鸣器,所以需通过三极管放大电流从而驱动蜂鸣器正常工作,当引脚输出为低电平时分蜂鸣器响,同时对元件参数做些设置——蜂鸣器工作电压设置为2V即可,三极管前电阻阻值通常设置为1K即可

接下来直接放代码,注释写的也很清楚了,就不描述了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<reg51.h>
#define uChar unsigned char
#define uInt unsigned int
uChar a[10]={ 
   0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; 
uChar b[8]={ 
   0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; 
uChar second=50,minute=59,hour=12,year=18,month=07,day=21,count;
sbit Key1 = P3^0; //计时停止
sbit Key2 = P3^1; //调位
sbit Key3 = P3^2; //加一 
sbit Key4 = P3^3; //切换 
sbit Buzzer=P1^1;
/*********************延迟函数********************/
void Delay(uInt t)
{ 
   
while(t)
{ 
   
t--;
}
}
/*********************时分秒显示函数*******************/ 
void Dispaly1(uChar second,uChar minute,uChar hour)
{ 
   
/*********************第一位数码管*********************/
P2=b[0];
P0=a[hour/10];
Delay(10);
/*********************第二位数码管*********************/
P2=b[1];
P0=a[hour%10];
Delay(10);
/*********************第三位数码管*********************/
P2=b[2]; 
P0=0x40; 
Delay(10);
/*********************第四位数码管*********************/
P2=b[3]; 
P0=a[minute/10]; 
Delay(10);
/*********************第五位数码管*********************/
P2=b[4];
P0=a[minute%10]; 
Delay(10);
/*********************第六位数码管*********************/
P2=b[5]; 
P0=0x40; 
Delay(10);
/*********************第七位数码管*********************/
P2=b[6]; 
P0=a[second/10]; 
Delay(10);
/*********************第八位数码管*********************/
P2=b[7];; 
P0=a[second%10]; 
Delay(10);
}
/*********************年月日显示函数********************/
void Dispaly2(uChar day,uChar month,uChar year)
{ 
   
P2=b[0];
P0=a[day/10];
Delay(10);

P2=b[1];
P0=a[day%10];
Delay(10);

P2=b[2]; 
P0=0x40; 
Delay(10);

P2=b[3]; 
P0=a[month/10]; 
Delay(10);

P2=b[4]; 
P0=a[month%10]; 
Delay(10);

P2=b[5]; 
P0=0x40; 
Delay(10);

P2=b[6]; 
P0=a[year/10]; 
Delay(10);

P2=b[7]; 
P0=a[year%10]; 
Delay(10);
}
/*********************时钟按键扫描函数*********************/
void Keyscan1()
{ 
   
static uChar i=0,j=0; 
if(Key1==0) 
{ 
   
Delay(10); //消抖 
if(Key1==0) 
while(!Key1); //等待按键弹
i++;
}
/*时钟暂停功能*/
if(i%2==1) 
{ 
   
TR0=0;/*如果是奇数次按键自然关闭定时器0*/
}
if(i%2==0)
{ 
   
TR0=1;/*如果是偶数次按键则打开定时器0*/ 
}
/*时钟调位和数值加一功能*/
if(Key2==0) 
{ 
   
Delay(10); 
if(Key2==0)
while(!Key2);
j++; 
}
if(j%4==1)
{ 
   
if(Key3==0)
{ 
   
Delay(10); 
if(Key3==0)
while(!Key3);
second++;
if(second==60)
second=0;
}
}
if(j%4==2)
{ 
   
if(Key3==0)
{ 
   
Delay(10); 
if(Key3==0)
while(!Key3);
minute++;
if(minute==60)
minute=0; 
}
}
if(j%4==3)
{ 
   
if(Key3==0)
{ 
    
Delay(10); 
if(Key3==0)
while(!Key3);
hour++;
if(hour==24)
hour=0; 
}
}
}
/*日期按键扫描函数*/
void Keyscan2()
{ 
   
static uChar m=0,n=0; 
if(Key1==0) 
{ 
   
Delay(10); 
if(Key1==0)
while(!Key3);
m++;
}
if(m%2==1) 
{ 
   
TR0=0;/*奇数次按键则关闭定时器0*/
}

if(m%2==0)
{ 
   
TR0=1;/*偶数次按键则打开定时器0*/ 
}
if(Key2==0) 
{ 
   
Delay(10); 
if(Key2==0)
while(!Key2);
n++; 
}
/*日期调位和日期加一功能*/
if(n%4==1)
{ 
   
if(Key3==0)
{ 
   
Delay(10); 
if(Key3==0)
while(!Key3);
day++;
if(day==30)
day=0;
}
}
if(n%4==2)
{ 
   
if(Key3==0)
{ 
    
Delay(10); 
if(Key3==0)
while(!Key3);
month++;
if(month==12)
month=0; 
}
}
if(n%4==3)
{ 
   
if(Key3==0)
{ 
    
Delay(10); 
if(Key3==0)
while(!Key3);
year++;
if(year==99)
year=0; 
}
}
}

/************************************************/
/***************主函数***************************/
/************************************************/
void main()
{ 
   						
TMOD=0x01; 	 /*定时器以方式一工作*/
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;/*10ms计时*/
EA=1;
ET0=1;/*允许定时器0中断*/
TR0=1;/*打开定时器0*/
while(1)
{ 
   
static uChar h=0;
/*时钟和日期切换功能*/ 
if(Key4==0) 
{ 
   
Delay(10); 
if(Key4==0)
while(!Key4);
h++;
}
if(h%2==0)/*如果按键偶数次则显示时钟*/
{ 
   
Dispaly1(second,minute,hour);
Keyscan1(); 
}

if(h%2==1)/*如果按键奇数次则显示日期*/ 
{ 
   
Dispaly2(year,month,day);
Keyscan2();
}
}
}
/**********************中断函数**************************/
void time0_int(void) interrupt 1
{ 
   
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
count++;
if(count==100)/*10ms??ê±£???100′??ò??o?1s*/
{ 
   
count=0;
second++;
if(second==60)
{ 
   
second=0;
minute++;
if(minute==60)
{ 
   
minute=0;
hour++;
if(hour==24)
{ 
   
hour=0;
day++;
if(day==30)
{ 
   
day=0;
month++;
if(month==12)
{ 
   
month=0;
year++;
if(year==99)
{ 
   
year=0;
}
}
}
}
}
}
}
/*判断整点提醒*/
if(second==00&&minute==00)								   
Buzzer=0;
else
Buzzer=1;
}

最后实现的效果 时间显示:

日期显示:

具体功能通过4个按钮实现

注意!

实际仿真中数码管显示可能会不稳定,具体原因已排除代码问题,通过实验把蜂鸣器换成发光二极管后显示正常,但是换为蜂鸣器后显示就会不稳定;所以猜测可能是仿真电路的问题或者软件bug,上实物后应该不会出现这种情况

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/154075.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
2 条评论
热度
最新
good
good
回复回复点赞举报
你好,怎么在这个基础上添加闹钟功能
你好,怎么在这个基础上添加闹钟功能
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
【计网不挂科】计算机网络期末考试——【选择题&填空题&判断题&简述题】题库(1)
A.无须预约传输带宽,动态逐段利用传输带宽对突发式数据通信效率高,通信迅速。 B.端对端通信质量因约定了通信资源获得可靠保障,对连续传送大量数据效率高。 C.包括数据报和虚电路两种方式. D.具有报文交换之高效、迅速的要点,且各分组小,路由灵活网络生存性能好。
YY的秘密代码小屋
2024/11/04
2530
【计网不挂科】计算机网络期末考试(综合)——【选择题&填空题&判断题&简述题】完整题库
A.无须预约传输带宽,动态逐段利用传输带宽对突发式数据通信效率高,通信迅速。 B.端对端通信质量因约定了通信资源获得可靠保障,对连续传送大量数据效率高。 C.包括数据报和虚电路两种方式. D.具有报文交换之高效、迅速的要点,且各分组小,路由灵活网络生存性能好。
YY的秘密代码小屋
2024/11/09
6980
计算机网络期末复习题
5、局域网与广域网之间的区别不仅在于它们所能覆盖的地理范围不同,而且还在于它们_______不同。
风骨散人Chiam
2021/09/06
3.8K0
【计网不挂科】计算机网络期末考试——【选择题&填空题&判断题&简述题】题库(2)
A.只有点对点信道 B.只有广播信道 C.点对点信道和广播信道 D.以上说法都不对
YY的秘密代码小屋
2024/11/05
1430
【计网不挂科】计算机网络期末考试中常见【选择题&填空题&判断题&简述题】题库(3)
A.在IP数据报的前后添加上首部和尾部,构成了完整的帧 B.帧长等于IP数据报长度加上帧首部和帧尾部的长度 C.首部和尾部只是为了凑成一个完整的帧,没有实际用处 D.发送帧时,从帧的首部开始发送
YY的秘密代码小屋
2024/11/06
1280
【计网不挂科】计算机网络期末考试(综合)——【选择题&填空题&判断题&简述题】完整试卷
【1】下列有关电路交换的说法正确的是( ) A.无须预约传输带宽,动态逐段利用传输带宽对突发式数据通信效率高,通信迅速。 B.端对端通信质量因约定了通信资源获得可靠保障,对连续传送大量数据效率高。 C.包括数据报和虚电路两种方式. D.具有报文交换之高效、迅速的要点,且各分组小,路由灵活网络生存性能好。
YY的秘密代码小屋
2024/11/09
2230
【计网不挂科】计算机网络期末考试——【选择题&填空题&判断题&简述题】试卷(2)
一.选择题 【1】以下传输媒体中,不属于导向传输媒体的是() A.双绞线 B. 同轴电缆 C.光缆 D.微波
YY的秘密代码小屋
2024/11/09
1080
【计网不挂科】计算机网络期末考试——【选择题&填空题&判断题&简述题】试卷(3)
一.选择题 【1】关于数据链路层的帧,以下说法不正确的是( ) A.在IP数据报的前后添加上首部和尾部,构成了完整的帧 B.帧长等于IP数据报长度加上帧首部和帧尾部的长度 C.首部和尾部只是为了凑成一个完整的帧,没有实际用处 D.发送帧时,从帧的首部开始发送
YY的秘密代码小屋
2024/11/09
1980
计算机网络总结-一本书一个晚上一个奇迹
在 IP 地址面加上一个斜线“/”,然后写上网络前缀所占的位数。 全1广播地址,全0网络地址
唔仄lo咚锵
2021/09/14
3K0
计算机网络总结-一本书一个晚上一个奇迹
计算机网络期末考试题库(超级多的那种)「建议收藏」
你好,我是罡罡同学! 代码谱第一页忘掉心上人,最后一页。。。。。。 废话不多说,不管是应对期末考试还是考研基础复习,刷题是必不可少的!!! 大家冲就完了!!!! 记得给 罡罡同学点关注哦! 后期还会更新其他题库的呢!!! 另外还有4套模拟题哦!!!
全栈程序员站长
2022/09/07
11.1K0
计算机网络期末考试题库(超级多的那种)「建议收藏」
【计网不挂科】计算机网络期末考试——【选择题&填空题&判断题&简述题】试卷(4)
一.选择题 【1】在查找路由表时,可能会得到不止一个匹配结果,使得路由器不知道如何转发。解决的办法是:从匹配结果中选择具有最长网络前缀的路由,按此路由进行转发,这种做法叫做() A.最短前缀匹配 B.最长前缀匹配 C.最少前缀匹配 D.最小前缀匹配
YY的秘密代码小屋
2024/11/09
1340
计算机网络体系结构及其简单通信技术_简述计算机网络体系结构的概念
我们知道,通信的目的是快速、有效地传递信息。下面我们先来简单地介绍一点通信的基本知识: 现代信息的表达方式有文字、符号、声音、图像数据等多种形式。为了实现信息传递,通常以光、电等信号作为信息的载体。
全栈程序员站长
2022/09/29
1.1K0
【计网不挂科】计算机网络期末考试中常见【选择题&填空题&判断题&简述题】题库(4)
A.IP 分组可以被源主机分片,并在中间路由器进行重组 B.IP 分组可以被路径中的路由器分片,并在目的主机进行重组 C.IP 分组可以被路径中的路由器分片,并在中间路由器进行重组 D.IP 分组可以被路径中的路由器分片,并在最后一条路由器上进行重组
YY的秘密代码小屋
2024/11/06
3850
思科 计算机网络 期末考试答案
1.以下哪个域名是顶级域的一个示例? A.root.cisco.com B.www.cisco.com C.cisco.com D…com
全栈程序员站长
2022/09/15
1.5K0
大学课程 | 计算机网络
2.互连网:网络之间通过路由器互连起来,就构成了一个覆盖范围更大的计算机网络,因此互连网是“网络中的网络” 3.网络:网络把许多计算机连接在一起,而互连网则把许多网络通过路由器连接在一起。与网络相连的计算机称为主机。 4.计算机网络的三种定义:
Justlovesmile
2021/12/14
9340
大学课程 | 计算机网络
【期末考试】计算机网络、网络及其计算 考试重点
数字通信的优点: 抗干扰性强、保密性好、设备易于集成化、便于使用计算机技术对其进行处理等。
.29.
2023/12/25
4110
【期末考试】计算机网络、网络及其计算 考试重点
计算机网络
因特网现已发展成为世界上最大的国际性计算机互联网,网络(network)由若干结点(node)和连接这些结点的链路(link)组成。 互联网是“网络的网络”(network of networks)。 连接在因特网上的计算机都称为主机(host)网络把许多计算机连接在一起。因特网把许多网络连接在一起。
十二惊惶
2024/02/28
1560
计算机网络
从零开始的计网学习——计算机网络概述(计网入门就看这篇!)
以上都是本从零开始系列的计网学习其他几个章节,各位想学习计网的其他内容的可以关注一下。
全栈程序员站长
2022/09/02
5840
从零开始的计网学习——计算机网络概述(计网入门就看这篇!)
【计网不挂科】计算机网络第三章< 数据链路层 >习题库(含答案)
A、数据链路层 物理层 B、物理层 物理层 C、数据链路层 数据链路层 D、物理层 数据链路层 答案: B
YY的秘密代码小屋
2024/11/14
1980
大二逃课总结的1.2w字的计算机网络知识!扫盲!
本文是我在大二学习计算机网络期间整理, 大部分内容都来自于谢希仁老师的《计算机网络》这本书。为了内容更容易理解,我对最初整理的内容简单进行了一波重构,并配上了一些相关的示意图便于理解。
Guide哥
2020/10/30
5230
大二逃课总结的1.2w字的计算机网络知识!扫盲!
推荐阅读
【计网不挂科】计算机网络期末考试——【选择题&填空题&判断题&简述题】题库(1)
2530
【计网不挂科】计算机网络期末考试(综合)——【选择题&填空题&判断题&简述题】完整题库
6980
计算机网络期末复习题
3.8K0
【计网不挂科】计算机网络期末考试——【选择题&填空题&判断题&简述题】题库(2)
1430
【计网不挂科】计算机网络期末考试中常见【选择题&填空题&判断题&简述题】题库(3)
1280
【计网不挂科】计算机网络期末考试(综合)——【选择题&填空题&判断题&简述题】完整试卷
2230
【计网不挂科】计算机网络期末考试——【选择题&填空题&判断题&简述题】试卷(2)
1080
【计网不挂科】计算机网络期末考试——【选择题&填空题&判断题&简述题】试卷(3)
1980
计算机网络总结-一本书一个晚上一个奇迹
3K0
计算机网络期末考试题库(超级多的那种)「建议收藏」
11.1K0
【计网不挂科】计算机网络期末考试——【选择题&填空题&判断题&简述题】试卷(4)
1340
计算机网络体系结构及其简单通信技术_简述计算机网络体系结构的概念
1.1K0
【计网不挂科】计算机网络期末考试中常见【选择题&填空题&判断题&简述题】题库(4)
3850
思科 计算机网络 期末考试答案
1.5K0
大学课程 | 计算机网络
9340
【期末考试】计算机网络、网络及其计算 考试重点
4110
计算机网络
1560
从零开始的计网学习——计算机网络概述(计网入门就看这篇!)
5840
【计网不挂科】计算机网络第三章< 数据链路层 >习题库(含答案)
1980
大二逃课总结的1.2w字的计算机网络知识!扫盲!
5230
相关推荐
【计网不挂科】计算机网络期末考试——【选择题&填空题&判断题&简述题】题库(1)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验