- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一、数字时钟的基本原理
数字时钟是用数字集成电路组成,用数码管显示的一种现代化计数器。数字时钟实际上是一个对标准频率(1Hz)进行计数的计数电路。振荡器产生的时钟信号经过分频器形成秒脉冲信号,秒脉冲信号输入计数器进行计数,并把累计结果“时”、“分”、“秒”的数字显示出来。秒计数器电路计满60后触发分计数器电路,分计数器电路计满60后触发时计数器电路,当计满24小时后又开始下一轮的循环计数。由于计数的起始时间不可能与标准时间(如北京时间)一致,故需在电路上加一个校时电路可以对分和时进行校时。
二、数字时钟的硬件设计
1、数字时钟的电路原理图
2、原器件清单
序号
器件名称
参数
数量
1
USB座
无
1
2
USB线
无
1
3
双排针(2)
无
1
4
跳帽
无
3
5
电容
0.1uF
7
6
LED灯
无
1
7
电阻
2K
1
8
40针座
无
1
9
STC89C51
无
1
10
晶振
12MHZ
1
11
电容
20pF
2
12
复位键
无
1
13
电阻
10K
1
14
蜂鸣器
无
1
15
三极管9015
无
9
16
电阻
330
9
17
16针座
无
1
18
MAX232
无
1
19
单排针(5)
无
1
20
按键
无
4
21
单排针(3)
无
1
22
4位LED
无
2
23
电阻
4.7K
8
三、数字时钟的软件设计
1、程序流程图
开始
清显示缓冲区
初始化定时计数器
赋时钟初值
开定时器
调整时间
数码管显示当前时钟值
2、源程序
#include reg52.h
//定义按键端口
sbit key_1=P3^0;//用于小时增加
sbit key_2=P3^1;//用于分钟增加
sbit key_3=P3^2;//用于分钟减少
sbit key_4=P3^3;//用于秒钟增加
//定义所需变量
unsigned char shi=12,fen=00, miao=00;//定义十分秒并初始化为12:00:00
code unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,0x80,0x90};//定义共阳极数码管编码表
unsigned char sbuff[8];//定义数据缓冲数组
void init() //定义初始化函数对定时器0和定时器1进行初始化
{
TMOD=0x11; //定时器0和1均为模式1
ET0=1;//开定时器0中断
ET1=1;//开定时器1中断
TH0=0xd8;
TL0=0xf0; //定时10ms
TH1=0xfc;
TL1=0x18;//定时0.1ms
TR1=1;//T1开始计时
TR0=1;//T0开始计时
EA=1;//开总中断
}
//显示数值写入缓冲区函数
void displayset()
{
sbuff[7]=tab[(shi/10)];//显示小时的十位
sbuff[6]=tab[(shi%10)];//显示小时的个位
sbuff[5]=0xbf;// 显示-号
sbuff[4]=tab[(fen/10)];//显示分钟十位
sbuff[3]=tab[(fen%10)];//显示分钟个位
sbuff[2]=0xbf;//显示-号
sbuff[1]=tab[(miao/10)];//显示秒钟十位
sbuff[0]=tab[(miao%10)];//显示秒钟个位
}
//延时子函数
void delay(unsigned char z)
{ while(z--)
{unsigned char j;
for(j=0;j123;j++);
}
}
void key_scan()
{
if(!key_1) //按键1去抖以及动作
{
delay(100);
if(!key_1)
{
shi++;
if(shi==24)
shi=0; //正常时间 小时 加1
displayset();
}
}
if(!key_2) //按键2去抖以及动作
{
delay(100);
if(!k
您可能关注的文档
最近下载
- 蓝海华腾VA-H系列伺服驱动器 用户手册2.0.pdf
- 国家法定41种传染病大全(就诊科室、传播途径、病原体、检测方法等)及防护措施.doc VIP
- GB50877-2014 防火卷帘、防火门、防火窗施工及收规范.docx VIP
- T_CECWA 2001-2023 钢结构焊接工艺评定标准.docx
- 8.铁路工程预算定额 路基工程宣贯讲义.ppt VIP
- 2024年四川宜宾五粮液股份有限公司招聘笔试真题.docx VIP
- 医疗废物管理条例.pptx VIP
- 2025年辽宁省电力行业十五五发展规划研究.docx
- 国标GB_T 43388-2023《家用汽车产品严重安全性能故障判断指南》实践.pdf VIP
- 厂房租赁合同.doc VIP
文档评论(0)