实时数字时钟毕业设计.docx
《实时数字时钟毕业设计.docx》由会员分享,可在线阅读,更多相关《实时数字时钟毕业设计.docx(42页珍藏版)》请在冰豆网上搜索。
实时数字时钟毕业设计
湖南现代物流职业技术学院
毕业论文
(论文)
论文题目:
实时数字时钟毕业设计
专业:
电子信息工程技术
班级:
电子0701
学生姓名:
黄小波
指导老师:
沈治国
2010年6月20日
摘要
设计选题与本专业关系密切,理论与实际相联系。
数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。
数字钟从原理上讲是一种典型的数字电路,其中包括了组合逻辑电路和时序电路。
因此,我们此次设计与制做数字钟就是为了了解数字钟的原理,从而学会制作数字钟。
而且通过数字钟的制作进一步的了解各种在制作中用到的中小规模集成电路的作用及实用方法。
且由于数字钟包括组合逻辑电路和时叙电路,通过它可以进一步学习与掌握各种组合逻辑电路与时序电路的原理与使用方法。
关键词:
数字钟,MCS-AT89S52单片机,六位共阳数码管
目录
引言……………………………………………………………4
一、整个数字钟电路组成……………………………………5
二、电路原理简介……………………………………………6
三、器件………………………………………………………7
1、DS1302的引脚及功能说明…………………………7
2、AT89S52的引脚及功能说明…………………………8
六、总结语……………………………………………………9
七、参考文献…………………………………………………10
八致谢………………………………………………………11
九、关键程序及其分析………………………………………12
引言
自从产生了宇宙以来,时间和空气便伴相聚随而来。
时间与我们每一个人都有着密不可分的关系,每个人都受到时间的影响。
人类伊始,时间就掌控着我们的生存与发展,因此我们必须对时间有一个度量,让我们准确的掌握时间。
计时工具的出现,它使时间与人的关系产生了改变,时间成了我们手里可以支配的东西。
它的发展是非常迅速的,从原始的水滴、沙漏到机械式钟表到现在普通用到的电子式钟表,尽管它们有简单或是繁复的外形,但是它们都只有只是完成一个任务—计时功能。
本设计了一次可设定实时数字钟,选用单片机DS1302控制。
8个LED数码管软件编译直接驱动显示当前时间的时、分、秒可以进行工作。
其电路结构简单系统控制方便,可用于家庭、工厂等场所,作时间指示多点时刻提醒。
一、整个数字钟电路组成
本部分由AT89S52单片机、DS1302时钟芯片、共阳四位数码管等组成。
图
(一)电子时钟原理图
二、电路原理简介
基本原理分析:
在MSC-AT89S52中我用I/O口(P0.0-P0.7、P2.0-P2.7)来作为信号控制输出脚。
这样信号的高低电平来控制发光数码管的工作,当然在信号电流的输出是我们还要串联限流电阻R,作用防止电流、电压过大使数码发光二极管损坏。
在电路中我们可以看出MSC-AT89S52的正常工作需要满足正常工作电压40脚,接地端20脚与18脚、19脚时钟晶体起振的条件,在此同时我还要满足复位需要的条件,9脚高电位复位等连接,还有31脚读RAM内部还外部的程序,所以31脚接高电位读内部RAM的程序。
外围电路接好以后基本上MSC-AT89S52就能够正常的工作,信号电平的高低来控制三极管的饱和导通还是截止,而达到控制数码管的正常发光,从而实现数码的时钟显示,通过晶体起振的时间周期来对信号进行计时(数)。
我们还可以通过中断信号来进行时间的调整,通过复位9脚来实现清零,我用DS1302对任何数据传送进行初始化,需要将复位脚(P1.2)置为高电平且将8位地址和命令信息装入移位寄存器。
数据在时钟(SCLK)的上升沿串行输入,前8位指定访问地址,命令字装入移位寄存器后,在之后的时钟周期,读操作时输出数据,写操作时输出数据。
(P1.4-P1.7)作为时钟的控制开关,等等。
三、器件
1)DS1302
DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟芯片,它可以对年、月、日、周日、时、分、秒进行计时,且具有闰年补偿功能,工作电压宽达2.5~5.5V。
采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。
DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。
DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力.
DS1302的引脚及脚功能如下所示。
1脚VCC2:
主电源2.0到5.5V。
2脚X1外界晶振引脚。
3脚X2外界晶振引脚。
4GND:
接地。
5脚CE:
输入信号,在读写数据期间,必须为高。
该引脚有两个功能:
第一,CE开始控制字访问移位寄存器的控制逻辑;
第二,CE提供结束单字节或多字节数据传输的方法。
6脚I/0:
三线接口时的双向数据线。
7脚SCIK:
串行时钟输入。
8脚VCC1:
备用电源。
当VCC2=VCC1时,VCC2向DS102供电;当VCC2=V0C1时,VCC1向DS1302供电。
2)AT89S52
AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
芯片的工作主要是我们利用(ME500B等)型编程器来实现的所需要达到的功能。
我现在利用的是汇编语言,汇编语言转换成机械语言(0、1)代码,也可以说是高、低电平来控制AT89S52的I/O口,来实现高、低电压的输出。
AT89S52引脚及功能说明
(图2)
功能如下:
1:
电源引脚40脚(VCC:
接+5V工作电压)、20脚(Vss:
接电源地端)。
2:
外接晶体引脚(18脚XTAK1:
片内反相放大器输入端,19脚XTAX2:
片内反相放大器输出端)。
3:
输入/输出端口引脚(P0.0-P0.7:
为准双向输入/输出接口、P1.0-P1.7:
作为准双向I/O接口使用、P2.0-P2.7:
为准双向I/O接口,但有接有片外存储器或扩展I/O接口且寻址范围超过256个字节时,P2口用作高8位地址总线。
P3.0-P3.7:
P3口的8个引脚除作为准双向I/O接口使用,还具有第二功能)。
4控制线(30脚ALE/PROG:
作为地址锁存有效信号输出端ALE。
29脚PSEN片外程序存储器读选通信号输出端。
9脚RST/VPD复位端。
31脚EA/VDD片外程序存储器选用端)。
总结语
通过这次的设计通过这次的设计,理论加上实践,使我对数字钟有了更深刻的认识,尤其是对电路的原理的理解,各元器件功能,特性的认识,也认识到我对单片机方面的知识知道的太少了,对于书本上的很多知识还不能灵活运用,有很多我们需要掌握的知识在等着我去学习,我会在以后的学习生活中弥补我所缺少的知识。
本次的设计使我从中学到了一些很重要的东西,那就是如何从理论到实践的转化,怎样将我所学到的知识运用到我以后的工作中去。
在大学的课堂的学习只是在给我们灌输专业知识,而我们应把所学的用到我们现实的生活中去,此次的电子时钟设计给我奠定了一个实践基础,我会在以后的学习、生活中磨练自己,使自己适应于以后的竞争。
总之,这次设计使我受益匪浅,让我对以后的工作学习有了更大的信心。
参考文献
1.孙建三.《数字电子技术》[M].北京:
机械工业出版社.2000.128
2.郝波.《数字电路》[M].北京:
电子工业出版社.1992.143
3.彭军.《数字电路设计与制作》[M].北京:
科学出版社.1984.203
4.薛华.《数字计数电路》[M].北京:
人民邮电出版社.1990.86
5.夏路易.《Protel99SE》[M].北京希望电子出版社.2002.108
6.张毅坤、陈善久、裘雪红:
《单片微型计算机原理及应用》西安电子科技大学出版社.1998年9月第1版.98
7.任为民:
《电子技术基础课程设计》中央广播电视大学出版社.7年5月第1版.123
8.张俊谟:
《单片机中级教程原理与应用》北京航空航天大学出版社2002年8月第2版.598
9.李建忠主编,单片机原理及应用,西安电子科技大学出版社,2004.91
10.伟纳电子网:
[J].
11.电子制作网:
[J]
致谢
本课题在选题及制作过程是在沈老师的亲切关怀和悉心指导下完成的,他们一丝不苟的工作作风,严谨求实的治学态度,踏踏实实的精神,深深地感动和激励着我,他们不仅授我以文,而且教我做人,他们是我学习的榜样,在此向曾老师和姚老师致以我们诚挚的谢意和崇高的敬意
在此,还要感谢其他同学对我们的帮助和支持,谢谢你们,正是由于你们的帮助和支持,我才能克服一个一个的困难和疑惑,直至本文的顺利完成,没有他们的大力帮助对于我一个课本知识没学好的人来说要想在短短的几个月的时间里完成毕业论文是几乎不可能的事情。
然后还要谢大学三年来所有的老师,为我们打下电子专业知识的基础;同时还要感谢所有的同学们,有多少可敬的师长、同学、朋友们在学习和生活中给了我无言的帮助,正是因为有了他们的帮助和支持。
才使我完成这最后的作业!
我还要感谢养育我的父母,谢谢他们!
最后,借用孙中山先生的一句话,聊以自勉。
“事业尚未成功,同志仍须努力!
黄小波
2010-6-20
关键程序及其分析
ME300B;8位数码管显示
;P0为段码口、P2为位码口
;晶振11.0592M
;时钟芯片:
DS1302
DS1302端口位定义
IO_DATABITP1.1;数据传送总线
SCLKBITP1.0;时钟控制总线
RSTBITP1.2;复位总线
;独立键
K1EQUP1.4
K2EQUP1.5
K3EQUP1.6
K4EQUP1.7
T_CONUEQU22H;中断计数
TIME_LEQU23H;定时初值
TIME_HEQU24H
TIME_DATAEQU50H;显示时间单元首地址
DATE_DATAEQU60H;显示日期单元首地址
DS_DATAEQU58H;显示定时时间单元首地址
;------------------------------------ORG0000H
AJMPMAIN
ORG000BH
AJMPINT_T0
ORG0100H
;------------------------------------MAIN:
MOVTMOD,#01H;T0,方式1
MOVTIME_L,#00H;50MS定时值
MOVTIME_H,#4CH
MOVT_CONU,#00H;中断次数
MOVIE,#82H;EA=1,ET0=1
MOVA,#00H
MOVR0,#40H;从40H单元开始
MOVR1,#40H;清64个单元
M_CLEAR:
MOV@R0,A
INCR0
DJNZR1,M_CLEAR
MOV7FH,#0AH;送熄灭符
SETBBEEP
LCALLTIME_DELAY;调显示延时
LCALLPROSET;DS1302初始化
MAIN1:
LCALLGET_TIME;从DS1302读数据程序
LCALLCHULI;实时时间数据处理
MOVR0,#TIME_DATA;显示时、分、秒
LCALLDISP
MOVR0,#TIME_DATA
LCALLTIME_DISPLAY
LCALLSET_KEY;键功能程序
LCALLCOMP;实时时间与定时时间比较
JBK1,MAIN1
CALLBEEP_BL
MAIN2:
LCALLCHULI;日期数据处理
MOVR0,#DATE_DATA
LCALLDISP;显示年、月、日
MOVR0,#DATE_DATA
LCALLTIME_DISPLAY
JBK1,MAIN2
CALLBEEP_BL
MAIN3:
LCALLDS_CHULI;定时时间数据处理
MOVR0,#DS_DATA
LCALLDS_SP;显示定时时间
MOVR0,#DS_DATA
LCALLDS_DISPLAY
JBK1,MAIN3
CALLBEEP_BL
AJMPMAIN1
;------------------------------------
;中断服务子程序
;300MS对闪动标记取反一次
;------------------------------------
INT_T0:
PUSHACC
PUSHPSW
MOVTL0,TIME_L
MOVTH0,TIME_H
INCT_CONU
MOVA,T_CONU
CJNEA,#06H,INT_END
MOVT_CONU,#00H
CPL0AH
INT_END:
POPPSW
POPACC
RETI
;------------------------------------
;DS1302初始化子程序
;(R0)=数据(R1)=地址
;------------------------------------
PROSET:
CLRRST;DS1302复位
CLRSCLK
NOP
NOP
SETBRST
;MOVR1,#80H;写秒寄存器
;MOVR0,#00H;启动振荡器
;LCALLWRITE
;MOVR1,#82H;写分寄存器
;MOVR0,#58H
;LCALLWRITE
;MOVR1,#84H;写时寄存器
;MOVR0,#80H
;LCALLWRITE
MOVR1,#90H;写充电寄存器
MOVR0,#0ABH
LCALLWRITE
RET
;====================================
;读时间、日期数据子程序
;存放单元40H-46H
;====================================
GET_TIME:
MOVR1,#81H;读秒
LCALLREAD
MOV40H,R0
MOVR1,#83H;读分
LCALLREAD
MOV41H,R0
MOVR1,#85H;读时
LCALLREAD
MOV42H,R0
MOVR1,#87H;读出日期
LCALLREAD
MOV43H,R0
MOVR1,#89H;读出月份
LCALLREAD
MOV44H,R0
MOVR1,#8BH;读出星期
LCALLREAD
MOV46H,R0
MOVR1,#8DH;读出年
LCALLREAD
MOV45H,R0
RET
;====================================
;写DS1302子程序
;====================================
WRITE:
CLRSCLK
NOP
NOP
SETBRST
NOP
MOVA,R1
MOVR2,#08H
WRI_01:
RRCA;传输地址到DS1302
NOP
NOP
CLRSCLK
NOP
NOP
MOVIO_DATA,C
NOP
NOP
SETBSCLK
NOP
NOP
DJNZR2,WRI_01
CLRSCLK
NOP
NOP
MOVA,R0
MOVR2,#08H
WRI_02:
RRCA;传输数据到DS1302
NOP
CLRSCLK
NOP
NOP
MOVIO_DATA,C
NOP
NOP
SETBSCLK
NOP
NOP
DJNZR2,WRI_02
CLRSCLK
NOP
NOP
CLRRST
NOP
NOP
RET
;====================================
;读DS1302子程序
;====================================
READ:
CLRSCLK
NOP
NOP
SETBRST
NOP
NOP
MOVA,R1
MOVR2,#08H
READ_01:
RRCA
NOP;先传输地址到DS1302
MOVIO_DATA,C
NOP
NOP
SETBSCLK
NOP
NOP
CLRSCLK
NOP
NOP
DJNZR2,READ_01
NOP
NOP
SETBIO_DATA
CLRA
CLRC
MOVR2,#08H
READ_02:
CLRSCLK
NOP
NOP
MOVC,IO_DATA
NOP
NOP
RRCA;再从DS1302接收数据
NOP
NOP
SETBSCLK
NOP
NOP
DJNZR2,READ_02
MOVR0,A
CLRRST
RET
;====================================
;实时时间、日期数据处理子程序
;====================================
CHULI:
MOVA,40H;处理秒数据
ANLA,#0FH
MOV50H,A
MOV70H,A
MOVA,40H
ANLA,#11110000B
SWAPA
MOV51H,A
MOV71H,A
;------------------------------------
MOVA,41H;处理分数据
ANLA,#0FH
MOV52H,A
MOV72H,A
MOVA,41H
ANLA,#11110000B
SWAPA
MOV53H,A
MOV73H,A
;------------------------------------
MOVA,42H;处理时数据
ANLA,#0FH
MOV54H,A
MOV74H,A
MOVA,42H
ANLA,#11110000B
SWAPA
MOV55H,A
MOV75H,A
;------------------------------------
MOVA,43H;处理日数据
ANLA,#0FH
MOV60H,A
MOV76H,A
MOVA,43H
ANLA,#11110000B
SWAPA
MOV61H,A
MOV77H,A
;------------------------------------
MOVA,44H;处理月数据
ANLA,#0FH
MOV62H,A
MOV78H,A
MOVA,44H
ANLA,#11110000B
SWAPA
MOV63H,A
MOV79H,A
;------------------------------------MOVA,45H;处理年数据
ANLA,#0FH
MOV64H,A
MOV7AH,A
MOVA,45H
ANLA,#11110000B
SWAPA
MOV65H,A
MOV7BH,A
;------------------------------------
MOVA,46H;处理周数据
MOV66H,A
MOV7CH,A
RET
;====================================
;实时时间、日期查表取数子程序
;====================================
DISP:
;MOVR0,#TIME_DATA
MOVR3,#06H
DISP1:
MOVA,@R0
MOVDPTR,#TAB_NU
MOVCA,@A+DPTR
MOV@R0,A
INCR0
DJNZR3,DISP1
RET
;====================================
;时间、日期显示子程序
;====================================
TIME_DISPLAY:
;MOVR0,#TIME_DATA;取得显示单元首地址
MOVR1,#07FH;从第一个数码管开始
MOVR2,#08H;共8个数码管
DISLP:
MOVP0,@R0;获得当前单元数据
MOVA,R1
MOVP2,A;数码显示JBACC.5,DISLP1;第三位数码管显示-
MOVP0,#0BFH
JMPDISLP3
DISLP1:
JBACC.2,DISLP2;第六位数码管显示-
MOVP0,#0BFH
JMPDISLP3
DISLP2:
INCR0
DISLP3:
MOVA,R1;为下一个数准备
RRA;下一个单元
MOVR1,A;保存
LCALLDELAY;为了保证数码管亮度,延时
DJNZR2,DISLP;重复显示,直到全部数据刷新过
RET;返回
DELAY:
MOVR4,#0AH
L15:
MOVR5,#64H
L16:
DJNZR5,L16
DJNZR4,L15
RET
;************************************
SET_KEY:
SETBK1;增加键
SETBK2;减少键
SETBK3;选择键
SETBK4;定时设定功能键
NOP
JBK4,KEY01
LCALLBEEP_BL
JMPDS_KEY;进入定时值设定子程序
KEY01:
JBK2,KEY02
LCALLBEEP_BL
JMPSET_TIME;进入时间设定子程序
KEY02:
JBK3,KEY03
LCALLBEEP_BL
CPL20H.0;止闹标记取反
KEY03:
RET
;------------------------------------
DS_KEY:
CALLDS_DELAY
JNBK4,$
LCALLDSSET
CALLDS_DELAY
RET
;===============================