基于51的电子时钟的课程设计完整.docx
《基于51的电子时钟的课程设计完整.docx》由会员分享,可在线阅读,更多相关《基于51的电子时钟的课程设计完整.docx(23页珍藏版)》请在冰豆网上搜索。
基于51的电子时钟的课程设计完整
1,课题设计的目的和意义
学校给我们安排为期三周的单片机课程设计,可以说让我们受益匪浅。
细想,其目的及意义主要有以下几点:
,目的
通过单片机课程设计,加深对单片机的更深层次的理解,熟悉单片机的内部硬件资源,掌握单片机的编程方法及技巧,要学会对单片机的各部硬件资源的控制,分配,特别是掌握单片机中断,定时器的编程方法。
通过这次设计,要学会怎么利用所学单片机知识独立设计系统的能力,达到学于致用的目的,要学会发散创造设计编程思想,要学会开发系统的一般过程,并不断创新。
,意义
作为一名自动化专业的大三学生,做单片机课程设计是十分有意义的,而且是十分必要的。
在已度过的大学时间里,我们大多数接触的是专业课。
我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力?
如何把我们所学的专业基础课理论知识运用到实践中去呢?
我想做类似的课程设计就为我们提供了良好的实践平台。
在这次课程设计中,我们运用到了以前所学的专业课知识以及一些实践性很强的软件和工具,如:
Protel制图、Proteus仿真,WAWE仿真设备,汇编语言编译软件keil、单片机的原理等。
虽然过去从未独立应用过它们,但在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的又一很大收获。
2,系统方案设计及确定
,设计思路
其中硬件由AT89S51单片机、六位LED驱动及显示电路、独立式键盘电路、蜂鸣器组成,其中显示采用动态显。
时钟的定时用定时器T0以50MS中断20次,从而实现一秒准确记时。
秒表的定时用定时器T1以10ms中断1次记时。
精度达到0.01秒。
键盘将采用查询的方式判别。
最终成品是以可整电报时,调时,省电模式的时钟为主体,另外还可切换到秒表的电子钟系统。
时钟功能
利用单片机片内定时器(如T0)产生1s计时,自行设定时钟计数单元地址,包括秒单元、分单元、时单元,最大计数值为23时59分59秒。
用6位LED数码管显示时、分、秒,以24<小>时计时方式运行;
使用按键可实现时、分调整,可增加“熄灭符”用于时间调整时的闪烁功能
秒表功能
能通过按键实现秒表/时钟功能之间的转换;
利用单片机内部定时器(如T1)实现秒表的计时,自行设定秒表计数单元地址,包括10ms单元、秒单元、分单元,通过4位LED数码管显示,最大计数值为99.99秒。
可通过按键实现秒表的暂停、清零、启动。
整点报时功能
可通过软件查询判断时钟是否到整点,如果到了,进一步判断几点,并驱动蜂鸣器想几下,能整点提醒(短蜂鸣,次数代表整点时间)
省电模式
可通过按键使系统进入省电状态(数码管不亮,时钟不停)。
3,系统硬件设计
3.1AT89S51最小系统设计
片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统。
.
对51系列单片机来说,最小系统一般应该包括:
MCS-51系列单片机、晶振电路、复位电路以及一个稳定的5V电源,正极接在40脚,20管脚接地,
控制引脚EA接法。
EA/VPP(31脚)为内外程序存储器选择控制引脚,当EA为低电位时,单片机从外部程序存储器取指令;当EA接高电平时,单片机从内部程序存储器取指令。
。
。
AT89S51单片机内部有4KB可反复擦写1000次以上的程序存储器,因此我们把EA接到+5V高电平,让单片机运行内部的程序,我们就可以通过反复烧写来验证我们的程序了。
下面给出一个51单片机的最小系统电路图.
3.1.1时钟电路硬件设计
时钟电路即晶振电路:
典型的晶振取11.0592MHz(因为可以准确地得到9600波特率和19200波特率,用于有串口通讯的场合,计算的初值为整数,可减小误差)/12MHz(产生精确的uS级时歇,方便定时操作),晶振两端各接一个30pF的微调电容然后接地,可使晶振工作在稳定状态。
3.1.2复位电路硬件设计
复位电路:
由电容串联电阻构成,由图并结合"电容电压不能突变"的性质,可以知道,当系统一上电,RST脚将会出现高电平,并且,这个高电平持续的时间由电路的RC值来决定.典型的51单片机当RST脚的高电平持续两个机器周期以上就将复位,所以,适当组合RC的取值就可以保证可靠的复位.一般教科书推荐C取10u,R取10K.当然也有其他取法的,原则就是要让RC组合可以在RST脚上产生不少于2个机周期的高电平.
3.2键盘、显示电路硬件设计
键盘接口分为独立式键盘接口和行列式键盘接口。
我们用的是查询独立式键盘接口,键盘直接与AT8S51单片机的I/O口线连接,通过I/O口判断I/O口线的电平状态,既可以识别按下的键。
3.2.1键盘电路硬件设计
四位独立键盘直接在I/O口,并接地。
可通过查询低电平看键盘是否按下。
3.2.2显示电路硬件设计
电路采用74HCC573驱动,结构采用总线扩展方式进行设计,其中使用的数码管为连8位的共阴型数码管。
通过芯片U2(74HC573)锁存,为数码管提供段码数据。
通过芯片U1(74HC573)进行位选。
但由于全部数码管的段码线共用,在同一时刻只能点亮一个数码管,所以在实际应用中必须采用动态扫描的方式进行8个数码管的显示。
具体实现方法是使用内部定时器每2ms产生一次定时中断,系统在每进入到一次定时中断后更新一次显示内容,对于每个数码管来说其显示的周期为10ms,由于显示频率足够高人眼感觉不到闪烁的存在。
本设计通过延时程序产生10ms的效果
4.系统软件设计
4.1系统主程序设计
系统主程序主要完成所有存储单元的初始化,定时器T0,T1工作方式的设定,处置的设置,中断系统的开启以及在等待是调用显示程序,查询键盘状态。
4.1.1系统主程序流程图
4.1.2系统软件设计内存分配及芯片地址介绍
在设计程序指出对于其内存的分配是非常有必要的,合理的分配内存可避免内存的冲突,指导我们合理的去设计程序。
30H,31H,32H,33H,34H,35H:
这六个单元为时钟时,分,秒的十位和个位存储单元,同时为显存。
52H,53H,54H,55H,56H:
为秒表的四位存储单元,分别为10秒,1秒,0.1秒,0.01秒。
R0~R7:
用于直接间接的存储单元。
P1.0~P1.3接四个独立式键盘,P1.7用来驱动蜂鸣器,P1口输出LED的段码,P2.0~P2.5为LED的位选。
4.2定时器设计
如下面流程图所示,时钟的定时程序由定时器T0定时产生。
设置T0工作方式为方式1,送入初值为4C00H,此时T0产生一次中断为50ms,当进入中断服务程序后判别中断次数是否到20次(50ms×20=1s),中断20次后进入秒个位单元的加以几判断比较程序,否则直接出中断等待下。
定时器程序流程图:
4.3秒表设计
在时钟显示状态下可由键盘切换至秒表。
键盘按一次时,进入秒表程序,并且调用秒表显示程序,从而达到秒表只显示四个零,处于预备状态。
当键盘第二次按下后,开启秒表定时器T1,其中工作在方式1,初值为0DC00H,为10ms中断一次,即0.01秒中断一次并且调用加以程序。
键盘第三次按下后,关闭定时器T1并且调用现实,达到保持当前计数值的效果。
键盘第四次按下是直接出秒表子程序,回到时钟显示。
在秒表运行是由于定时器T0的中断优先级高于T1,所以时钟的定时器不受影响。
4.4其他主要子程序设计
省电模式子程序:
省电模式使LED现实关闭即可做到。
首先设置一个标志寄存器,在查到省电模式键盘按下进入子程序时给该单元加一并且给P0口送入00H
让LED熄灭,出子程序,当查询到第二次有键按下时,给标记单元减一,出子程序。
同时在每次调用显示是查询标志寄存器是一不调用现实,是0则不调用.
整点报时子程序:
在主程序里调用子程序,判断30H,31H,32H,33H是否为零,是,说明为整点,把小时时单元的十位乘十加个位为蜂鸣器鸣响的次数.
5系统调试
用Keil软件编辑,编译程序,如果有错误进行修改,确保程序无误,然后生成HEX文件。
用Proteus仿真软件画出数字时钟的硬件原理图,软后把Keil生成的HEX文件烧写进Proteus中的单片机中,进行仿真。
仿真效果如下:
当Proteus仿真效果出来后,再将hex文件用Easy51Pro软件以ISP方式烧写到AT89S51单片机中,进行硬件运行。
如对程序有修改,重复1-3步骤。
6总结
经过两个星期的努力,课程设计终于大告成功了。
整个设计通过了软件和硬件上的调试、仿真。
我想这对于自己以后的学习和工作都会有很大的帮助。
在这次设计中遇到了很多实际性的问题,在实际设计中才发现,书本上理论性的东西与在实际运用中的还是有一定的出入的,所以有些问题不但要深入地理解,而且要不断地更正以前的错误思维。
一切问题必须要靠自己一点一滴的解决,而在解决的过程当中你会发现自己在飞速的提升。
对于单片机设计,其硬件电路是比较简单的,主要是解决程序设计中的问题,而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力,它才是一个设计的灵魂所在。
因此在整个设计过程中大部分时间是用在程序上面的。
很多子程序是可以借鉴书本上的,但怎样衔接各个子程序才是关键的问题所在,这需要对单片机的结构很熟悉。
因此可以说单片机的设计是软件和硬件的结合,二者是密不可分的。
通过这次课程设计我也发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努力才得以解决。
这也激发了我今后努力学习的兴趣,我想这将对我以后的学习产生积极的影响。
通过成了单片机的课程设计。
单片机课程设计,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,并不断地去开动自己的大脑
同时也总结了很多问题:
1.在设计程序之前,务必要对所用单片机的内部结构有一个系统的了解,知道该单片机片内有哪些资源.
2.设计程序采用什么编程语言并不是非常重要,关键要有一个清晰的思路和一个完整的软件流程图.
3.在设计程序时,不能妄想一次就将整个程序设计好,"反复修改,不断改进"是程序设计的必经之路.
4.要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便.
5.在设计程序过程中遇到问题是很正常的,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题.
我觉得课程设计反映的是一个从理论到实际应用的过程,但是更远一点可以联系到以后毕业之后从学校转到踏上社会的一个过程。
小组人员的配合,以及自身的动脑和努力,都是以后工作中需要的。
所以我认为这次的课程设计意义很深,和其他3位同学的共同学习﹑配合﹑努力的过程也很愉快,另外还要感谢老师的耐心辅导。
参考文献
[1]张俊谟.单片机原理与应用[M].北京:
北京航空航天大学出版社.2000.6
[2]闰玉德,俞虹.MCS一51单片机原理与应用[M].北京:
机械工业出版社.2003.
[3]孙裕晶,沙玲,赵红霞.实用控制系统设计教程[M].长春:
吉林大学出版社.2000.
[4]李及,赵利民.MCS一51系列单片机原理与应用[M].长春:
吉林科学技术出版社.1995.
[5]姚君遗.汇编语言程序设计[M].北京:
经济科学出版社.2000.
附录
程序清单:
ORG0000H
ORG0000H
LJMPSTART
ORG000BH
LJMPINTT0
ORG001Bh
LJMPJIN
START:
;主程序
MOV30H,#0
MOV31H,#2
MOV32H,#5
MOV33H,#9
MOV34H,#5
MOV35H,#8
MOV52H,#0
MOV53H,#0
MOV54H,#0
MOV55H,#0
MOV56H,#0
MOVR0,#0
movR1,#0
movR2,#0
MOVR3,#0
MOVR4,#0
MOVR5,#0
MOVR6,#0
MOVR7,#0
MOVTMOD,#11H
MOVTL0,#00H
MOVTH0,#4CH
MOVTL1,#00H
MOVTH1,#0DCH
SETBEA
SETBET0
SETBET1
SETBTR0
MOVR0,#14H
lp:
CJNER1,#0,L0
LCALLXS
L0:
JNBP1.1,SETled;键盘查询
JNBP1.2,SETTIM1
JNBP1.3,SETTIM2
JNBP1.0,MIAO
SJMPLP
SETled:
LJMPclrled
SETTIM1:
AJMPMIN
SETTIM2:
AJMPHOU
MIAO:
INC56H
MOVR5,56H
LJMPXS0
MIN:
JNBP1.2,MIN
LCALLSETMIN
MOVA,33H
CJNEA,#0,LP
LCALLSETMIN1
AJMPLP
HOU:
JNBP1.3,HOU
LCALLSETHOU
MOVA,31H
movr7,30h
CJNEA,#0,LP
LCALLSETHOU1
AJMPLP
XS:
MOV40H,#20H;显示子程序
MOVDPTR,#TAB
MOVP2,40H
MOVA,30H
MOVCA,@A+DPTR
MOVP0,A
LCALLYS1MS
MOVP0,#00H
MOVA,40H
RRA
MOV40H,A
MOVP2,40H
MOVA,31H
ADDA,#10
MOVCA,@A+DPTR
MOVP0,A
LCALLYS1MS
MOVP0,#00H
MOVA,40H
RRA
MOV40H,A
MOVP2,40H
MOVA,32H
MOVCA,@A+DPTR
MOVP0,A
LCALLYS1MS
MOVP0,#00H
MOVA,40H
RRA
MOV40H,A
MOVP2,40H
MOVA,33H
ADDA,#10
MOVCA,@A+DPTR
MOVP0,A
LCALLYS1MS
MOVP0,#00H
MOVA,40H
RRA
MOV40H,A
MOVP2,40H
MOVA,34H
MOVCA,@A+DPTR
MOVP0,A
LCALLYS1MS
MOVP0,#00H
MOVA,40H
RRA
MOV40H,A
MOVP2,40H
MOVA,35H
MOVCA,@A+DPTR
MOVP0,A
LCALLYS1MS
MOVP0,#00H
MOVA,40H
RRA
MOV40H,A
RET
clrled:
JNBP1.1,clrled
CJNER1,#0,X1
mov43h,#00h
movp0,43h
INCR1
ajmpLP
X1:
DECR1
AJMPLP
INTT0:
PUSHACC;T0中断服务程序
PUSHPSW
CLRET0
CLRTR0
MOVTL0,#00H
MOVTH0,#4CH
SETBTR0
DJNZR0,OUT
MOVR0,#14H
LCALLBELL
CJNER1,#0,JIA
LCALLXS
JIA:
MOVA,35H
CJNEA,#9,JIA35
MOV35H,#0
MOVA,34H
CJNEA,#5,JIA34
MOV34H,#0
LCALLSETMIN
MOVA,33H
CJNEA,#0,OUT
LCALLSETMIN1
MOVA,32H
CJNEA,#0,OUT
LCALLSETHOU
MOVA,31H
MOVR7,30H
CJNEA,#0,OUT
LCALLSETHOU1
OUT:
POPPSW
POPACC
SETBET0
RETI
SETMIN:
MOVA,33H
CJNEA,#9,JIA33
MOV33H,#0
X4:
RET
SETMIN1:
MOVA,32H
CJNEA,#5,JIA32
MOV32H,#0
X5:
RET
SETHOU:
MOVA,31H
CJNEA,#9,JIA31
MOV31H,#0
X6:
RET
SETHOU1:
MOVA,30H
CJNEA,#2,JIA30
MOV30H,#0
X7:
RET
JIA30:
INC30H
AJMPX7
JIA31:
CJNEA,#3,JIAJIA
MOVA,30H
CJNEA,#02,JIAJIA
MOV30H,#0
MOV31H,#0
AJMPX6
JIAJIA:
INC31H
AJMPX6
JIA32:
INC32H
AJMPX5
JIA33:
INC33H
AJMPX4
JIA34:
INC34H
AJMPOUT
JIA35:
INC35H
AJMPOUT
BELL:
MOVR2,35H
MOVR3,34H
MOVR4,30H
MOVR5,31H
MOVR6,32H
MOVR7,33H
CJNER2,#00H,OUT1
CJNER3,#00H,OUT1
CJNER6,#00H,OUT1
CJNER7,#00H,OUT1
MOVB,#10
movA,R4
MULAB
ADDA,R5
movr5,a
cjner5,#0,X3
movr5,#24
X3:
CLRP1.7
lcalldel
setbp1.7
LCALLDEL
djnzr5,x3
OUT1:
RET
XS0:
JNBP1.0,XS0
CJNER5,#1,N1
AJMPXS1
N1:
CJNER5,#2,N2
AJMPZZ
N2:
CJNER5,#3,N3
CLRET1
CLRTR1
AJMPXS1
N3:
CJNER5,#4,N4
N4:
MOV56H,#0
LCALLCLRMIAO
MOVTL1,#00H
MOVTH1,#0DCH
SETBET1
LJMPLP
ZHUAN:
JNBP1.0,ZHUAN
LJMPMIAO
ZZ:
SETBTR1
XS1:
JNBP1.0,ZHUAN
MOV45H,#08H
MOVDPTR,#TAB
MOVP2,45H
MOVA,52H
MOVCA,@A+DPTR
MOVP0,A
LCALLYS1MS
MOVP0,#00H
MOVA,45H
RRA
MOV45H,A
MOVP2,45H
MOVA,53H
ADDA,#10
MOVCA,@A+DPTR
MOVP0,A
LCALLYS1MS
MOVP0,#00H
MOVA,45H
RRA
MOV45H,A
MOVP2,45H
MOVA,54H
MOVCA,@A+DPTR
MOVP0,A
LCALLYS1MS
MOVP0,#00H
MOVA,45H
RRA
MOV45H,A
MOVP2,45H
MOVA,55H
MOVCA,@A+DPTR
MOVP0,A
LCALLYS1MS
MOVP0,#00H
MOVA,45H
RRA
MOV45H,A
AJMPXS1
CLRMIAO:
MOV52H,#0
MOV53H,#0
MOV54H,#0
MOV55H,#0
RET
JIN:
PUSHACC
PUSHPSW
CLRET1
CLRTR1
MOVTL1,#00H
MOVTH1,#0DCH
SETBTR1
MOVA,55H
CJNEA,#9,JIN1
MOV55H,#0
MOVA,54H
CJNEA,#9,JIN10
MOV54H,#0
MOVA,53H
CJNEA,#9,JIN100
MOV53H,#0
MOVA,52H
CJNEA,#9,JIN1000
MOV52H,#0
AJMPOUT3
JIN1000:
INC52H
AJMPOUT3
JIN100:
INC53H
AJMPOUT3
JIN10:
INC54H
AJMPOUT3
JIN1:
INC55H
AJMPOUT3
OUT3:
POPPSW
POPACC
SETBET1
RETI
YS1MS:
MOVR6,#9H
YL1:
MOVR7,#10H
DJNZR7,$
DJNZR6,YL1
RET
del:
movr7,#255
del1:
movr6,#255
djnzr6,$
djnzr7,del1
ret
TAB:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
DB0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH
End