当前位置:首页 > 电子/通信 > 综合/其它 > 基于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高电平,让单片机运行内部的程序,我们就可以通过反复烧写来验证我们的程序了。按键输入电路时钟电路AT89S51单片机复位电路蜂鸣器驱动电路LED段码驱动电路六位LED位码驱动电路显示电路下面给出一个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秒。设置各中断服务程序入口地址相关寄存器零,初值化设置,定时器T0\T1初始化设置调用时间显示程序调用整点查询程序返回到显示程序是否为整点蜂鸣器响YNR0~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,所以时钟的定时器不受影响。标志寄存器加一判断标志寄存器是否为1判断标志寄存器是否为2判断标志寄存器是否为3判断标志寄存器是否为4否否否是是是是调用秒表显示开启定时器T1关闭定时器T1调用清0程序退出秒表子程序4.4其他主要子程序设计省电模式子程序:省电模式使LED现实关闭即可做到。首先设置一个标志寄存器,在查到省电模式键盘按下进入子程序时给该单元加一并且给P0口送入00H让LED熄灭,出子程序,当查询到第二次有键按下时,给标记单元减一,出子程序。同时在每次调用显示是查询标志寄存器是一不调用现实,是0则不调用.整点报时子程序:在主程序里调用子程序,判断30H,31H,32H,33H是否为零,是,说明为整点,把小时时单元的十位乘十加个位为蜂鸣器鸣响的次数.32H,33H,34H,35H是否为零p1.7置0,驱动蜂鸣器是退出子程序否开始小时时位个位相加存入R5R5减一R5是否为0是否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.附录程序清单:ORG0000HORG0000HLJMPSTARTORG000BHLJMPINTT0ORG001BhLJMPJINSTART:;主程序MOV30H,#0MOV31H,#2MOV32H,#5MOV33H,#9MOV34H,#5MOV35H,#8MOV52H,#0MOV53H,#0MOV54H
本文标题:基于51的电子时钟的课程设计(完整)
链接地址:https://www.777doc.com/doc-3603062 .html