基于单片机的数字电子钟的设计_第1页
基于单片机的数字电子钟的设计_第2页
基于单片机的数字电子钟的设计_第3页
基于单片机的数字电子钟的设计_第4页
基于单片机的数字电子钟的设计_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数字电子钟的设计摘 要:数字电子时钟电路设计系统,以AT89C51单片机为控制核心,由键盘显示、定时闹铃、LED共阴极数码管和LED灯显示等功能模块组成。基于题目基本要求,本系统对时间显示和定时报警进行了重点设计。本系统大部分功能由软件来实现,吸收了硬件软件化的思想,大部分功能通过软件来实现,使电路简单明了,系统稳定性大大提高。本系统不仅成功的实现了要求的基本功能,而且有一定的创新功能。关键字:单片机;AT89C51;数字钟Abstract:This digital electronic clock circuit design system ,based on chip microcompu

2、ter AT89C51,is composed by the following functional modules : keyboard displaying , timing alarmg. common cathode LED digital tube, LED lights display,and so on. According to the basic requirements of the subject ,the system stresses on the realization of Time display and regularly report to the pol

3、ice.The design achieved all the required basic technical indexes. Furthermore , adopting the idea of hardware-to-software, most of those functions are realized by softwares, which makes the electrocircuit more concise and the system more stable.Key words:chip microcomputer;AT89C51:digital electronic

4、 clock目 录1 前言12 总体方案设计23 系统硬件设计23.1 单片机最小系统23.2 输入部分43.2.1 电源模块43.2.2 按键模块43.3 输出部分43.3.1 显示模块43.3.2 LED灯显示模块54 系统软件设计54.1 主程序流程图64.2 子程序流程图85 系统调试与仿真85.1 系统硬件误差分析96.3 软件调试与仿真97 结束语9参考文献10附录A 系统原理图11附录B 系统仿真图12附录C 系统源程序131 前言现代生活的人们越来越重视起了时间观念,可以说是时间和金钱划上了等号。对于那些对时间把握非常严格和准确的人或事来说,时间的不准确会带来非常大的麻烦,所以

5、以数码管为显示器的时钟比指针式的时钟表现出了很大的优势。数码管显示的时间简单明了而且读数快、时间准确显示到秒。而机械式的依赖于晶体震荡器,可能会导致误差。AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种

6、灵活性高且价廉的方案。基本特性:1、8031 CPU与MCS-51 兼容 · 全静态工作:0Hz-24KHz2、4K字节可编程FLASH存储器(寿命:1000写/擦循环)3、三级程序存储器保密锁定 · 128*8位内部RAM4、32条可编程I/O线 · 两个16位定时器/计数器5、6个中断源、可编程串行通道、低功耗的闲置和掉电模式、片内振荡器和时钟电路本文通过对一个能实现按键开关可调整时、分、秒,具有加密功能、定时报警的24小时制的时间系统的设计学习,详细介绍了51单片机应用中的定时中断原理、数码管显示原理、动态扫描显示原理等,进一步学习、应用单片机C语言系统的实

7、现了各种功能。从而使自身明白使用单片机汇编语言和C语言之间的效率、整体性问题。系统由AT89C51、独立式按键、二极管、LED数码管、蜂鸣器等部分构成,能实现24小时制时、分、秒的时钟显示,能实现时钟简单的加密功能。同时也可进行时、分、秒的校准、定时报警和LED二极管流水灯显示。2 总体方案设计设计中采用AT89C51芯片及LED显示器,一些独立式按键构成一个简单的数字电子钟。设计中是采用单片机的内部定时器进行定时,结构框图如下所示。单片机数字钟硬件系统的总体设计框图3 系统硬件设计该数字电子钟有单片机最小系统、键盘系统、LED显示电路模块、USB电源模块组成。总的来说,分为输入部分与输出部分

8、,以下做具体的设计和分析。3.1 单片机最小系统单片机的最小系统是由电源、复位、晶振、/EA=1组成,下面介绍一下每一个组成部分。1、电源引脚Vcc电源端,GND接地端,工作电压为5V,另有AT89LV51工作电压则是2.7-6V, 引脚功能一样。 2、外接晶体引脚晶振连接的内部、外部方式图XTAL1是片内振荡器的反相放大器输入端,XTAL2则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2悬空。内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12MHz,时钟频率就为6MHz。晶振的频率可以在1MHz-24MHz内选择。电容取30PF左右。系统的时钟电路设计是采用的内

9、部方式,即利用芯片内部的振荡电路。AT89单片机内部有一个用于构成振荡器的高增益反相放大器。引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。这个放大器与作为反馈元件的片外晶体谐振器一起构成一个自激振荡器。外接晶体谐振器以及电容C1和C2构成并联谐振电路,接在放大器的反馈回路中。对外接电容的值虽然没有严格的要求,但电容的大小会影响震荡器频率的高低、震荡器的稳定性、起振的快速性和温度的稳定性。因此,此系统电路的晶体振荡器的值为12MHz,电容应尽可能的选择陶瓷电容,电容值约为22F。在焊接刷电路板时,晶体振荡器和电容应尽可能安装得与单片机芯片靠近,以减少寄生电容,更好地保证震荡器稳定和可

10、靠地工作。3、复位RST在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此引腿时,将使单片机复位,只要这个脚保持高电平,51芯片便循环复位。复位后P0P3口均置1引脚表现为高电平,程序计数器和特殊功能寄存器SFR全部清零。当复位脚由高电平变为低电平时,芯片为ROM的00H处开始运行程序。复位是由外部的复位电路来实现的。片内复位电路是复位引脚RST通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,它的输出在每个机器周期的S5P2,由复位电路采样一次。复位电路通常采用上电自动复位和按钮复位两种方式,此电路系统采用的是按钮复位电路。4、输入输出引脚(1) P0端口P0.

11、0-P0.7 P0是一个8位漏极开路型双向I/O端口,端口置1(对端口写1)时作高阻抗输入端。作为输出口时能驱动8个TTL。对内部Flash程序存储器编程时,接收指令字节;校验程序时输出指令字节,要求外接上拉电阻。在访问外部程序和外部数据存储器时,P0口是分时转换的地址(低8位)/数据总线,访问期间内部的上拉电阻起作用。(2) P1端口P1.0P1.7 P1是一个带有内部上拉电阻的8位双向I/0端口。输出时可驱动4个TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。(3) P2端口P2.0P2.7 P2是一个带有内部上拉电阻的8位双向I/0端口。输出时可驱动4个TTL。端口置1时,内

12、部上拉电阻将端口拉到高电平,作输入用。对内部Flash程序存储器编程时,接收高8位地址和控制信息。(4) P3端口P3.0P3.7 P2是一个带有内部上拉电阻的8位双向I/0端口。输出时可驱动4个TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。3.2 输入部分3.2.1 电源模块采用普通的USB线连接微型计算机作为系统电源,虽然功率上可以满足稍大于系统需要,但同样不需要更换电源,并且比直流稳压电源更轻便,可随时使用、调试系统。3.2.2 按键模块采用独立式键盘。独立式按键是直接用I/O口线构成的单个按键电路,其特点是每个按键单独占用一根I/O口线,每个按键的工作不会影响其它I/O口

13、线的状态。但当所需按键数量多,会占用过多的I/O口线。3.3 输出部分3.3.1 显示模块采用LED共阴极数码管。共阴数码管在应用时将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应字段就不亮。动态显示驱动。通过单片机对数码管位选通COM端电路的控制,只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。动态显示可以大幅度地降低硬件成本和电源的功耗,因为某一时刻只有一个数码管工作,也就是所谓的分时显示,故显示所需要的

14、硬件电路可分时复用。动态显示方式,可以避免静态显示的问题。但设计上如果处理不当,易造成亮度低,闪烁问题。因此合理的设计既应保证驱动电路易实现,又要保证显示后的数据稳定,无闪烁。动态显示采用多路复用技术的动态扫描显示方式,当扫描刷新频率(发光二极管的停闪频率) 为50Hz,发光二极管导通时间1m s 时,显示亮度较好,无闪烁感。3.3.2 LED灯显示模块1、LED数码显示器通常用的七段数码显示器的内部有8个发光二极管,其中7个发光二极管组成了数字“8”,剩下一个发光二极管就是这位数字所带的小数点。数码管结构图如图2所示 LED数码管结构引脚图各段码位的对应关系段码位D7D6D5D4D3D2D1

15、D0显示段dpgfedcba2、集成器件74LS13874LS138 为3 线8 线译码器,本设计中74LS138做为对数码管位选通COM端电路的控制,将需要显示的数码管的选通控制打开。74LS138引脚图4 系统软件设计该数字电子钟用到了单片机的定时器的功能,此外用到了中断功能,在数字的显示是采用查表功能。由于电子钟需要可以进行调节,因此,需要在单片机的P口加上按键。软件的可以分为定时器模块,按键模块,显示模块等,具体的流程图和程序见附录。4.1 主程序流程图4.2 子程序流程图定时器子程序流程图5 系统调试与仿真单片机应用系统的调试包括硬件和软件两部分,但是他们并不能完全分开。一般的方法是

16、排除明显的硬件故障,再进行综合调试,排除可能的软/硬件故障。本系统已符合设计课程基本要求,按24小时制分别显示“时时-分分-秒秒”,有2个“-”动态显示,时间会按实际时间以秒为最少单位变化;可使用按键开关可实现时、分调整。除了满足这些基本要求外,本系统还做了一些创新:(1) 通过1功能按键KEY1开关可使系统具有加密功能。加密前后可通过观察LED二极管的显示方式来判断。当LED做流水灯显示方式时,为加密前的状态;当只有LED灯中的LED2(由P0.1口控制亮灭)时,代表已对系统进行加密。(2) 通过功能按键开关KEY1进入可进入时间校准系统。KEY2控制秒的校准,KEY3控制分的校准,KEY4

17、控制时的校准。每次一有校准按键按下时,系统会发出不同的声响,以提示用户目前正在校准的是时、分、秒的哪一种。校准完成后仍然是通过功能按键KEY1返回时钟显示。(3) 通过更改主程序中定时器的定时初值,可实现不同样式的数字钟显示方式。5.1 系统硬件误差分析本次设计的单片机电子钟系统中,其时间误差主要来源包括晶体频率误差,定时器溢出误差,延迟误差。晶体频率产生震荡,容易产生走时误差;定时器溢出的时间误差,本应这一秒溢出,但却在下一秒溢出,造成走时误差;延迟时间过长或过短,都会造成与基准时间产生偏差,造成走时误差。6.3 软件调试与仿真软件程序的调试一般可以将重点放在分模块调试上,统调是最后一环。本

18、次课题,Keil软件下载到单片机中来调试程序,通过各个模块程序的单步或跟踪调试,使程序逐渐趋于正确,最后统调程序。仿真部分采用protus 7.5 professional软件,此软件功能强大且操作较为简单,可以很容易的实现系统的仿真。结果见附录。7 结束语通过此次课程设计,本次课程从基本方案的制定,再到硬件电路的设计,软件程序的编辑和调试,最后取得的成功。在此过程中,进一步学习、掌握单片机应用系统的有关知识,加深了解单片机的工作原理。初步掌握单片机应用系统的设计、制作、调试的方法。提高动手实践能力。通过这次对数字时钟的设计,让我系统的了解和学会应用单片机C语言来对所需实现的功能进行编程。在仿

19、真阶段,温习了了Keil C51集成环境和PROTEUS 7.5仿真软件的使用。此过程中我还发现到修改完善程序的重要性。当时编完一个程后感觉是正确的。就是这样还要仔细检查自己的程序。考虑到各种可能发生的情况。经过这次课程设计培养了我们的设计能力以及全面的考虑问题能力。学习的过程是痛苦的但是收获成功的喜悦更是让人激动的。相信通过这次课程设计它对我以后的学习及工作都会产生积极的影响。采用AT89C51设计的多功能数字电子钟,不仅计时精度高,编程简单,显示效果稳定可靠,同时硬件接口简单,具有较大的实用价值。参考文献1 张毅刚,彭喜元. 单片机原理及接口技术. 北京:人民邮电出版社,2008.2 唐俊

20、瞿. Altium.Designer应用实例教程. 冶金工业出版社,2004.3 李朝青. 单片机原理及接口技术. 北京航空航天大学出版社,2005.4 马忠梅等. 单片机的C语言应用程序设计(第4版),2007.5 彭伟. 单片机C语言程序设计实训100例. 电子工业出版社,2009.6 崔凤波.数字电子技术M. 大连:大连理工大学出版社,2007.7 戴仙金.51单片机及其C语言程序开发实例M. 北京:清华大学出版社,20088 谭浩强.C语言程序设计M. 北京:清华大学出版社.2007.9 赵建领.51系列单片机开发宝典M. 北京:电子工业出版社,2007.10 田立,马鸣鹤.51系列单

21、片机开发实例M. 北京:中国电力出版社,2009.11 杨将新,李华军等.单片机程序设计及应用从基础到实践.北京:电子工业出版社,2006.12 尹勇,王洪成.单片机开发环境uVision2使用指南及USB固件编程与调试.北京:北京航空航天大学出半社,2004.附录A 系统原理图使用Altium.Designer软件设计出的电路原理如下所示:附录B 系统仿真图1、使用PROTUES软件,去掉设计中的附加功能,最简单的数字计时的电路图如下:2、用PROTUES软件,根据上述数字电子钟的原理图,得到的仿真图,如下所示:附录C 系统源程序/*Copyright (c)* File name: Shu

22、ZiZhong.c* Last modified Date: 20101220* Created by: 赵红星* Descriptions: 单片机数字钟*/ #include<reg51.h> #define uchar unsigned char #define uint unsigned int #define CYCLE 1000 /*定时1ms */ unsigned char i,j,k,ID; /*ID 为case 的次数 K为LED灯控制。*/ unsigned char temp; unsigned char b,c; uchar hour=0,min=0,se

23、c=0; /*定义秒时分初始值*/ uchar a6; /*定数码管显示缓冲*/ uint t=0; uint flag=0; bit fla; unsigned char count; sbit KEY1=P30; sbit KEY2=P31; sbit KEY3=P32; sbit KEY4=P33; sbit LED2=P10; sbit BEEP=P07; void Modifytime(); /*时间调整模块*/ void Adjust(); void scan(); /*扫描数码模块*/ void Time_BEEP(); void delay10ms(void)/*软件10ms定

24、时*/ unsigned char i,j; for(i=20;i>0;i-) for(j=248;j>0;j-); /*2us*248*20=9920软件延时*/ void dely250(void) unsigned char i,j; for(i=2;i>0;i-) /* 248*2us*2=1ms 软件延时*/ for(j=248;j>0;j-); /* Mian函数*/void main()TCON=0x01; /*TIMER0工作在方式*/ TMOD=0x01; TH0=(65536-CYCLE)/256; /*设定T0每隔1000us(1ms)中断一次*/

25、 TL0=(65536-CYCLE)%256; TR0=1; IE=0x82; Modifytime(); while(1) if (flag=100) temp=0xfe; P1=temp; delay10ms() for(k=0;k<8;k+) b=temp<<k; c=temp>>(8-k); P1=b|c; delay10ms(); for(k=0;k<8;k+) b=temp>>k; c=temp<<(8-k); P1=b|c; delay10ms(); if(flag=1000) /*判断秒钟到否*/ sec+; /*秒加

26、一*/ Modifytime(); flag=0; while (min=0)&(sec=0) if (flag=100) BEEP=0; BEEP=1; if (flag=600) break; while(KEY1= 0) while(1)if(KEY1=0)delay10ms();if(KEY1=0) ID+; if(ID=2)ID=0;while(KEY1=0); switch(ID) case 0: Adjust(); break;case 1: LED2=0; if(flag=1000) /*判断秒钟到否*/ sec+; /*秒加一*/ Modifytime(); flag

27、=0; while (min=0)&(sec=0) if (flag=100) BEEP=0; BEEP=1; if (flag=600) break; break; /*时间调整模块*/void Modifytime() uchar temp; temp=sec; /*uchar temp=sec;*/ sec%=60; min+=temp/60; /*求余*/ temp=min; min%=60; hour=(hour+temp/60)%24; a0=(sec%10); /*调整过的时间送到显示缓冲中*/ a1=(sec/10); /*对于秒计数单元中的数据要把它十位数和个数分开,

28、方法仍采用对10整除和对10求余。 */ a2=(min%10); /*对于分计数单元中的数据要把它十位数和个数分开,方法仍采用对10整除和对10求余。 */ a3=(min/10); a4=(hour%10); /*对于时计数单元中的数据要把它十位数和个数分开,方法仍采用对10整除和对10求余。 */ a5=(hour/10); /*扫描数码模块*/void scan( ) /*扫描6个数码管子程序*/ static uchar x; x+; if(x>5) x=0; /*6个数码管都扫描过了则重新开始*/ P0=x|(ax<<3); /*选中需要扫描的数码管并送数据*/ /*中断模块*/void Timer0Int() interrupt 1 using 2 t+; if(t=100) fl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论