数字电子钟的设计课程设计论文 精品Word文档下载推荐.docx
《数字电子钟的设计课程设计论文 精品Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数字电子钟的设计课程设计论文 精品Word文档下载推荐.docx(27页珍藏版)》请在冰豆网上搜索。
2.1.2键盘模块6
2.1.3LED显示电路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.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—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
时钟电路由一个12MHZ的石英晶体振荡器和两个22pF的的电容组成振荡电路和分频电路,为单片机提供内部时钟。
复位电路采用上电复位和按键复位结合的方式对电路进行复位,主要是通过RST引脚送入单片机。
2.1.2键盘模块
采用独立式键盘接法,共有四个按键来对电路进行控制。
分别接在单片机的P1口线上。
一个键控制开和关,一个键负责调整,另外两个键辅助调整。
2.1.3LED显示电路
采用六个共阳的数码管显示器进行显示,加上一个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.1Protues仿真电路图
数字电子钟正常工作时,仿真的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口;
*****
********************************************************************
**********;
存储单元定义;
*******************************************************
YEAREQU40H
MONTHEQU41H
DAYEQU42H
HOUREQU43H
MINUTEEQU44H
SECONDEQU45H
TIMEEQU46H
ORG0000H
AJMPSTART
ORG000BH
AJMPET_0
START:
LCALLLING
MOVTIME,#00H
MOVTMOD,#01H;
设置定时器的工作方式为方式一
MOVTH0,#(65536-50000)/256;
定时50毫秒
MOVTL0,#(65536-50000)MOD256
MOVIE,#82H
LOOP:
LCALLDISPLAY0;
显示P.
JNBP1.0,MAIN1
JMPLOOP
MAIN1:
LCALLDISPLAY0
SETBTR0;
开启定时器
*****************;
主函数;
******************************************************
MAIN:
LCALLKEY
JB20H.3,SET1
JB20H.0,GUAN
JB20H.2,RIQI
LCALLDISPLAY2;
显示时分秒
AJMPMAIN
*********************;
显示日期;
************************************************
RIQI:
LCALLDISPLAY1
JB20H.2,MAIN
JMPRIQI
GUAN:
MOVP2,#0FFH;
关显示
LCALLKEY
JB20H.0,MAIN
JMPGUAN
***************;
进入时分秒的调整界面;
******************************************
SET1:
CLRTR0;
时分秒的调整
LCALLDISPLAY2
JB20H.3,SET2
JB20H.2,TS
JB20H.1,TF
JB20H.0,TM
JMPSET1
TS:
INCHOUR;
时的调整
MOVA,HOUR;
是否达到了24小时到了就清零
CJNEA,#24,SET1
AJMPLL1
LL1:
MOVHOUR,#0
TF:
INCMINUTE;
分的调整
MOVA,MINUTE;
是否达到了60分到了就清零
CJNEA,#60,SET1
AJMPLL2
LL2:
MOVMINUTE,#0
TM:
INCSECOND;
秒的调整
MOVA,SECOND;
是否达到了60秒到了就清零
CJNEA,#60,SET1
AJMPLL3
LL3:
MOVSECOND,#0
JMPSET1
SET2:
LCALLKEY;
进入年月日的调整界面
LCALLDISPLAY1;
显示年月日
JB20H.3,EXIT
JB20H.2,TN
JB20H.1,TY
JB20H.0,TR
JMPSET2
EXIT:
SETBTR0;
关定时器
JMPMAIN
TN:
INCYEAR;
年的调整
MOVA,YEAR;
是否达到了99年到了就清零
CJNEA,#99,SET2
AJMPLL4
LL4:
MOVYEAR,#0
TY:
INCMONTH;
月的调整
MOVA,MONTH;
是否达到了12月到了就清零
CJNEA,#13,SET2
AJMPLL5
LL5:
MOVMONTH,#0
TR:
INCDAY;
日的调整
MOVA,YEAR;
看是闰年还是非闰年
MOVB,#4
DIVAB
MOVA,B
JZWW1;
闰年则转WW1
JMPWW2;
非闰年则转WW2
WW1:
看是闰年的哪一月份
CJNEA,#2,LL6;
是闰年中的2月则为29天MOVA,DAY到29就清零
CJNEA,#29,SET2
MOVDAY,#0
AJMPSET2
LL6:
CJNEA,#4,LL7;
闰年中的4、6、9、11为30天
MOVA,DAY到30就清零
CJNEA,#30,SET2
AJMPSET2
LL7:
MOVA,MONTH
CJNEA,#6,LL8
MOVA,DAY
LL8:
CJNEA,#9,LL9
LL9:
CJNEA,#11,LLA
CJNEA,#30,ZHUAN
LLA:
AJMPWW6
WW6:
MOVA,DAY;
闰年中的1、3、5、7、8、10、12月
CJNEA,#31,ZHUAN
ZHUAN:
AJMPSET2
WW2:
MOVA,MONTH;
看是闰年中的哪一月
非闰年中的2月为28天,到28则清零
非润年中的4、6、9、11月为30天其他
CJNEA,#28,ZHUAN31天
中断子程序和时间的增一;
**********************************
ET_0:
MOVTH0,#(65536-50000)/256
MOVTL0,#(65536-50000)MOD256
INCTIME
MOVA,TIME
CJNEA,#20,DIAN
AJMPZM
ZM:
INCSECOND
MOVTIME,#0;
TIME为20时SECOND加一同时对TIME
MOVA,SECOND清零
CJNEA,#60,DIAN
ZF:
INCMINUTE
MOVSECOND,#0;
SECOND为60时MINUTE加一同时SECOND
MOVA,MINUTE清零
ZS:
INCHOUR;
MINUTE为60时HOUR加一同时MINUTE
MOVMINUTE,#0清零
MOVA,HOUR
CJNEA,#24,DIAN
AJMPZR;
HOUR为23时DAY加一同时HOUR清零
ZR:
INCDAY
MOVHOUR,#0
MOVA,YEAR
MOVB,#4
JZRUN;
闰年则转RUN
AJMPNRUN;
非闰年则转NRUN
DIAN:
RETI;
是否为闰年中的2月,是则到了29就
RUN:
MOVA,MONTHMONTH加一同时DAY清零
CJNEA,#3,NEXT1;
是否为闰年中的4、6、9、11月,是则到
了30MONTH就加一同时DAY清零
AJMPBB1;
闰年中的1、3、5、7、8、10、12月为31
天到了31则MONTH加一DAY清零
NEXT1:
MOVA,MONTH
CJNEA,#5,NEXT2
AJMPBB2
NEXT2:
CJNEA,#7,NEXT3
NEXT3:
CJNEA,#10,NEXT4
NEXT4:
CJNEA,#12,NEXT5
NEXT5:
AJMPBB3
BB1:
CJNEA,#30,DIAN
AJMPZY
BB2:
CJNEA,#31,DIAN
BB3:
CJNEA,#32,DIAN
BB4:
CJNEA,#29,DIAN
AJMPZY
NRUN:
CJNEA,#3,NEXT6;
非闰年中的2月到了28就MONTH
加一同时DAY清零
AJMPBB4;
非闰年中的4、6、9、11月到了30天
NEXT6:
MOVA,MONTH则MONTH加一同时DAY清零CJNEA,#5,NEXT7;
非闰年中的1、3、5、7、8、10、12
AJMPBB2月为31天到了则MONTH加一同时DAY清零
NEXT7:
MOVA,MONTH
CJNEA,#7,NEXT8
NEXT8:
CJNEA,#