《基于51单片机的数字时钟设计的毕业设计概要(共20页).doc》由会员分享,可在线阅读,更多相关《基于51单片机的数字时钟设计的毕业设计概要(共20页).doc(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上 专心-专注-专业摘 要近几年,单片机在各个领域得到广泛的应用。从工业到人们的日常生活,大部分的科技产品都是通过单片机来控制。在它问世之前,自动控制设备得不到广泛的应用,这是因为控制设备的体积庞大,耗电量大,价格昂贵。在第一台微处理器成功研制不久,第一个单片机就问世了。因为其小巧的体积,低功耗,以及高效的性能,单片机受到了大家的欢迎。本设计利用STC89C51单片机对电子时钟进行开发,设计了实现所需功能的硬件电路,应用C语言进行软件编程,并用Proteus软件进行演示、验证。主要介绍用单片机内部的定时/计数器来实现电子时钟的方法,本设计由单片机STC89C51芯片和L
2、ED数码管为核心,辅以必要的电路,构成了一个单片机的数字电子时钟。它的计时周期为24小时,显满刻度为“23时59分59秒”,且配有8个独立键盘,可以灵活地调节时间和日期,并具有一定的扩展性。关键词:单片机,数字时钟,动态显示,LED数码管显示,独立按键。第一章 绪论多功能数字钟设计的背景单片机自从1976年由Intel公司推出MCS-48开始,迄今已有二十多年之久了。由于单片机集成度高、功能强、可靠性高、体积小、功耗低、使用方便、价格低廉等一系列优点,目前已经渗入到人们工作和生活的方方面面,单片机应用领域已经从面向工业控制、通讯、交通、智能仪表等方面迅速发展到家用消费产品、办公自动化、汽车电子
3、、PC机外围以及网络通讯等广大领域。本文讨论的单片机多功能数字钟系统的核心是目前应用极为广泛的51系列单片机,配置了外围设备,构成了一个可编程的计时定时系统,具有体积小,可靠性高,功能多等多种特点。不仅能满足所需要求而且还有很多功能可供扩展,有着广泛的应用实践领域。第二章STC89C51单片机简介2.1 单片机介绍 单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。 单片机内部也用和电脑功能类似的模
4、块,比如CPU,内存,并行总线,还有和硬盘作用相同的存储器件,不同的是它的这些部件性能都相对我们的家用电脑弱很多,不过价钱也是低的,一般不超过10元即可。用它来做一些控制电器一类不是很复杂的工作足矣了。我们现在用的全自动滚筒洗衣机、排烟罩、VCD等等的家电里面都可以看到它的身影!它主要是作为控制部分的核心部件。它是一种在线式实时控制计算机,在线式就是现场控制,需要的是有较强的抗干扰能力,较低的成本,这也是和离线式计算机的(比如家用PC)的主要区别。 单片机是靠程序的,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,这是别的器件需要费很大力气才能做到的,有些则是花大力气也
5、很难做到的。一个不是很复杂的功能要是用美国50年代开发的74系列,或者60年代的CD4000系列这些纯硬件来搞定的话,电路一定是一块大PCB板!但是如果要是用美国70年代成功投放市场的系列单片机,结果就会有天壤之别!只因为单片机的通过你编写的程序可以实现高智能,高效率,以及高可靠性!2.2 单片机的应用特点随着集成电路技术的发展,单片机的功能越变越强,涉及到各个电子应用领域。目前单片机的系列也十分多,各有各的特点,如目前的MCS51系列、PIC系列等等,通过这几年的应用,普通感觉到特别需要单片机具有如下几个应用特点: 1.低功耗、宽电压工作范围,内部看门狗;2.高速指令系统,单字节指令,精简指
6、令集易学易用;3.内部ROM结构,且具有廉价OTP(一次性写入程式)ROM,以便小批量生产,减少MASK风险;4.程序保密功能,防止拷贝,保护成果;5.方便的开发工具(仿真器与烧入器)。2.3 单片机的应用领域目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录象机、摄象机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。因此,单片机的学习、开发
7、与应用将造就一批计算机应用与智能化控制的科学家、工程师。 单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域。2.4 HT1380引脚功能介绍1、HT1380的引脚功能HT1380采用DIP8封装形式封装,其引脚分配如图3所示。各引脚的功能及其用法如下。1)、脚(NC):空引脚。2)、脚(X1):内部振荡器输入脚。3)、脚(X2):内部振荡器输出脚。HT1380片内集成有高增益的自激振荡放大电路,2)脚、3)脚为该放大电路的输入、输出引脚,2)脚、3)脚间接外接32.768khz的晶振,就可以产生频率为32.768khz的时钟信号。4)、脚(GND):
8、接地引脚。5)、脚(RST):复位引脚。当RST=0时,芯片复位,单片机对HT1380所建立的控制逻辑无效,所有数据传送终止。当RST=1时,所建立的控制逻辑有效。只有RST=1时,才可以对HT1380进行读、写或测试操作。6)、脚(I/O):数据输入/输出引脚。7)、脚(SCLK):串行时钟输入引脚。8)、脚(VCC):电源引脚。2、HT1380的应用电路HT1380的应用电路如下。HT1380 的SCLK、I/O、RST脚分别与单片机的3根I/O口线P1.1、P1.2、P1.3相接,单片机的P1.1口线充当时钟线,向HT1380传送时钟信号,P1.2口线充当数据线,用来与HT1380之间传
9、输数据,p1.3口线充当芯片选择控制线,控制芯片的选择。C1、C2为5P8P的小电容,起稳频和加速起振的作用。第三章 设计方案通常通过单片机设计电子时钟有2种方法:一是通过单片机内部的定时器计数器。采用软件编程实现时钟计数,一般称为软时钟,这种方法硬件线路简单,程序比较复杂。系统的功能一般与软件相关。通常用于对时间精度要求不高的场合。二是采用时钟芯片 他的功能强大,功能不见集成在芯片内需,自动产生时钟等相关功能。硬件成本较高,软件编程。通常对时钟精确度要求较高的场合。电子时钟的系统软件程序有、由主程序和子程序组成,主程序包含初始化参数设置,按键处理,数码管显示模块等。在设计时候、各个模块都采用
10、子程序结构设计。在主程序中调用。由于定时器,计数器采用中断方式处理,应此还用辨析定时器,中断服务子程序,在定时器,计数器中断服务子程序种对时钟进行调整。3.1 主程序主程序执行流程图如图1所示。主程序先对显示单元和定时器计数器初始化,然后重复调用数码管显示模块和按键处理模块,当有建按下,则转入相应的功能程序。 图1 主程序执行流程图 3.2 系统框图项目系统框图如图2所示。3.3 数码管显示模块本设计的显示模块采用6位一体共阴极数码管,显示分为时钟显示模式,显示时钟模式,从右到左依次显示秒个位,秒十位,分个位,分十位,时个位,时十位;数码管显示的信息用6个内存单元存放,这6个内存单元为显示缓冲
11、区,其中秒个位和秒十位,分个位和分十位,时个位和时十位分别由秒数据,分数据和小时数据分拆得到。在本系统种数码管显示采用软件译码动态显示。在存储器中首先建立一张显示信息字段码表,显示的时候,先从显示缓冲区中取出显示的信息,然后通过查表程序在字段码表中查出的所显示的字段码。从P2口输出,同时在P1口将对应的位选码输出,选中显示的数码管,就能在相应的数码管上显示显示缓冲区的内容。3.4按键处理模块按键处理设置为:如果没有按键,则为时钟模式,时钟正常走时,当依次按下时间按键和秒按键时秒单元每次加1或减1,当加到59后跳为00,当按下分按键的时候,分单元每次加1或减1,当加到59的时候跳到00;当按下时
12、按键的时候,时单元每次加1,当加到23的时候跳为00,反之亦然。 第四章 硬件电路设计4.1 复位电路 MCS-51单片机的复位是由外部的复位电路来实现的。复位引脚RST通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,在每个机器周期的S5P2,斯密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号。上电复位:上电复位电路是种简单的复位电路,只要在RST复位引脚接一个电容到VCC,接一个电阻到地就可以了。上电复位是指在给系统上电时,复位电路通过电容加到RST复位引脚一个短暂的高电平信号,这个复位信号随着VCC对电容的充电过程而回落,所以RST引脚复位的高电平
13、维持时间取决于电容的充电时间。为了保证系统安全可靠的复位,RST引脚的高电平信号必须维持足够长的时间。上电自动复位是通过外部复位电路的电容充电来实现的。只要Vcc的上升时间不超过1ms,就可以实现自动上电复位。按键复位:电路在运行过程中,也可以通过按键进行复位。当按下复位按键,复位引脚RST通过按键与地相接,得到低电平,从而实现复位。电路图如图2所示:图2 复位电路4.2 时钟电路时钟是单片机的心脏,单片机各功能部件的运行都是以时钟频率为基准,有条不紊的一拍一拍地工作。因此,时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。常用的时钟电路有两种方式:一种是内部时钟方式,
14、另一种为外部时钟方式。本文用的是内部时钟方式。电路图如图3所示: 图3 时钟震荡电路MCS-51单片机内部有一个用于构成振荡器的高增益反相放大器,该高增益反向放大器的输入端为芯片引脚XTAL1,输出端为引脚XTAL2。这两个引脚跨接石英晶体振荡器和微调电容,就构成一个稳定的自激振荡器。4.3 按键电路按键的开关状态通过一定的电路转换为高、低电平状态。按键闭合过程在相应的I/O端口形成一个负脉冲。闭合和释放过程都要经过一定的过程才能达到稳定,这一过程是处于高、低电平之间的一种不稳定状态,称为抖动。抖动持续时间的常长短与开关的机械特性有关,一般在5-10ms之间。为了避免CPU多次处理按键的一次闭
15、合,应采用措施消除抖动。本文采用的是独立式按键,直接用I/O口线构成单个按键电路,每个按键占用一条I/O口线,每个按键的工作状态不会产生互相影响。电路图如图4所示: 图4 按键电路 P1.4口所接的按键为模式切换按键,当不按下此按键时为时钟显示模式,当按下此按键时为日期和星期显示模式。当为时钟显示模式的时候,端口连接分别表示如下:P0.4口表示调整秒、分“+”,按一下则时加1,当加到59后再加一次为0; P0.3口表示调整秒、分“-”,按一下则时减1,当减到0后再减一次为59;P0.4口表示调整时“+”,按一下则时加1,当加到23后再加一次为0; P0.3口表示调整时“-”,按一下则时减1,当
16、减到0后再减一次为23;P0.2口表示确认键;P0.1口表示调整秒按键;P0.5口表示调整分按键;P0.6口表示调整时按键;4.4 数码管显示电路数码管是由6个发光二极管构成的显示器件。在数码管中,若将二极管的阳极连在一起,称为共阳极数码管;若将二极管的阴极连在一起,称为共阴极数码管。本设计用到的6个数码管均是共阴极的。当发光二极管导通时,它就会发光。每个二极管就是一个笔划,若干个二极管发光时,就构成了一个显示字符。将单片机的I/O口控制相应的芯片与数码管的a-g相连,低电平的位对应的发光二极管亮,这样,由I/O口输出不同的代码,就可以控制数码管显示不同的字符。本设计的6个数码管均采用动态显示
17、方式,系统采用动态显示方式,用P0口来控制LED数码管的段控线,而用P2口来控制其位控线。动态显示通常都是采用动态扫描的方法进行显示,即循环点亮每一个数码管,这样虽然在任何时刻都只有一位数码管被点亮,但由于人眼存在视觉残留效应,只要每位数码管间隔时间足够短,就可以给人以同时显示的感觉。电路图如图5所示:图5 数码管显示电路电路第五章 软件设计与程序代码5.1 软件设计5.1.1系统框图如图5.1.2程序流程图如图5.2 软件仿真电路全图图7 软件仿真电路全图此图为时钟显示模式,显示内容为15时9分49秒图8 软件仿真电路全图此图为日期和星期显示模式,显示内容为6月4日星期二5.3 源程序代码#
18、include #define uchar unsigned char#define DCOUNT 6#define MinusVal 0x02#define PlusVal 0x04#define RightVal 0x08#define LeftVal 0x10#define TimeVal 0x20#define DateVal 0x40#define SetVal 0x80#define CKeyVal 25#define port_s P1#define port_b P2#define keyport P0uchar data wcnt,second;int data timcnt
19、;uchar data h,m,s;uchar code led=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/uchar code ledctrl=0xfe,0xfd;uchar buf8;uchar code ledctrl=0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01;uchar idata disdat6;uchar idata keytim;uchar data flashsite;uchar second_buff;uchar m_buff;uchar h_buff;int k;bit dow
20、n,keytreated,setdis,dattim;void display(uchar);void display_hms();void init_T1(void);void disdate(void);void distim(void);void key(void);void main() second_buff=0; m_buff=0; h_buff=0; second=0; h=m=s=0; init_T1(); timcnt=0; wcnt=0; while(1) display_hms(); / PCON|=0x01; void init_T1(void) TMOD=0x11;
21、TL1=(65536-9216)%256; TH1=(65536-9216)/256; TL0=(65536-1843)%256; TH0=(65536-1843)/256; PT1=1; ET1=1; ET0=1; EA=1; TR1=1; TR0=1;void tim_T1(void) interrupt 3 using 1 TL1=(65536-9216)%256; TH1=(65536-9216)/256; timcnt+; if(timcnt=100) timcnt=0; second+; if(second=60) second=0; m+; if(m=60) m=0; h+; i
22、f(h=24) h=0; buf0=second%10; buf1=second/10; buf2=0x40; buf3=m%10; buf4=m/10; buf5=0x40; buf6=h%10; buf7=h/10; /display_hms(h,m,second);/*void display(uchar time) port_s=0; port_b=ledctrlwcnt; if(wcnt=0)xzzx port_s=ledtime%10; else port_s=ledtime/10; wcnt+; wcnt=wcnt%2;*/ void tim_T0(void) interrupt
23、 1 using 2 TL0=(65536-1843)%256; TH0=(65536-1843)/256; key(); wcnt+; wcnt=wcnt%8; void display_hms() /port_s=0; switch(wcnt) case 0: port_b=ledctrlwcnt; port_s=ledbuf0;break; case 1: port_b=ledctrlwcnt; port_s=ledbuf1;break; case 2: port_b=ledctrlwcnt; port_s=buf2;break; case 3: port_b=ledctrlwcnt;
24、port_s=ledbuf3;break; case 4: port_b=ledctrlwcnt; port_s=ledbuf4;break; case 5: port_b=ledctrlwcnt; port_s=buf5;break; case 6: port_b=ledctrlwcnt; port_s=ledbuf6;break; case 7: port_b=ledctrlwcnt; port_s=ledbuf7;break; void init_distim(void) distim(); flashsite=6; setdis=0; dattim=0;void init_disdat
25、(void) disdate(); flashsite=6; setdis=0; dattim=1;void init_settim(void) distim(); flashsite=6; setdis=1; dattim=0;void init_setdat(void) disdate(); flashsite=0; setdis=1; dattim=1;void kplus(void) /0x04 确定 /if(setdis) / disdatflashsite=(disdatflashsite+1)%10; second=second_buff; m=m_buff; h=h_buff;
26、 TR1=1; void kminus(void) /0x02 秒的设置 / if(setdis) / disdatflashsite=(disdatflashsite+10-1)%10; TR1=0; second_buff=second; k=0; void ktim(void) /0x20 分的设置 /if(setdis) init_settim(); /else init_distim(); TR1=0; m_buff=m; k=1; void kdat(void) /0x40 时的设置 /if(setdis) init_setdat(); /else init_disdat(); T
27、R1=0; h_buff=h; k=2; void kleft(void) /0x10 自加 /if(setdis) / flashsite=(flashsite+1)%DCOUNT; switch(k) case (0): second_buff+; if(second_buff59) second_buff=0; buf0=second_buff%10; buf1=second_buff/10;break; case (1): m_buff+; if(m_buff59) m_buff=0; buf3=m_buff%10; buf4=m_buff/10;break; case (2): h_
28、buff+; if(h_buff23) h_buff=0; buf6=h_buff%10; buf7=h_buff/10;break; void kright(void) /0x08 自减 /if(setdis) / flashsite=(flashsite+DCOUNT-1)%DCOUNT; switch(k) case (0): second_buff-; if(second_buff=255) second_buff=59; buf0=second_buff%10; buf1=second_buff/10;break; case (1): m_buff-;if( m_buff=255)
29、m_buff=59; buf3=m_buff%10; buf4=m_buff/10;break; case (2): h_buff-;if(h_buff=255) h_buff=23; buf6=h_buff%10; buf7=h_buff/10;break; void kset(void) if(setdis) init_distim(); else init_settim();void key(void) uchar keyval; keyport=0xff; keyval=keyport; / keyval=keyval; if(keyval) if(down) if(!keytreat
30、ed) switch (keyval) case MinusVal: kminus(); break; case PlusVal: kplus(); break; case LeftVal: kleft(); break; case RightVal: kright(); break; case TimeVal: ktim(); break; case DateVal: kdat(); break; case SetVal: kset(); default: break; keytreated=1; else ; /*if(keyval=MinusVal)|(keyval=PlusVal) k
31、eytim+; if(keytim=CKeyVal) keytim=0; if(keyval=PlusVal) kplus(); else kminus(); */ else down=1; else down=0; keytreated=0; 第六章 结论 通过做这一次毕业论文,感觉自己的收获很多。毕业论文是为了让我们对平时学习的理论知识与实际操作相结合,在理论和实践教学的基础上进一步巩固已学基本理论及应用知识并加以综合提高,学会将知识应用于实际,提高分析和解决问题的能力。本次设计主要涉及了单片机原理及接口技术的相关知识和C语言编程的诸多要领。设计中涉及到的许多问题,更是对以前所学的知识的回
32、顾及在过去的三年中学到知识的总结,这次设计对我将来的工作有着重要的意义。在此设计中,我积极查阅资料,细心钻研各个细节,完成了数字电子时钟时钟的电路设计,也让我明白了在设计中考虑问题应该全面。在设计中既巩固了我的理论知识,又学会提炼需要的信息的方法。这次对数字电子时钟的设计,让我了解了设计电路的步骤,也让我了解了有关数字电子时钟的原理与设计理念,要实现电路功能总要先设计,成功之后才实际接线的。现在还只停留在理想阶段,也许在设计实际电路过程中会有困难但是我相信只要努力一定能真正设计出实际产品。 在做毕业论文的过程中,我深深地感受到了自己所学到知识的有限,明白了只学好课本上的知识是不够的,要通过图书
33、馆和互联网等各种渠道来扩充自己的知识面。我并不在乎设计是否会成功,这不重要,最重要的是设计的过程。因为设计的过程在整个过程中所占时间最多,锻炼我们的价值也是最大的。设计开始的时候我真的是毫无头绪,手足无措,甚至有过放弃的想法,但终于坚持了下来。我明白了要设计一个成功的电路,除了有创新能力之外,必须要有扎实的知识基础,要熟练地掌握课本上的知识,只有这样才能对试验中出现的问题进行分析解决。在整个电路的设计过程中,花费时间最多的就是那些属于那想法很好但是要实现非常困难的设计并且超出了能力范围的。开始的时候非常着急,但是当选好了方案后,我的干劲就起来了。总体来说,通过这次毕业设计学习,让我单片机的许多
34、课外知识都有了大概的了解,也学会了Proteus软件的使用,这对以后找工作也是一个优势。也是对平时理论学习的一个检验。更重要的是培养了我对学习的兴趣,开拓了自己的眼界,为以后的学习打下了良好的基础,我受益匪浅。由于本人水平有限,文中难免出现错误与不足之处,恳请各位老师批评指正。参考文献1刘华东 单片机原理与应用M 电子工业出版社,第三版2李发春 c51单片机应用设计与技能训练 电子工业出版社 20113 郭天祥,新概念51单片机C语言教程:入门、提高、开发、拓展全攻略M,电子工业出版社,2009-01。 4 胡汉才 单片机原理及其接口技术 M 清华大学出版,1996 5余锡存 单片机原理及接口
35、技术M 西安电子科技大学出版社,2000.7致 谢通过本次毕业设计,我在指导老师高二金的精心指导和严格要求下,获得了丰富的理论知识,极大地提高了实践能力,并对当前电子领域的研究状况和发展方向有了一定的了解,单片机领域这对我今后进一步学习计算机方面的知识有极大的帮助。另外,此次毕业设计还获得了电子系各位领导和老师的大力支持。在此,我忠心感谢各位老师的指导和支持。在未来的工作和学习中,我将以更好的成绩来回报各位领导、老师和同学。其次,感谢我亲爱父母,如果没有他们的对我的支持和关照还有鞭策,给我提供我所需要的一切东西,我想,我对KEIL和PROTEUS这些软件根本就不会这么熟练。通过这次的设计使我认
36、识到我对单片机编程方面的知识知道的太少了,对于书本上的很多知识还不能灵活运用,有很多我们需要掌握的知识在等着我去学习,我会在以后的学习生活中弥补我所缺少的知识。本次的设计使我从中学到了一些很重要的东西,那就是如何从理论到实践的转化,怎样将所学到的知识运用到我以后的工作中去。在大学的课堂的学习只是在给我们灌输专业知识,而我们应把所学的用到我们现实的生活中去,此次的电子时钟设计给我奠定了一个实践基础,我会在以后的学习、生活中磨练自己,使自己适应于以后的竞争。在此特别感谢高老师,是他让我从迷茫的大学生活中找到了方向,高老师有如漆黑茫茫大海中的灯塔。为迷途中的我照亮了光明的前途。感谢他的谆谆教诲,感谢他督促和鞭策,感谢他提供的宝贵资料对他想说的感谢的话太多太多安徽财贸职业学院单片机技术及应用课程设计组长姓名 ( ) 指导教师 成员姓名 ( ) ( ) ( ) ( )设计题目 成绩及评语年 月 日