基于51单片机的数字钟方案设计书2.docx

上传人:b****3 文档编号:27481055 上传时间:2023-07-02 格式:DOCX 页数:52 大小:291.02KB
下载 相关 举报
基于51单片机的数字钟方案设计书2.docx_第1页
第1页 / 共52页
基于51单片机的数字钟方案设计书2.docx_第2页
第2页 / 共52页
基于51单片机的数字钟方案设计书2.docx_第3页
第3页 / 共52页
基于51单片机的数字钟方案设计书2.docx_第4页
第4页 / 共52页
基于51单片机的数字钟方案设计书2.docx_第5页
第5页 / 共52页
点击查看更多>>
下载资源
资源描述

基于51单片机的数字钟方案设计书2.docx

《基于51单片机的数字钟方案设计书2.docx》由会员分享,可在线阅读,更多相关《基于51单片机的数字钟方案设计书2.docx(52页珍藏版)》请在冰豆网上搜索。

基于51单片机的数字钟方案设计书2.docx

基于51单片机的数字钟方案设计书2

电子系统综合设计课程论文

基于51单片机的数字钟设计

 

专业:

年级:

作者:

指导教师:

 

2010年6月20日

1作品的背景与意义

时钟,自从它发明的那天起,就成为人类的朋友,但随着时间的推移,科学技术的不断发展,人们对时间计量的精度要求越来越高,应用越来越广。

怎样让时钟更好的为人民服务,怎样让我们的老朋友焕发青春呢?

这就要求人们不断设计出新型时钟。

现今,高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调校,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。

现在我们利用单片机实现数字时钟计时功能的主要内容,其中AT89C51是核心元件同时采用数码管动态显示“时”,“分”,“秒”的现代计时装置。

与传统机械表相比,它具有走时精确,显示直观等特点。

它的计时周期为24小时,显满刻度为“23时59分59秒”,另外具有校时功能,断电后有记忆功能,恢复供电时可实现计时同步等特点,除此外还实现了万年历和闹钟等的功能。

时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。

在一个单片机应用系统中,时钟有两方面的含义:

一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:

一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法,典型的时钟芯片有:

DS1302,DS12887,X1203等都可以满足高精度的要求。

单片计算机即单片微型计算机。

(Single-ChipMicrocomputer),是集CPU、RAM、ROM、定时、计数和多种接口于一体的微控制器。

他体积小,成本低,功能强,广泛应用于智能产品和工业自动化上。

而51单片机是各单片机中最为典型和最有代表性的一种。

所以综上所述,此次实验中所完成的数字钟有着强大的功能和良好的市场前景,复合电子类产品的发展趋势。

2功能指标设计

2.1基本功能

1.设计一个精确的1秒定时器;

2.根据1秒定时器,设计一个带小时、分钟、秒的时钟,并将小时、分钟、秒显示在LED上;

3.设计小时、分钟、秒的修改按键,可分别调整小时、分钟、秒(按键设计参考电子表);

2.2拓展功能

1.增加小时、分钟、秒的键盘直接修改功能;

2.设计闹钟功能,最多支持5个闹钟,可分别查看和修改闹钟时间,可分别设置闹钟开关。

3.增加万年历功能。

3作品方案设计

3.1设计要求

基本设计

1.设计一个精确的一秒定时器

2.运用一秒的定时器设计出有时、分、秒的数字钟,并显示在LED数码管上

3.设置按键,能够修改数字钟时间

扩展设计:

1.设计闹钟功能,能够查看和修改闹钟时间及开关状态

2.设计万年历功能,实现日→月→年的正常进位,能够查看和修改年月日,能够自动区分大小月和平闰年

3.2模块划分

●初始化程序

设定初值,中断初始化

●主程序

程序主要执行部分,对子程序(显示、按键设置,闹钟、万年历功能)进行调用

●定时器中断服务

中断走时:

秒→分→时

●显示程序

刷新8位数码管来显示时间、日期及扩展功能设置界面

●按键设置

通过对按键的操作实现时间及扩展功能的设置。

●闹钟功能

修改闹铃时间,闹铃开关的置换,修改位闪烁加以区分

●万年历功能

修改日期,同样的修改位闪烁加以区分

3.3模块设计概述

1.按键设置

通过调整选择键SET_KEY选择调整位,选中位开始闪烁,此时再按增加键ADD_KEY或减少键DEC_KEY调整选中位,如果长按ADD_KEY或DEC_KEY,系统识别后则进行调时快进,此时停止闪烁,方便人眼观察。

同时还增加了调秒功能:

如果选中位是秒,则按增加键或减少键都是将秒清零。

3.时间设置

进入时间设置界面后,通过调整选择键SET_KEY选择调整位,选中位闪烁。

按增加键ADD_KEY或减少键DEC_KEY设置所需要的时间。

4.闹钟设置

进入闹钟设置界面后,通过调整选择键SET_KEY选择调整位,选中位闪烁。

按增加键ADD_KEY或减少键DEC_KEY设置所需要的时间。

与时间设置不同的是,闹钟设置里增加了开关设置。

5.万年历设置

进入万年历设置界面后,通过调整选择键SET_KEY选择调整位,选中位闪烁。

按增加键ADD_KEY或减少键DEC_KEY设置所需要的时间。

万年历设置里增加了大小月和平闰年的判别。

4软件设计

4.1主程序流程图

4.2闹钟程序流程

4.3万年历程序流程

4.4中断系统结构图

附录一

 

附录二

/*****************************************************************************/

//初始化

MOVSP,#60H。

栈指针地址赋值

MOV3CH,#0CH。

设置界面修改位的闪烁频率具体代码在SERVE1秒中断服务中

MOV37H,#0FFH。

临时地址预留给39H

MOV39H,#0FFH。

段位标志8位数据对应8个数码管为0的那位数码管始终暗

MOV3AH,#11111101B。

界面转换标志******01为时间界面取反后******10为万年历界面******00为设置闹钟界面

CLRA。

时间万年历初始化时间00:

00:

00万年历2000。

01。

01

MOV23H,A。

MOV22H,A。

MOV21H,A。

MOV33H,#01H。

MOV34H,#01H。

MOV35H,A。

年只能显示2000-2099的时间

MOV3DH,A。

数码管闪烁开关初始化为关闭状态取反后11111111打开

MOV40H,A。

闹钟设置界面预留地址地址

MOV41H,A

MOV42H,A

MOV43H,A

MOV44H,A

MOV45H,A

MOV46H,A

MOV47H,A

MOV50H,A。

闹钟1时

MOV51H,A。

闹钟1分

MOV52H,A。

闹钟1秒

MOV0AH,A。

闹钟1开关00000000为关闭状态取反后打开闹钟1

MOV53H,A。

同上

MOV54H,A

MOV55H,A

MOV0BH,A

MOV56H,A

MOV57H,A。

同上

MOV58H,A

MOV0CH,A

MOV59H,A。

同上

MOV5AH,A

MOV5BH,A

MOV0DH,A

MOV5CH,A。

同上

MOV5DH,A

MOV5EH,A

MOV0EH,A

**************************************************************/

  ORG0000H   。

程序入口地址

  LJMPSTART

  ORG000BH   。

定时器0中断入口地址

  LJMPTIMER_0

  ORG0300H

/*****程序开始,初始化*****/  

START:

  SETB48H   。

使用一个bit位用于调时闪烁标志

  SETB47H   。

使用一个bit位用于产生脉冲用于调时快进时基

  MOVR1,#0   。

调整选择键功能标志:

0正常走时、1调时、2调分、3调秒

  MOV20H,#00H  。

用于控制秒基准时钟源的产生

  MOV21H,#00H  。

清零秒寄存器

  MOV22H,#00H  。

清零分寄存器

  MOV23H,#00H  。

清零时寄存器

  MOV24H,#00H  。

用于控制调时闪烁的基准时钟的产生

 

  MOVIP,#02H   。

IP,IE初始化

  MOVIE,#82H

  MOVTMOD,#01H  。

设定定时器0工作方式1

  MOVTH0,#3CH

  MOVTL0,#0B0H  。

赋定时初值,定时50ms  

  SETBTR0   。

启动定时器0

  MOVSP,#40H   。

重设堆栈指针

/*****主程序*****/  

MAIN:

  LCALLDISPLAY  。

调用显示子程序

  LCALLKEY_SCAN  。

调用按键检测子程序

  JZMAIN    。

无键按下则返回重新循环

  LCALLSET_KEY  。

调用选择键处理子程序

  JB46H,MAIN   。

如果已进行长按调整(调时快进),则不再执行下面的单步调整    

  LCALLADD_KEY  。

调用增加键处理子程序,加一

  LCALLDEC_KEY  。

调用减少键处理子程序,减一

  LJMPMAIN   。

重新循环

 

/*****定时器中断服务程序*****/

TIMER_0:

  PUSHACC   

  PUSHPSW   。

保护现场

  MOVTH0,#3CH

  MOVTL0,#0B0H  。

重新赋定时初值

  CPL47H    。

产生脉冲用于调时快进时基

  INC24H

  MOVA,24H        

  CJNEA,#10,ADD_TIME 。

产生0.5秒基准时钟,用于调时闪烁

  CPL48H    。

取反调时闪烁标志位

  MOV24H,#00H

ADD_TIME:

     。

走时

  INC20H   

  MOVA,20H

  CJNEA,#20,RETI1 。

产生1秒基准时钟

  MOV20H,#00H  。

一秒钟时间到,清零20H

  MOVA,21H

  ADDA,#01H

  DAA     。

作十进制调整

  MOV21H,A

  CJNEA,#60H,RETI1

  MOV21H,#00H  。

一分钟到

  MOVA,22H

  ADDA,#01H

  DAA

  MOV22H,A

  CJNEA,#60H,RETI1

  MOV22H,#00H  。

一小时到

  MOVA,23H

  ADDA,#01H

  DAA

  MOV23H,A

  CJNEA,#24H,RETI1

  MOV23H,#00H  。

到24点,清零小时

 

RETI1:

  POPPSW   

  POPACC   。

恢复现场

  RETI    。

中断返回

/*****显示处理*****/

DISPLAY:

  MOVA,21H   。

  ANLA,#0FH

  MOV2FH,A   。

转换出秒个位,存入2FH

  MOVA,21H

  ANLA,#0F0H

  SWAPA

  MOV2EH,A   。

转换出秒十位,存入2EH

  JB46H,MIN   。

如果长按按键(调时快进),则跳过闪烁处理程序

  CJNER1,#3,MIN  。

如果R1为3,闪烁秒位待调整

  JB48H,MIN

  MOV2FH,#0AH  。

使该位为10,查表得到使该位不显示的输出

  MOV2EH,#0AH

MIN:

  MOVA,22H   。

  ANLA,#0FH

  MOV2DH,A   。

转换出分个位,存入2DH

  MOVA,22H

  ANLA,#0F0H

  SWAPA

  MOV2CH,A   。

转换出分十位,存入2CH

  JB46H,HOUR   。

如果长按按键(调时快进),则跳过闪烁处理程序

  CJNER1,#2,HOUR  。

如果R1为2,闪烁分位待调整

  JB48H,HOUR

  MOV2DH,#0AH  。

使该位为10,查表得到使该位不显示的输出

  MOV2CH,#0AH

HOUR:

  MOVA,23H   。

  ANLA,#0FH 

  MOV2BH,A   。

转换出时个位,存入2BH

  MOVA,23H

  ANLA,#0F0H

  SWAPA

  MOV2AH,A   。

转换出时十位,存入2AH

  JB46H,DISP   。

如果长按按键(调时快进),则跳过闪烁处理程序

  CJNER1,#1,DISP  。

如果R1为1,闪烁时位待调整

   JB48H,DISP

  MOV2BH,#0AH  。

使该位为10,查表得到使该位不显示的输出

  MOV2AH,#0AH

/*****数码管动态扫描显示*****/

DISP:

  MOVDPTR,#TABLE

  MOVA,2FH

  MOVCA,@A+DPTR

  MOVP0,A

  CLRP2.7

  LCALLDELAY

  SETBP2.7   。

显示秒个位

  MOVA,2EH

  MOVCA,@A+DPTR

  MOVP0,A

  CLRP2.6

  LCALLDELAY

  SETBP2.6   。

显示秒十位

  MOVA,#0BFH

  MOVP0,A

  CLRP2.5

  LCALLDELAY

  SETBP2.5   。

显示“-”

  MOVA,2DH

  MOVCA,@A+DPTR

  MOVP0,A

  CLRP2.4

  LCALLDELAY

  SETBP2.4   。

显示分个位

  MOVA,2CH

  MOVCA,@A+DPTR

  MOVP0,A

  CLRP2.3

  LCALLDELAY

  SETBP2.3   。

显示分十位

  MOVA,#0BFH

  MOVP0,A

  CLRP2.2

  LCALLDELAY

  SETBP2.2   。

显示“-”

  MOVA,2BH

  MOVCA,@A+DPTR

  MOVP0,A

  CLRP2.1

  LCALLDELAY

  SETBP2.1   。

显示时个位

  MOVDPTR,#TABLE1 。

该位使用TABLE1以消除前置0

  MOVA,2AH

  MOVCA,@A+DPTR

  MOVP0,A

  CLRP2.0

  LCALLDELAY

  SETBP2.0   。

显示时十位

  RET

  

/*****按键检测子程序*****/

KEY_SCAN:

  CLR46H    。

关闭长按调整(调时快进)标志

  MOVP1,#0FFH  。

将P1口设置成输入状态

  MOVA,P1

  CPLA

  ANLA,#07H   。

P1口低3位连接3个按键,只判断该3位

  JZEXIT_KEY  。

无键按下则返回

  LCALLDELAY   。

延时去抖动

  MOVA,P1   。

重新判断

  CPLA

  ANLA,#07H

  JZEXIT_KEY  。

键盘去抖动

  MOVR5,A   。

临时将键值存入R5

  MOVR4,#00H   。

用于控制调时快进速度

  。

设置为00H是为了在进入长按处理前加长延时区分用户的长按与短按,防止误快进

  

LOOP:

      。

进入长按处理

  LCALLDISPLAY  。

使长按时显示正常 

  MOVA,P1

  CPLA

  ANLA,#07H

  JB47H,LOOP1

  INCR4    。

调时快进间隔时间基准加1

LOOP1:

  CJNER1,#03H,LOOP2 。

如果调秒时长按,则不处理

  LJMPLOOP3

LOOP2:

  CJNER4,#99H,LOOP3 

  MOVR4,#70H   。

确认用户长按后,重新设定起始值,加快调时快进速度

  SETB46H   。

长按调整(调时快进)标志   

  LCALLADD_KEY

  LCALLDEC_KEY

LOOP3:

  JNZLOOP   。

等待键释放

  MOVA,R5   。

输出键值

  RET   

EXIT_KEY:

  RET

/*****延时子程序*****/

DELAY:

  

  MOVR7,#150 

  DJNZR7,$

  RET

  

/*****选择键处理子程序*****/

SET_KEY:

  CJNER5,#01H,EXIT 。

选择键键值

  INCR1    。

调整选择功能标志加一

  CJNER1,#4,EXIT

  MOVR1,#0

  MOV24H,#00H  。

调时闪烁基准清零

  RET

/*****增加键处理子程序*****/

ADD_KEY:

  CJNER5,#02H,EXIT 。

增加键键值

  CJNER1,#01H,NEXT1 。

选择键功能标志为1,调时,否则跳出

  MOVA,23H

  ADDA,#01H

  DAA

  MOV23H,A

  CJNEA,#24H,EXIT

  MOV23H,#00H

NEXT1:

  CJNER1,#02H,NEXT2 。

选择键功能标志为2,调分,否则跳出

  MOVA,22H

  ADDA,#01H

  DAA

  MOV22H,A

  CJNEA,#60H,EXIT

  MOV22H,#00H

NEXT2:

  CJNER1,#03H,EXIT 。

选择键功能标志为3,调秒,否则跳出

  MOV21H,#00H  。

如增加键按下直接清零秒

  RET

/*****减少键处理子程序*****/

DEC_KEY:

  CJNER5,#04H,EXIT 。

减少键键值

  CJNER1,#01H,NEXT3 。

选择键功能标志为1,调时,否则跳出

  MOVA,23H

  ADDA,#99H

  DAA

  MOV23H,A

  CJNEA,#99H,EXIT

  MOV23H,#23H

 

NEXT3:

  CJNER1,#02H,NEXT4 。

选择键功能标志为2,调分,否则跳出

  MOVA,22H

  ADDA,#99H

  DAA

  MOV22H,A

  CJNEA,#99H,EXIT

  MOV22H,#59H

NEXT4:

  CJNER1,#03H,EXIT 。

选择键功能标志为3,调秒,否则跳出

  MOV21H,#00H  。

如较少键按下直接清零秒

  RET

/*****万用返回子程序*****/  

EXIT:

  RET

/*****数码管字形编码表*****/

TABLE:

  DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH。

字形显示编码

TABLE1:

  DB0FFH,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH。

小时位的十位数编码,该位如果为0则不显示

//闹钟检测

MOVA,0AH

JZNAO2。

检测闹钟开关若关检测下一个闹钟,否则检测时间是否为闹钟设定时间

MOVA,30H

CJNEA,50H,NAO2

MOVA,31H

CJNEA,51H,NAO2

MOVA,32H

CJNEA,52H,NAO2

AJMPXIANG。

时间为闹钟设定时间吻合进入闹铃程序下同

NAO2:

MOVA,0BH

JZNAO3

MOVA,30H

CJNEA,53H,NAO3

MOVA,31H

CJNEA,54H,NAO3

MOVA,32H

CJNEA,55H,NAO3

AJMPXIANG

NAO3:

MOVA,0CH

JZNAO4

MOVA,30H

CJNEA,56H,NAO4

MOVA,31H

CJNEA,57H,NAO4

MOVA,32H

CJNEA,58H,NAO4

AJMPXIANG

NAO4:

MOVA,0DH

JZNAO5

MOVA,30H

CJNEA,59H,NAO5

MOVA,31H

CJNEA,5AH,NAO5

MOVA,32H

CJNEA,5BH,NAO5

AJMPXIANG

NAO5:

MOVA,0EH

JZBU

MOVA,30H

CJNEA,5CH,BU

MOVA,31H

CJNEA,5DH,BU

MOVA,32H

CJNEA,5EH,BU

AJMPXIANG

//检测独立按键

BU:

JBT0,ZHU1。

检测s19是否按下按下进入万年历界面,否则检测矩阵键盘

MOVA,3AH。

界面转换标志取反即可使得时间和万年历界面相互转换

CPLA

MOV3AH,A

//检测矩阵键盘

//检测到按键1,2,3,4,5时进入对应的闹钟设置界面检测到0BH(对应s11)进入时间设置界面检测到0CH(对应s12)进入万年历设置界面

//若未检测到按键则跳回主程序继续下一个检测周期

ZHU1:

MOVR7,#0FH

ACALLJIANCEANJIAN。

矩阵键盘检测子程序将检测到的键值存入r7

CJNER7,#0FH,ZHU2

AJMPZHUXUNHUAN

ZHU2:

CJNER7,#0BH,ZHU3

AJMPSHIJIANSHEZHI

ZHU3:

CJNER7,#0CH,ZHU4

AJMPWANNIANLISHEZHI

ZHU4:

CJNER7,#01H,ZHU5

AJMPNAOZHONGSHEZHI

ZHU5:

CJNER7,#02H,ZHU6

AJMPNAOZHONGSHEZHI

ZHU6:

CJNER7,#03H,ZHU7

AJMPNAOZHONGSHEZHI

ZHU7:

CJNER7,#04H,ZHU8

AJMPNAOZHONGSHEZHI

ZHU8:

CJNER7,#05H,ZHUXUNHUAN0

AJMPNAOZHONGSHEZHI

ZHUXUNHUAN0:

AJMPZHUXUNHUAN

//年月日校正子程序用于万年历进位和万年历设置防止出现不存在的时间

NYR:

MOVA,33H

CJNEA,#32,MONTH。

日为32时,月进位日置1

MOV33H,#01H

AJMPMONTH0

MONTH:

CJNEA,#31,MONTH1。

日为31时分辨大小月及2月

MOVA,34H

CJNEA,#4,MONTH2

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 笔试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1