1、单片机电子时钟系统摘 要单片计算机即单片微型计算机。由RAM ,ROM,CPU构成,定时,计数和多种接口于一体的微控制器。它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。而51系列单片机是各单片机中最为典型和最有代表性的一种。这次课程设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。 本设计主要设计了一个基于AT89C51单片机的电子时钟。在数码管通过一个控制键转换来显示相应的时间和日期。并通过多个控制键用来实现时间和日期的调节。应用keil软件实现单片机电子时钟系统的程序设计,用Proteus的ISIS软件实现仿真。该方法仿真效果真实、准确,节省了硬件资源。现代的电
2、子时钟是基于单片机的一种计时工具,采用延时程序产生一定的时间中断,用于一秒的定义,通过计数方式进行满六十秒分钟进一,满六十分小时进一,满二十四小时小时清零。从而达到计时的功能,是人民日常生活不可缺少的工具。数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时、分、秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。在这里我们将已学过的比较零散的数字电路的知识有机的、系统的联系起来用于实际,来培养我们的综合分析和设计电路,写程序、调试电路的能力。关键词:单片机;时钟;键盘控制;C语言I1 设计任务 设计任务:1. 用6个7段
3、LED数码管作为显示设备,设计时钟功能; 2. 可以分别设定小时、分钟和秒,复位后时间为00:00:00; 3. 秒钟复位功能,秒复位键按下后,秒回到00。 图1.1 电子钟成品图1. 基本要求(1). LED宜采用动态扫描法显示 (2). 如果需要制作电子万年历,可以考虑外部扩展专用时钟芯片(如:DS1302)2. 选做(1). 日期、时间切换功能 (2).使用LCD取代LED作为显示设备 (3) .实现闹钟功能(创新部分)2设计方案2.1任务分析电子时钟的设计主要目的是利用单片机设计出完整的电子时钟系统,可以考虑用最小单片机系统来实现。方案简单且性能较好。2.2方案设计1.硬件方案根据设计
4、的要求可知,系统的硬件原理框图如图2.1所示。图2.1 系统的硬件原理框图单片机可选用AT89C51,它与8051系列单片机全兼容,但其内部带有4KB的FLASH ROM,设计时无需外接程序存储器,为设计和调试带来极大的方便。南北向和东西向各采用2个数码管计时,同时需要对该方向的指示灯的点亮时间进行倒计时。键盘系统可以根据系统的需要设置不同的键的个数,可以选择线式键盘或矩阵式键盘,若单片机的IO口不够用时,可以考虑扩展8255或8155满足系统的要求。2. 软件方案 图2.2 主程序流程图3 系统硬件设计3.1时钟电路设计 图3.1 单片机时钟电路 如图3.1所示,采用内部时钟产生方式,在XT
5、AL1 和XTAL2 两端跨接晶体或陶瓷振荡器,与内部反相器构成稳定的自击震荡。其发出的时钟脉冲直接送入片内定时控制部件。3.2复位电路设计 如图3.2所示,采用上电+按钮电平复位方式,当按下按钮时,RST 管脚高电平触发。为保证复位可靠,RC 时间常数应大于两个机器周期,电容取33uf,电阻取200 欧。 图3.2 单片机复位电路3.3 数码管显示工作原理数码管是一种把多个LED(7SEG-MP*8-CA-BLUE)显示段集成在一起的显示设备。有两种类型,一种是共阳型,一种是共阴型。共阳型就是把多个LED显示段的阳极接在一起,又称为公共端。共阴型就是把多个LED显示段的阴极接在一起,即为公共
6、商。阳极即为二极管的正极,又称为正极,阴极即为二极管的负极,又称为负极。通常的数码管又分为8段,即8个LED显示段,这是为工程应用方便如设计的,分别为A、B、C、D、E、F、G、DP,其中DP 是小数点位段。而多位数码管,除某一位的公共端会连接在一起,不同位的数码管的相同端也会连接在一起。即,所有的A段都会连在一起,其它的段也是如此,这是实际最常用的用法。数码管显示方法可分为静态显示和动态显示两种。静态显示就是数码管的8段输入及其公共端电平一直有效。动态显示的原理是,各个数码管的相同段连接在一起,共同占用8 位段引管线;每位数码管的阳极连在一起组成公共端。利用人眼的视觉暂留性,依次给出各个数码
7、管公共端加有效信号,在此同时给出该数码管加有效的数据信号,当全段扫描速度大于视觉暂留速度时,显示就会清晰显示出来。 图3.3 七段共阴发光数码管 3.4 74ls373介绍:373为三态输出的八 D 透明锁存器,373 的输出端 O0O7 可直接与总线相连。当三态允许控制端 OE 为低电平时,O0O7 为正常逻辑状态,可用来驱动负载或总 线。当 OE 为高电平时,O0O7 呈高阻态,即不驱动总线,也不为总线的负载,锁存器内部的逻辑操作不受影响。 当锁存允许端 LE 为高电平时,O 随数据 D 而变。当 LE 为低电平时,O 被锁存在 已建立的数据电平。当 LE 端施密特触发器的输入滞后作用,使
8、交流和直流噪声抗扰度被改善 400mV。 引出端符号: D0D7 数据输入端;OE 三态允许控制端(低电平有效;LE 锁存允许端;O0O7 输出端图3.4 74LS3734仿真与性能分析1、系统仿真过程 仿真平台采用proteus isis。先将程序生成Hex文件,然后倒入选好的单片机中,添加需要的元器件,连线开始仿真。 图4.1 仿真图2 仿真结果与分析当电子钟上电复位后,数码管显示00-00-00。并以1秒为单位计时,通过案件S1/S2/S3/S4可调节时间和日期。如下图显示时间为5时22分23秒:图4.2 系统仿真结果(时间)如下图显示日期为11年7月3日:图4.3 系统仿真结果(日期)
9、5心得体会 进过不懈的努力,我们顺利完成了这次单片机课程设计课题中的个性化电子时钟设计,本次仿真总的来说是实现了预期的效果,但是喇叭把的效果不是很好。功能还不够完善,设计还比较简单。不过通过此次设计我们还是学会了不少东西。首先,学会了keil和proteus软件。然后,由于此次程序是用C语言编写的,以前的C语言知识的到了巩固。同时,我们还领悟到了团队精神的真谛。通过这次的设计使我认识到本人对单片机方面的知识知道的太少了,对于书本上的很多知识还不能灵活运用,尤其是对程序设计语句的理解和运用,不能够充分理解每个语句的具体含义总的来说,本次的设计使我从中学到了最重要的东西,那就是如何从理论到实践的转
10、化,怎样将我所学到的知识运用到我以后的工作中去。在大学的课堂的学习只是在给我们灌输专业知识,而我们应把所学的用到我们现实的生活中去,此次的电子时钟设计给我奠定了一个实践基础,我会在以后的学习、生活中磨练自己,使自己适应于以后的竞争,同时在查找资料的过程中我也学到了许多新的知识,在和同学协作过程中增进同学间的友谊,使我对团队精神的积极性和重要性有了更加充分的理解。参考文献1 郭天祥.新概念51单片机C语言教程M.北京:电子工业出版社,2009.2 胡汉才.单片机原理与接口技术M.北京: 清华大学大学出版社,2004.1-505.3 邢国泉. LM35温度传感器的温度特性及其应用J. 医疗设备信息
11、.2007,11(9):25-28.4 薛国红,赵修斌,卢艳娥等.零漂与增益控制对量化的影响分析M.西安:空军工程大学,2008.5 马忠梅,刘滨等. 单片机C语言Windows环境编程宝典M. 北京: 北京航空航天大学出版社. 2003附录 程序清单#include #includesbit P20=P20; /*定义端口*/sbit khour=P30; sbit kmin=P31;sbit knian=P32;sbit tiaonian=P33 ;sbit speaker=P37 ;int j=-1 ; /*定义变量,j用以控制扫描*/bit flag=0,leap=0; /*定义fla
12、g控制时分秒和年月日的显示,leap判断是否为闰年*/char secshi=0,secge=0,minshi=0,minge=0,hourshi=0,hourge=0;char dayshi=0,dayge=0,monthshi=0,monthge=0,yearshi=0,yearge=0 ;unsigned int num=0,sec=0,min=0,hour=0; /*设置初始时间为00时0分0秒*/unsigned int day=1,month=1,year=10; /*设置初始日期为2010年1月1日*/char saomiao8=0x01,0x02,0x04,0x08,0x10,
13、0x20,0x40,0x80; /*扫描数组,控制位选*/char shijian10=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90; /*共阴数码管的0,1,2,3,4,5,6,7,8,9*/void delay(unsigned int z) /*延时子程序*/ unsigned int x,y; for(x=z;x0;x-) for(y=10;y0;y-) ; void timer() interrupt 1 /*定时器中断0*/ TH0=(65535-5000)/256; /*重新装入初值*/ TL0=(65535-5000)%25
14、6; num+; j+; if(year%4=0&year%100!=0)|(year%400=0) /*判断是否为闰年*/ leap=1; /*闰年,使leap=1*/ else leap=0; /*平年,使leap=0*/ if(num=150) /*实验微调得num=150时大概为1s*/ num=0; sec+; /*秒自动加1*/ if(sec=60) sec=0; min+; /*60s时,分自动加1,秒归0*/ if(min=60) min=0; hour+; /*60分时,小时自动加1,分归0*/ if(hour=24) hour=0; min=0; sec=0; day+; /*24时,天自动加1,时分秒归0*/ /*月份的判断,平年时的2月和闰年时的2月
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1