基于51单片机的数字钟方案设计书2.docx
- 文档编号:27481055
- 上传时间:2023-07-02
- 格式:DOCX
- 页数:52
- 大小:291.02KB
基于51单片机的数字钟方案设计书2.docx
《基于51单片机的数字钟方案设计书2.docx》由会员分享,可在线阅读,更多相关《基于51单片机的数字钟方案设计书2.docx(52页珍藏版)》请在冰豆网上搜索。
基于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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 数字 方案设计