资源描述
XX学院课程设计论文
论文题目: 数字电子钟的设计
姓 名:
所在院系: 电信学院
班 级:
学 号:
指导教师:
XX学院
二〇一三年一月六日
摘 要
单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。概括的讲,一块芯片就成了一台计算机。单片机具有体积小、功能强、应用面广等优点,为学习、应用和开发提供了便利条件。现在,这种单片机的使用领域已十分广泛。彩电、冰箱、空调、录像机、VCD、遥控器、游戏机、电饭煲等无处不见单片机的影子,单片机早已深深地融入我们每个人的生活之中。单片机能大大地提高这些产品的智能性,易用性及节能性等主要性能指标,给我们的生活带来舒适和方便的同时,在工农业生产上也极大地提高了生产效率和产品质量。 此外,单片机在工商、金融、科研、教育、国防航空等领域都有着十分广泛的用途。
数字钟是采用数字电路实现对“时”、“分”、“秒”数字显示的计时装置。该课程设计为数字电子钟的设计。以AT89C51为核心,配合LED数码管显示器和按键为用户提供长期、连续、可靠、稳定的工作环境。该数字电子钟有时分秒显示和日期显示以及时间和日期调整的功能。系统软件设计包括单片机计算机两部分的编程。计算机软件编程主要实现参数设置、串行口数据接收、指令发送以及数据的显示和存储。单片机软件编程主要实现键盘、LED显示等各模块的功能,采用汇编语言编程。数字钟是其小巧,价格低廉,走时精度高,使用方便,功能多,便于集成化而受广大消费的喜爱,
因此得到了广泛的使用。
关键词 数字电子钟;单片机;LED显示
第一章 设计目的和方案 4
1.1设计任务 4
1.1.1 设计题目:数字电子钟 4
1.1.2 设计目的与任务 4
1.2功能要求说明 4
1.3设计总体方案及工作原理 4
第二章 数字电子钟的硬件系统的设计 5
2.1 硬件系统各模块功能设计 5
2.1.1 单片机最小系统 6
2.1.2 键盘模块 6
2.1.3 LED显示电路 6
2.1.4 接口电路 6
2.2 电路原理图、PCB图和元器件布局 6
2.3 元器件清单 7
第三章 数字电子钟的软件系统的设计 7
3.1 使用的单片机资源的情况 7
3.2 各模块功能简要介绍 8
3.3 程序的流程图 8
3.4 程序清单 12
第四章 设计仿真和结果分析 13
4.1 设计结论和功能使用说明 13
4.1.1 设计结论 13
4.1.2 功能及使用说明 13
4.2 仿真结果 14
4.3 设计系统误差分析 15
第五章 设计小结 16
致 谢 16
参考文献 17
附 录 19
第一章 设计目的和方案
1.1设计任务
1.1.1 设计题目:数字电子钟
1.1.2 设计目的与任务
通过理论设计和实物制作解决相应的实际问题,巩固和运用在《单片机原理及接口技术》中所学的理论知识和实验技能,掌握单片机应用系统的一般设计方法,提高设计能力和实践动手能力,为以后从事电子电路设计、研发电子产品打下良好的基础。
1.2功能要求说明
1、显示准确的北京时间(时、分、秒),可用24小时制式;
2、随时可以调校时间。
3、增加公历日期显示功能(年、月、日),年号只显示最后两位;
4、随时可以调校年、月、日;
5、允许通过转换功能键转换显示时间或日期。
硬件方案:
⑴ 显示器采用6位LED数码管(共阳),可分别显示时间或日期;(通过KB 键可切换)
⑵ 显示器的驱动采用动态扫描电路形式,以达到简化电路的目的。但要注意所需的驱动电流比静态驱动时要大,因此要增加驱动电路。可采用74LS244或者晶体管;其中74ls244是用来驱动段选码,晶体管是驱动位选码
1.3设计总体方案及工作原理
设计中采用AT89C51芯片及LED显示器,一些独立式按键构成一个简单的数字电子钟。设计中是采用单片机的内部定时器进行定时,程序框图如图所示。
整个电子钟的工作原理是:在正常的供电状态下,首先利用单片机定时,到了相应的时间由单片机将所需要显示的数据送到LED显示器的输入口,当有键按下时则进入相应的按键显示和调整状态,进行按键调整。
总体硬件原理图如图所示
第二章 数字电子钟的硬件系统的设计
2.1 硬件系统各模块功能设计
该数字电子钟由单片机最小系统、键盘模块、LED显示电路模块、接口电路模块组成。各模块的功能如下:
2.1.1 单片机最小系统
由AT89C51单片机、时钟电路和复位电路构成。AT89C51是一种带8K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。时钟电路由一个12MHZ的石英晶体振荡器和两个22pF的的电容组成振荡电路和分频电路,为单片机提供内部时钟。复位电路采用上电复位和按键复位结合的方式对电路进行复位,主要是通过RST引脚送入单片机。
2.1.2 键盘模块
采用独立式键盘接法,共有四个按键来对电路进行控制。分别接在单片机的P1口线上。一个键控制开和关,一个键负责调整,另外两个键辅助调整。
2.1.3 LED显示电路
采用六个共阳的数码管显示器进行显示,加上一个74LS244作为驱动和8个220Ω的电阻起限流的作用。将段控口接在P0口上,位控口接在P3口上,实现对显示的控制。
2.1.4 接口电路
接上一个电容组成的滤波电路和电源显示灯组成一个电源接口,为单片机工作供电。
2.2 电路原理图、PCB图和元器件布局
采用Protel软件,Protel99SE是Protel公司近10年来致力于Windows平台开发的最新结晶,能实现从电学概念设计到输出物理生产数据,能够和形象的画出我们所要设计的产品。电路原理图和PCB图及元器件布局见附录。
各模块拼接图
2.3 元器件清单
见附录。
第三章 数字电子钟的软件系统的设计
3.1 使用的单片机资源的情况
该数字电子钟用到了单片机的定时器的功能,此外用到了单片机的中断功能,在数据的显示时所采用的是查表的方法,因此需要将表格、数据存到单片机的程序存储器中去。
由于电子钟需要可以进行调节,因此,需要在单片机的P口上加上按键,本设计采用独立式键盘,直接接在P1口上且按键的结果存贮在单片机的内部数据存储器里面。用到的LED显示器接到了单片机的P0口线上和P3口线上。
3.2 各模块功能简要介绍
该数字电子钟所用的软件模块有定时器模块、按键模块、LED显示模块。
(1)定时器模块
选择定时器0,设置定时方式为方式1,设置定时时间为50mS。
(2)按键模块
采用独立式键盘,共用四个按键对电路进行控制和操作,分别为K0、K1、K2、K3来控制电子钟的开/关和调整。
(3)LED显示模块
该电子钟一通电即让它显示P.,按开启键即可显示时分秒,再按切换键即可显示年月日,然后结合键盘操作还可以对时间进行调整。
3.3 程序的流程图
(1)整体设计流程图
(2)键盘设计流程图
图3.2 键盘设计流程图
(3)显示设计流程图
图3.3 显示时分秒设计流程图
图3.4 显示年月日设计流程图
3.4 程序清单
见附录。
第四章 设计仿真和结果分析
4.1 设计结论和功能使用说明
4.1.1 设计结论
通过对单片机进行外接键盘和LED数码管的操作以及加上硬件电路和软件的结合,实现了该数字电钟显示P.以及时分秒和年月日的显示,同时还可实现对该电子钟进行调整的功能。通过测试和仿真以及修改,该电子钟最终能正常的工作。
4.1.2 功能及使用说明
该数字电子钟采用八位数码管能实现年月日和时分秒的显示。当电子钟一上电即可显示P.,设置数字钟的初始日期和时间为12年02月23日00时00分00秒.用四个按键实现电子钟的显示和调整的功能,分别为K0,K1,K2,K3,其中K0键为开启键,且显示的是时分秒,开启之后K2键可实现切换的功能,即可实现年月日和时分秒的切换显示;按K3键可实现年月日和时分秒的调整,按一下可以对当前显示的进行调整,再按一下即可切换到一个界面进行调整,调整的时候数字钟停止计时,当进行时分秒的调整时, K0键可实现对秒进行增大的调整,每按一下秒的值就加一,当秒增加到59时就重新从0开始继续增大, K1键可实现对分进行增大的调整,每按一下分的值就加一,当分增加到59的时候就重新从0开始继续增大,K2键可实现对时进行增大的调整,每按一下时的值就加一,当时的值增大到23的时候就重新从0开始继续增大.当进行年月日的调整时, K0键可实现对日进行增大的调整,每按一下秒的值就加一,当日增加到28或者30或者31(看不同的年份和月份)时就重新从0开始继续增大, K1键可实现对月进行增大的调整,每按一下月的值就加一,当月增加到12的时候就重新从0开始继续增大,K2键可实现对年进行增大的调整,每按一下时的值就加一,当时的值增大到99的时候就重新从0开始继续增大.当对年月日和时分秒都调整完之后,再按一下K3键即可跳出调整的状态,数字钟继续开始计时工作,在电子钟正常计时的时候再按K0键即可对电子钟进行关闭.
4.2 仿真结果
在仿真时用到了两个软件,第一个是Keil,第二个是Protues,本次仿真是将两个软件结合起来进行的。
用Protues软件进行仿真,其仿真的电路图如图4.1所示
图4.1 Protues仿真电路图
数字电子钟正常工作时,仿真的LED显示器显示如图4.2所示,当按下切换键时,数字电子钟进入日期显示界面,此时LED数码管显示器的显示如图4.3和4.4所示,当按下调整键时,数字电子钟进入调整界面,此时LED数码管显示器的显示如图4.5和4.5所示。
图4.2 数字电子钟正常工作时的显示图
P.
图4.3 数字电子钟显示时分秒的显示图
000000.
图4.4 数字电子钟显示日期的显示图
120223.
4.3 设计系统误差分析
本数字电子钟在跟标准的电子钟比较时,时间稍微慢一点,产生此种情况的原因有:其一是在执行程序指令时,由于需要耗费一定的时间,因此会比标准的电子钟要慢一点。其二是晶振不够标准,使得定时器定时时不够精准。
第五章 设计小结
从硬件电路的设计到软件电路的设计,整个过程当中我学到了很多的东西,在绘制原理图时我查找了相关软件的使用方法,并悉心向老师和同学请教,学会对PROTEL和PROTEUS的使用;在软件系统的设计中,我遇到了很多的问题,不能把一些小模块系统联系起来,但通过不断的探索,最终把整个程序完整的编出来了,并能进行仿真使用;
本次的设计使我学到如何从理论转化为实践,怎样将我所学到的知识运用到我以后的工作中。通过单片机硬件电路的调试,实现了预先设定的功能,设计主要用到的元件不多,最主要的是程序也比较长比较麻烦,同时也遇到了不少困难,尤其是关于校时模块的设计实现。虽然过程中遇到了一些困难,但是在解决这些问题的过程无疑也是对自己自身专业素质的一种提高。此次的电子时钟设计给我奠定了一个实践基础,同时在查找资料的过程中我也学到了许多新的知识,在和同学协作过程中增进同学间的友谊,使我对团队精神的积极性和重要性有了更加充分的认识和理解。
致 谢
首先衷心感谢在此次课程设计中给予我帮助的老师及同学们,帮助我分析和解决问题。在开始设计的时候,经过老师悉心的指导和讲解,让我渐渐有自己的方案和选择方向,在每一步的进展当中,我都碰到了很多的问题,画原理图的时候和分析电子钟工作的原理以及怎么确定和修改,都是经过一步步修改而成的。设计软件的时候,因为是设计一个系统的程序,所以开始还没形成系统的思维,但在老师的讲解和同学的教导下,渐渐的将一个个子程序联系起来调试运行。在此,谨向给予我帮助的老师和同学深表言谢。
参考文献
[1]彭勇,叶晓勇,王万刚 单片机技术 北京 电子工业出版社 2009
[2]李广弟,朱月秀,冷祖祁 单片机基础[M].北京:北京航空航天大学出版社,2007
[3]刘湘涛.江世明.单片机原理与应用[M]. 北京:电子工业出版社,2006.
[4]李光飞.单片机课程设计实例指导[M].北京:北京航空航天大学出版社,2004.9
[5]朱定华.单片机原理及接口技术实验[M].北京:北方交通大学出版社2002.11
[6]张洪润,兰清华.单片机应用技术教程[M].北京:清华大学出版社,1997.11
附 录
*******************************************************************************
***;按键接P1.0~P1.3分别为K0、K1、K2、K3;**************************
***;数码管显示器段控口接单片机的P0口,位控口接单片机的P3口;*****
********************************************************************
**********;存储单元定义;*******************************************************
YEAR EQU 40H
MONTH EQU 41H
DAY EQU 42H
HOUR EQU 43H
MINUTE EQU 44H
SECOND EQU 45H
TIME EQU 46H
ORG 0000H
AJMP START
ORG 000BH
AJMP ET_0
START: LCALL LING
MOV TIME, #00H
MOV TMOD, #01H ;设置定时器的工作方式为方式一
MOV TH0, #(65536-50000)/256 ;定时50毫秒
MOV TL0, #(65536-50000)MOD 256
MOV IE, #82H
LOOP: LCALL DISPLAY0 ;显示P.
JNB P1.0, MAIN1
JMP LOOP
MAIN1: LCALL DISPLAY0
JNB P1.0, MAIN1
SETB TR0 ;开启定时器
*****************;主函数;******************************************************
MAIN: LCALL KEY
JB 20H.3, SET1
JB 20H.0, GUAN
JB 20H.2, RIQI
LCALL DISPLAY2 ;显示时分秒
AJMP MAIN
*********************;显示日期;************************************************
RIQI: LCALL DISPLAY1
LCALL KEY
JB 20H.2, MAIN
JMP RIQI
GUAN: MOV P2, #0FFH ;关显示
LCALL KEY
JB 20H.0, MAIN
JMP GUAN
***************;进入时分秒的调整界面;******************************************
SET1: CLR TR0 ;时分秒的调整
LCALL DISPLAY2
LCALL KEY
JB 20H.3, SET2
JB 20H.2, TS
JB 20H.1, TF
JB 20H.0, TM
JMP SET1
TS: INC HOUR ;时的调整
MOV A, HOUR ;是否达到了24小时到了就清零
CJNE A,#24, SET1
AJMP LL1
LL1: MOV HOUR, #0
JMP SET1
TF: INC MINUTE ;分的调整
MOV A, MINUTE ;是否达到了60分到了就清零
CJNE A, #60, SET1
AJMP LL2
LL2: MOV MINUTE, #0
JMP SET1
TM: INC SECOND ;秒的调整
MOV A, SECOND ;是否达到了60秒到了就清零
CJNE A,#60, SET1
AJMP LL3
LL3: MOV SECOND, #0
JMP SET1
SET2: LCALL KEY ;进入年月日的调整界面
LCALL DISPLAY1 ;显示年月日
JB 20H.3, EXIT
JB 20H.2, TN
JB 20H.1, TY
JB 20H.0, TR
JMP SET2
EXIT: SETB TR0 ;关定时器
JMP MAIN
TN: INC YEAR ;年的调整
MOV A, YEAR ;是否达到了99年到了就清零
CJNE A,#99, SET2
AJMP LL4
LL4: MOV YEAR, #0
JMP SET2
TY: INC MONTH ;月的调整
MOV A, MONTH ;是否达到了12月到了就清零
CJNE A,#13, SET2
AJMP LL5
LL5: MOV MONTH, #0
JMP SET2
TR: INC DAY ;日的调整
MOV A, YEAR ;看是闰年还是非闰年
MOV B, #4
DIV AB
MOV A, B
JZ WW1 ;闰年则转WW1
JMP WW2 ;非闰年则转WW2
WW1: MOV A, MONTH ;看是闰年的哪一月份
CJNE A,#2, LL6 ;是闰年中的2月则为29天 MOV A, DAY 到29就清零
CJNE A,#29, SET2
MOV DAY, #0
AJMP SET2
LL6: CJNE A,#4, LL7 ;闰年中的4、6、9、11为30天
MOV A, DAY 到30就清零
CJNE A,#30, SET2
MOV DAY, #0
AJMP SET2
LL7: MOV A, MONTH
CJNE A,#6, LL8
MOV A, DAY
CJNE A,#30, SET2
MOV DAY, #0
AJMP SET2
LL8: MOV A, MONTH
CJNE A,#9, LL9
MOV A, DAY
CJNE A,#30, SET2
MOV DAY, #0
AJMP SET2
LL9: MOV A, MONTH
CJNE A,#11, LLA
MOV A, DAY
CJNE A,#30, ZHUAN
MOV DAY, #0
AJMP SET2
LLA: AJMP WW6
WW6: MOV A, DAY ;闰年中的1、3、5、7、8、10、12月
CJNE A,#31, ZHUAN
MOV DAY, #0
ZHUAN:AJMP SET2
WW2: MOV A, MONTH ;看是闰年中的哪一月
CJNE A,#2, LL6 ;非闰年中的2月为28天,到28则清零
MOV A, DAY ;非润年中的4、6、9、11月为30天其他
CJNE A,#28,ZHUAN 31天
MOV DAY, #0
AJMP SET2
*********************;中断子程序和时间的增一;**********************************
ET_0: MOV TH0, #(65536-50000)/256
MOV TL0, #(65536-50000)MOD 256
INC TIME
MOV A, TIME
CJNE A,#20, DIAN
AJMP ZM
ZM: INC SECOND
MOV TIME, #0 ;TIME为20时SECOND加一同时对TIME
MOV A, SECOND 清零
CJNE A,#60, DIAN
ZF : INC MINUTE
MOV SECOND,#0 ;SECOND为60时MINUTE加一同时SECOND
MOV A, MINUTE 清零
CJNE A,#60, DIAN
ZS: INC HOUR ;MINUTE为60时HOUR加一同时MINUTE
MOV MINUTE,#0 清零
MOV A, HOUR
CJNE A,#24, DIAN
AJMP ZR ;HOUR为23时DAY加一同时HOUR清零
ZR: INC DAY
MOV HOUR, #0
MOV A, YEAR
MOV B, #4
DIV AB
JZ RUN ;闰年则转RUN
AJMP NRUN ;非闰年则转NRUN
DIAN: RETI ;是否为闰年中的2月,是则到了29就
RUN: MOV A, MONTH MONTH加一同时DAY清零
CJNE A,#3 ,NEXT1 ;是否为闰年中的4、6、9、11月,是则到
了 30MONTH就加一同时DAY清零
AJMP BB1 ;闰年中的1、3、5、7、8、10、12月为31
天到了31则MONTH加一DAY清零
NEXT1:MOV A, MONTH
CJNE A,#5, NEXT2
AJMP BB2
NEXT2:MOV A, MONTH
CJNE A,#7, NEXT3
AJMP BB2
NEXT3:MOV A, MONTH
CJNE A,#10, NEXT4
AJMP BB2
NEXT4:MOV A, MONTH
CJNE A,#12, NEXT5
AJMP BB2
NEXT5:AJMP BB3
BB1: MOV A, DAY
CJNE A,#30, DIAN
AJMP ZY
BB2: MOV A, DAY
CJNE A,#31, DIAN
AJMP ZY
BB3: MOV A, DAY
CJNE A,#32, DIAN
AJMP ZY
BB4: MOV A, DAY
CJNE A,#29, DIAN
AJMP ZY
NRUN: MOV A, MONTH
CJNE A,#3, NEXT6 ;非闰年中的2月到了28就MONTH
加一同时DAY清零
AJMP BB4 ;非闰年中的4、6、9、11月到了30天
NEXT6:MOV A, MONTH 则MONTH加一同时DAY清零 CJNE A,#5, NEXT7 ;非闰年中的1、3、5、7、8、10、12
AJMP BB2 月为31天到了则MONTH加一同时DAY清零
NEXT7:MOV A, MONTH
CJNE A,#7, NEXT8
AJMP BB2
NEXT8:MOV A, MONTH
CJNE A,#10, NEXT9
AJMP BB2
NEXT9:MOV A, MONTH
CJNE A,#12, NEXT5
AJMP BB2
ZY: INC MONTH
MOV DAY, #0
MOV A, MONTH
CJNE A,#14, DIAN
AJMP ZN
ZN: INC YEAR
MOV MONTH, #0
MOV A, YEAR
CJNE A,#100, DIAN
AJMP LING
*********************;初始显示值;**********************************************
LING: MOV YEAR, #12 ;显示器显示的初始值为日期12-02-23,
MOV MONTH, #02 时间 00-00-00
MOV DAY, #23
MOV HOUR, #00
MOV MINUTE, #00
MOV SECOND, #00
RET
*********************;键扫子程序;**********************************************
KEY: LCALL KEYCH ; 键扫程序,按键结果存入20H单元
JZ EXIT1
LCALL DELAY1
LCALL KEYCH
JZ EXIT1
KEYSF: MOV B, #20H
LCALL KEYCH
JZ KEY1
LCALL DELAY1
LJMP KEYSF
KEY1: MOV 20H, B
EXIT1: RET
KEYCH: PUSH PSW
CLR RS1
SETB RS0
MOV P1, #0FFH
MOV A, P1
CPL A;
ANL A, #0FH
MOV 20H, A
CLR RS1
CLR RS0
POP PSW
RET
******************;进入显示P.界面;********************************************
DISPLAY0:CLR P3.7 ;显示P.
MOV P0, #0F3H
LCALL DELAY1
SETB P3.7
RET
*********************;年月日显示界面;*****************************************
DISPLAY1:MOV DPTR, #TAB1 ;显示日期
MOV A, DAY
MOV B, #10
DIV AB
CLR P3.6
MOVC A, @A+DPTR
MOV P0, A
LCALL DELAY1
SETB P3.6
MOV A, B
CLR P3.7
MOVC A, @A+DPTR
MOV P0, A
LCALL DELAY1
SETB P3.7
CLR P3.5
LCALL DELAY1
SETB P3.5
MOV A, MONTH
MOV B, #10
DIV AB
CLR P3.3
MOVC A, @A+DPTR
MOV P0, A
LCALL DELAY1
SETB P3.3
MOV A, B
CLR P3.4
MOVC A, @A+DPTR
MOV P0, A
LCALL DELAY1
SETB P3.4
CLR P3.2
LCALL DELAY1
SETB P3.2
MOV A, YEAR
展开阅读全文