时钟系统设计信息工程学院摘要:本设计主要设计了一个基于AT89C51单片机的电子时钟。并在数码管上显示相应的时间。并通过几个键盘开关来调整时间和设定闹钟。应用Proteus7和keil软件实现了单片机电子时钟系统的设计与仿真。该方法仿真效果真实、准确,节省了硬件资源。关键词:AT89C51单片机;时钟;键盘控制1.设计内容时钟系统是在89C51单片机、keil和proteus7的环境下来设计。系统功能具有显示时、分、秒、和隐藏闹钟的时与分。8位数码管前两位是时,中间两位是分钟,后面两位是秒钟,中间用-来隔开。系统应用按键来调整时间,K1是换位键,K2是加1键,K3是减1键。运用三个键盘修改当前时间和闹钟时间。K4键是控制闹钟的是否响铃。1.1设计目的通过课程设计,使学生巩固和加深对单片机基本知识的理解,学会查寻资料、方案设计、方案比较,以及单元电路设计计算等环节,进一步提高学生综合运用所学知识的能力,提高分析解决实际问题的能力。锻炼分析、解决电子电路问题的实际本领,通过此综合训练,为以后毕业设计打下一定的基础。2.设计方案2.1:硬件电路的原理及设计本设计电路,硬件部分共由五个模块组成:按键模块、复位电路模块、晶振电路模块、蜂鸣器模块、时间显示模块。晶振电路模块负责给单片机提供时钟周期。复位单路模块负责上电后自动复位,或按键后强制复位。上电后,由单片机内部定时器计时,同时通过动态显示函数自动将时分秒显示到数码管上。与此同时,按键扫描函数,一直扫描按键引脚状态,一旦扫描到按键被按下,即进入相应的功能函数。如果检测到定时时间到,则驱动蜂鸣器发声提示。硬件整体结构图如下:1、AT89C51AT89C51是一种带4K字节FLASH存储器的低电压、高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪速存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。AT89C51提供以下标准功能:4k字节Flash闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。AT89C512、时钟/复位电路时钟/复位电路当MCS-5l系列单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就执行复位操作。如果RST持续为高电平,单片机就处于循环复位状态。根据应用的要求,复位操作通常有两种基本形式:上电复位和上电或开关复位。上电复位要求接通电源后,自动实现复位操作。上电后,保持RST一段高电平时间。3、七段数码管电路七段数码管电路本人使用的是共阴极数码管,共阴极LED显示器的发光二极管阴极共地,当某个发光二极管的阳极为高电平时,该发光二极管则点亮。本设计中采用的是共阴七段数码管,其中段选接单片机AT89C51的P0口,位选接的是单片机AT89C51的P2口,如下图所示,利用动态显示从左边依次对应显示的数字为时钟的时、分、秒(1—9的数字显示对应的十六进制参照上面的表)中间的一杠(对应的十六进制为0x40)将秒分时隔开比较美观.单个数码管分为a、b、c、d、e、f、g、dp八个段如下图从高到底为dp、g、f、e、d、c、b、a,共阴极则对应口输入1时,该对应的管就亮。共阳时对应输入0时,对应管亮。当输入8个端口对应的数组为{0x3f,0x06,0x5b,0x4f,0X66,0X6d,0X7d,0X07,0X7f,0x6f}时,对应显示的数字为{0、1、2、3、4、5、6、7、8}。8个数码管将其输入口接一起,则在同一时刻只能显示1个数字。这时用段选设置显示哪一个数码管,对应位数为0时,显示改位数码管的数字。在时钟显示中需要显示多个数字,利用视觉延迟,快速逐个显示数字,使其看起来效果和同时显示一样。4、键盘电路K1、K2、K3、K4键盘在该模块中,采用四个按键作为电子时钟的控制输入,通过按键来实现时钟的时间设置、定时、秒表功能。电路中将四个按键的一端接公共地,而单片机的P2口默认为高电平,一旦按键被按下,则该按键对应的额管脚被拉低,通过软件扫描按键即可知道用户所要实现的功能,调用相应的按键子程序来完成该操作。按键的去抖动由软件来实现。K1是换位键,每次按一下,就切换一个数码管位置。按第一下是到秒位(第一次),则不管按K2或者K3,秒位复位,切换置00。当K1再次按下时(第两次),切换到分位,每按一次K2,分位数字+1;按一次K3,分位数字-1。再次按下K1(第三次),切换到时位,每按一次K2,时位数字+1;按一次K3,时位数字-1。继续按下K1(第四次),切换到闹钟分位,每按一次K2,时位数字+1;按一次K3,时位数字-1。继续按下k1(第五次),切换到闹钟时位,每按一次K2,时位数字+1;按一次K3,时位数字-1。最后按下K1(第六次),切换到正常显示时间。K4是控制蜂鸣器的开关,当K4向上拨时,时钟走到设定的闹钟时间,那么蜂鸣器就会响起来,当K4向下波时候,无论时钟走到什么时候,蜂鸣器都不会响。5、蜂鸣器电路蜂鸣器电路当时钟的时刻走到设定闹钟的时刻时,K4向上拨,蜂鸣器响起。K4向下拨,蜂鸣器无反应。当时钟的时钟走出设定的闹钟时刻,无论K4拨向哪里,蜂鸣器都无反应。6、硬件电路原理图硬件电路原理图该原理图我运用BusesMode来连线,P0.0-P0.7一一对应连接到数码管的ABCDEFGDP再把P0.0-p0.7连接到上拉电阻,p2.0-p2.7一一对应连接到数码管的12345678。其他跟上图所示一样。开始仿真效果图仿真一段时间效果图调试闹钟图3、软件设计3.1程序流程图主程序数码管显示程序主函数:voidmain(){M=0;A=0;shi1=23;fen1=59;TMOD=0x11;//设置中断TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;//中断总开关ET0=1;//开定时器0的中断开关TR0=1;//启动定时器0while(1)//实时扫描{display();//显示函数keyscan();//键盘函数setdisplay();//设置时间函数}}按键流程图中断函数流程图中断函数:voidtime0()interrupt1//方式1,T0{TH0=(65536-50000)/256;TL0=(65536-50000)%256;//重装初值num++;if(num==20)//中断20次,总共的时间为1秒{{A=!A;num=0;}miao++;//秒+1if(miao==60){miao=0;fen++;//分+1if(fen==60){fen=0;shi++;//时+1if(shi==24){shi=0;}}}if(shi==shi1&&fen==fen1&&miao59)//闹钟时间到,响铃1分钟beep=!beep;//蜂鸣器低电平有效elsebeep=1;}}4、仿真结果分析进过不懈的努力,我们顺利完成了这次单片机课程设计课题中的个性化电子时钟设计,本次仿真总的来说是实现了预期的效果,但是喇叭把的效果不是很好。功能还不够完善,设计还比较简单。不过通过此次设计我们还是学会了不少东西。首先,学会了keil和proteus软件。然后,由于此次程序是用C语言编写的,以前的C语言知识的到了巩固。同时,我们还领悟到了团队精神的真谛。通过这次的设计使我认识到本人对单片机方面的知识知道的太少了,对于书本上的很多知识还不能灵活运用,尤其是对程序设计语句的理解和运用,不能够充分理解每个语句的具体含义总的来说,本次的设计使我从中学到了最重要的东西,那就是如何从理论到实践的转化,怎样将我所学到的知识运用到我以后的工作中去。在大学的课堂的学习只是在给我们灌输专业知识,而我们应把所学的用到我们现实的生活中去,此次的电子时钟设计给我奠定了一个实践基础,我会在以后的学习、生活中磨练自己,使自己适应于以后的竞争,同时在查找资料的过程中我也学到了许多新的知识,在和同学协作过程中增进同学间的友谊,使我对团队精神的积极性和重要性有了更加充分的理解。5、参考文献1、《百度百科》