单片机课程设计数字钟_第1页
单片机课程设计数字钟_第2页
单片机课程设计数字钟_第3页
单片机课程设计数字钟_第4页
单片机课程设计数字钟_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

1、单片机课程设计论文设计题目:基于单片机的数字钟设计学院:班级:成员名单:1、姓名: 2、姓名: 3、姓名:指导教师: 课程设计时间:2012年5月14-2012年5月27目录前言2摘要3一设计任务及方案分析31、课程设计目的32、课程设计要求43、设计方案4二芯片功能简介61、89C51的引脚及相关功能6三硬件设计71、单片机的最小系统72、电路设计图7四电路图工作原理81、时钟设计电路82、数码管显示电路83、接口电路9五软件设计91、流程图92、主程序:103、程序调试:164、仿真调试175、程序仿真图18六设计总结18参考文献:19前言 数字钟是一种用数字电路技术实现时、分、秒计时的装

2、置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。数字钟从原理上讲是一种典型的数字电路,其中包括了组合逻辑电路和时序电路。 因此,我们此次设计与制做数字钟就是为了了解数字钟的原理,从而学会制作数字钟.而且通过数字钟的制作进一步的了解各种在制作中用到的中小规模集成电路的作用及实用方法.且由于数字钟包括组合逻辑电路和时叙电路.通过它可以进一步学习与掌握各种组合逻辑电路与时序电路的原理与使用方法。数字电子时钟既可以通过纯硬件实现,也可以通过软硬件结合实现.摘要  本文给出基于单片机的数字钟设计,系统以AT89C2051芯片为核

3、心,在硬件方面,除了CPU外,使用六个七段LED数码管显示,LED采用的是动态扫描显示,使用9014芯片进行驱动。通过调试LED能够比较准确显示时、分、秒。三个简单的按键实现对时间的调整。软件方面采用c51语言编程。整个电子时钟系统能够完成时间的显示,调时,复位等功能。关键词: 单片机 LED   AT89C2051 显示一设计任务及方案分析1、课程设计目的(1) 了解数字钟的原理,从而学会制作数字钟。(2) 通过数字钟的制作进一步的了解单片机在中小规模电路的作用及使用方法。(3) 学习与掌握单片机的定时、中断、键盘接口等电路的原理与使用方法。2、课程设计要求(1)开机时,

4、显示12:00:00的时间开始计时;(2)P0.0/AD0控制“秒”的调整,每按一次加1秒; (3)P0.1/AD1控制“分”的调整,每按一次加1分; (4)P0.2/AD2控制“时”的调整,每按一次加1个小时;3、设计方案1)数字中的构成:数字钟实际上是一个对标准频率(1HZ)进行计数的计数电路。标准的频率时间信号必须做到准确稳定,通常使用石英晶体振荡电路构成数字钟。本次课程设计的内容是设计一个多功能的数字钟,要综合实现计数,定时,秒表,倒计时等功能,在硬件设计上本数字钟主要由时间计数电路、晶体振荡电路、倒计时电路、控制秒表电路等组成。主要元器件有AT89C51、数码管、

5、晶体振荡器、蜂鸣器、按键等。2)数字钟的原理:(1)晶体振荡器电路晶体振荡器是构成数字式时钟的核心,它保证了时钟的走时准确及稳定.(2)分频器电路通常,数字钟的晶体振荡器输出频率较高,为了得到1Hz的秒信号输入,需要对振荡器的输出信号进行分频.通常实现分频器的电路是计数器电路,一般采用多级2进制计数器来实现.(3)时间计数单元时间计数单元有时计数,分计数和秒计数等几个部分.时计数单元以24进制计数器,其输出为两位8421BCD码形式;分计数和秒计数单元为60进制计数器,其输出也为8421BCD码.(4)译码驱动及显示单元计数器实现了对时间的累计以8421BCD码形式输出,为了将计数器输出的84

6、21BCD码显示出来,需用显示译码电路将计数器的输出数码转换为数码显示器件所需要的输出逻辑和一定的电流,一般这种译码器通常称为7段译码显示驱动器.常用的7段译码显示驱动器有CD4511.(5)校时电源电路当重新接通电源或走时出现误差时都需要对时间进行校正.通常,校正时间的方法是:首先截断正常的计数通路,然后再进行人工出触发计数或将频率较高的方波信号加到需要校正的计数单元的输入端,校正好后,再转入正常计时状态即可.(6)关于本次设计的数字钟中的动态显示驱动电路:数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,

7、dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为12ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据

8、,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。动态显示驱动、电路显示电路和键盘控制电路组成。通过单片机端口的初始化,定时中断设计,键盘扫描等实现数字钟的功能。二芯片功能简介1、89C51的引脚及相关功能40个引脚按引脚功能大致可分为4个种类:电源、时钟、控制和I/O引脚。如右图) 电源: VCC - 芯片电源,接+5V; VSS - 接地端;注:用万用表测试单片机引脚电流一般为0v或者5v,这是标准的TTL电平,但有时候在单片机程序正在工作时候测试结果并不是这个值而是介于0v-5v之间,其实这之是万用表反映没这么快而已,在某一个瞬间单片机引脚电流还是

9、保持在0v或者5v的。) 时钟:XTAL1、XTAL2 - 晶体振荡电路反相输入端和输出端。) 控制线:控制线共有4根, ALE/PROG:地址锁存允许/片内EPROM编程脉冲 ALE功能:用来锁存P0口送出的低8位地址 PROG功能:片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。 PSEN:外ROM读选通信号。 RST/VPD:复位/备用电源。 RST(Reset)功能:复位信号输入端。 VPD功能:在Vcc掉电情况下,接备用电源。 EA/Vpp:内外ROM选择/片内EPROM编程电源。 EA功能:内外ROM选择端。 Vpp功能:片内有EPROM的芯片,在EPROM编程期

10、间,施加编程电源Vpp。) I/O线89C51共有4个8位并行I/O端口:P0、P1、P2、P3口,共32个引脚。P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线)。三硬件设计1、单片机的最小系统单片机的最小系统是用来提供单片机片内各种微操作的时间基准,时钟信号通常用两种电路形式得到:内部振荡和外部振荡。MCS-51单片机内部有一个用于构成振荡器的高增益反向放大器,引脚XTALl和XTAL2分别是此放大电器的输入端和输出端,由于采用内部方式时,电路简单,所得的时钟信号比较稳定,实际使用中常采用这种方式。电路设计图所示外接晶体振荡器(简称晶振)或陶瓷谐振器就构成了内部振荡方式,片

11、内高增益反向放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起可构成一个自激振荡器并产生振荡时钟脉冲。图中外接晶体以及两个电容构成并联谐振电路,它们起稳定振荡频率、快速起振的作用,其值均为30P左右,晶振频率选12MHz。2、电路设计图根据设计要求和对单片机的基本知识了解掌握后得出的电路设计图如下:图1    总电路图四电路图工作原理1、时钟设计电路定时器T0每50ms产生一次中断,再建立中断次数累计变量(i)。若中断次数累计计满20次,秒计数变量(s)加1,;若秒计满60,分钟计数变量(m)加1,同时将秒计数变量清0;若分钟计满60,小时计数变量(h)加1,同时

12、将分钟计数变量清0;若小时计数满24,将小时计数变量清0。2、数码管显示电路分别建立三个时间显示子程序显示时分秒,获取正确的的段码,点亮数码管。3、接口电路接口电路采用独立式键盘接口电路,每一个按键对应P3口的一根线,各键是相互独立的。应用时,通过软件可判断key1、key2、 key3、key4各键是否被按下,通过数码管显示从而实现不同按键的功能。五软件设计单片机的程序设计有其自身的特点。在单片机系统中,硬件与软件紧密结合,由于硬件电路的设计不具有通用性,所以必须根据具体的硬件电路来设计对应的软件,硬件设计的优劣直接影响到软件设计的难易,软件设计的优劣又直接影响到硬件的发挥。在很多时候,软件

13、可以替代硬件的功能,当然,需要付出额外占用CPU时间的代价。软件程序的设计是根据硬件电路图的连接和各个元器件的功能进行设计。在编写软件时,可以按各个程序的功能将软件细分为各个功能模块,再通过主程序的调用来实现整个软件系统。而一般编写的程序都是根据事前所用的流程图来编写的,而且,流程图中也包含了对设计所得结果的要求,因此,流程图的设计直接影响到源程序的设计。主程序是软件设计的总体框架,因此主程序流程图的设计决定了程序编写的好坏,主程序的功能主要是读7447的时间将时间数据送到LED显示,再判断是否有按键按下,从而进行校时、定时功能。段码由P0.0,P0.1,P0.2,P0.3通过74LS47译码

14、驱动数码管显示,使用比较方便,位码由PNP三极管9012驱动。1、流程图整个软件的主流程图如下图所示:开始端口初始化时间初值设定数码管显示计时键盘扫描Key2Key1 Y YN切换时分秒停止计时Key4按下时分秒减1Key3按下时分秒加1计时定时预置时间输出结束2、主程序:#include <reg51.h>#define uchar unsigned char#define uint unsigned intunsigned char tab= 0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09;unsigned char port

15、8=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;char int_time,second,minute,hour,t,num0,t0,m;sbit key1=P34; sbit key2=P35;sbit key3=P36;sbit key4=P37;sbit war=P10;void delay0(uint z) uint x,y;for(x=z;x>0;x-)for(y=110;y>0;y-);void didi(uint m,uint p)int a;for(a=m;a>0;a-) war=0;delay0(p);war=1;dela

16、y0(p); void delay() unsigned char i,j;for(i=0;i<200;i+);for(j=0;j<200;j+);void Displaysecond(unsigned char s) P2=0xfd; P0=tabs/10; delay(); P2=0xfe; P0=tabs%10; delay(); P2=0xff;void Displayminute(unsigned char m) P2=0xef; P0=tabm/10; delay(); P2=0xf7; P0=tabm%10; delay(); P2=0xdf; P0=0xfd; de

17、lay();void Displayhour(unsigned char h) P2=0x7f; P0=tabh/10; delay(); P2=0xbf; P0=tabh%10; delay(); P2=0xfb; P0=0xfd; delay(); P2=0xff; void keyscan() if(key1=0) delay(); if(key1=0) TR0=TR0; while(!key1); if(key2=0) delay(); if(key2=0) TR0=0; while(!key2); if(t=4)t=0; switch(t) case 0:Displayminute(

18、second);delay();break; case 1:Displayminute(minute);delay();break; case 2:Displayhour(hour);delay();break; case 3:Displayhour(num0);delay();break; t+; if(key3=0) delay(); if(key3=0) TR0=0;while(!key3); switch(t)case 1:second+; if(second=60)second=0;minute+;break;case 2:minute+; if(minute=60)minute=0

19、;hour+;break;case 3:hour+; if(hour=24)hour=0;t0=hour;break; case 4:num0+;break; if(key4=0) delay(); if(key4=0) TR0=0; while(!key4); switch(t) case 1:second-; if(second=0)second=0;break; case 2:minute-; if(minute=0)minute=0;break; case 3:hour-; if(hour=0)hour=0;t0=hour;break; case 4:num0-;break; void

20、 main(void) TMOD=0x01; EA=1; ET0=1; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1; war=0; int_time=0; second=0; minute=0; hour=12; while(1) keyscan();Displaysecond(second);delay(); Displayminute(minute);delay();Displayhour(hour);delay();if(t0=hour+num0)didi(30,30);TR0=1;num0-;else war=0; void

21、interserve(void)interrupt 1 using 1 int_time+; if(int_time=20) int_time=0; second+; if(second=60) second=0; minute+; if(minute=60) minute=0; hour+; if(hour=24) hour=0; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=0; P3=0xff; if(P3&0xf0)!=0xf0) delay(); if(P3&0xf0)!=0xf0); if(key1=0) sec

22、ond+;if(key2=0) minute+; if(key3=0) hour+; TR0=1; 3、程序调试:调试程序采用Keil C,首先启动keil软件的集成开发环境,点击“Project>New Project”建立新的工程,选择AT89S51作为目标芯片。建立新的源文件,将程序输入并将源文件添加到工程中。编译程序并改正程序中的错误,当程序没错误后点击“Debug> Start/Stop Debug ”进入程序动态调试状态,验证程序能不能正确的执行,不能则从新修改源程序,如果能则调试工作结束。4、仿真调试(1) 打开Keil C,新建Keil项目,选择AT89S51单片机

23、作为CPU,新建C语言源文件,编写程序,并将其导入到“Source Group”中。在“Option for Target”对话窗口中,选中“Output”选项卡中的“Create HEX”选项和“Debug”选项卡中的“Use:Proteus VSM Simulator”选项。编译源程序,改正程序中的错误。(2) 在Proteus ISIS中,选中AT89S51并单击鼠标左键,打开“Edit Compoment”对话窗口,设置单片机晶振频率为12MHZ,在此窗口中的“Program File”栏中,选择先前用Keil生成的.HEX文件。在Proteus ISIS的菜单栏中选择“File”->“Save Design”选项,保存设计。在Proteus ISIS的菜单栏中,打开“Debug”下拉菜单,在菜单中选中“Use Remote Debug Monitor”选项,以支持与Keil的联合调试。(3) 在Keil的菜单栏中选择“Debug”->“Star/Stop Debug Session”选项,或者直接单击工具栏的“Debug>Star/Stop Debug Session”图标,进入程序调试

温馨提示

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

评论

0/150

提交评论