51单片机秒表计时器课程设计报告(含C语言程序).docx
51单片机秒表计时器课程设计报告(含C语言程序)当前位置:文档视界51单片机秒表计时器课程设计报告(含C语言程序)51单片机秒表计时器课程设计报告(含C语言程序)摘要本设计是一个秒表计时器,采用51单片机实现。电路包括下面几部分:单片机最小系统部分,数码管显示部分,摁键开关部分部分。电路选用共阴型4位数码管组成时钟显示电路;时钟的增减控制以及清零部分主要由轻触开关构成的摁键系统组成;信号接收和处理部分主要由单片机来执行。接通电源后,秒表计时器处于初始状态,4位数码管显示000.0。当摁下“开场开关时,秒表开场计时,数码管显示当前状态的时间。当再次摁下开关时,数码管停止计时。摁下“清零键后,系统重新回到初始状态。关键词单片机最小系统秒表计时摁键控制1、任务设计一个秒表计时器,在51单片机的控制作用下,采用4个LED数码管显示时间,计时范围设置为00.060.0秒,即准确到0.1秒,用按键控制秒表的“开场、“暂停、“复位,按“开场按键,开场计时;按“暂停按键,系统暂停计时;再按“开场键,系统继续计时;数码管显示当前计时值;按“复位按键,系统清零。2、设计要求1开场时显示00.0。每按下S1键一次,数值加1s;2每按下S2键一次,数值减1s;3每按下S3键一次,数值清零;4每按下S4键一次,启动定时器使数值开场自动每秒加1,再次按下S4键,数值停止自动加1,保持显示原数。3、发挥部分1开关按键3:“复位60.0按键用来60秒倒计时。按键按下去时数码管复位为“60.0用于倒计时。2开关按键4:倒计时“逐步自减按键。按键按下去则是数码管开场“逐步自减倒计时。3开关按键5:倒计时初始值“增加按键。4开关按键6:倒计时初始值“减小按键。4、课程设计的难点单片机电子秒表需要解决三个主要问题,一是有关单片机定时器一个控制顺序计时,一个控制倒计时的使用;二是怎样实现LED的动态扫描显示;三是怎样对键盘输入进行编程。5、课程设计仪器集成电路芯片STC89C52,八段数码管,MCS-51系列单片机微机仿真课程系统中的软件keiluvision2。摘要(2)关键词(2)任务书(3)1、设计任务目的(5)2、设计方案选取与论证(5)2.1系统总体设计方案(5)2.2系统整体框图(5)3、电路设计(6)3.1单片机最小系统设计(6)3.2数码管显示模块设计(6)3.3摁键控制系统模块设计(6)3.4程序设计(6)4、制作及调试经过(11)5、结果分析和总结(12)参考文献(12)附录a秒表计时器原理图(13)附录b元器件清单(14)附录c秒表计时器实物图(15)1、设计任务目的1.根据单片机课程所学内容,结合其他相关课程知识,设计电子秒表,以加深对单片机知识的理解,锻炼实践动手能力,为以后的毕业设计和工作打下坚实基础;2.熟悉汇编语言或C语言的程序设计方法,熟悉51系列单片机的使用;3.把握单片机的内部功能模块的应用,如定时器/计数器、中断、I/O口、串行口通讯等功能;4.把握单片机应用系统的软硬件设计经过、方法及实现。2、设计方案选取与论证2.1系统总体设计方案使用STC89C51单片机作为核心控制部件,采用12M晶体振荡器及30PF微小电容构成振荡电路;用1个四位一体共阴极数码显示管作为显示部分,构成数字式秒表的主体构造,配合独立式键盘和复位电路完成此秒表的计时、清零、停止、增减初始时间等各项功能。2.2系统总体整体框图图2.2系统设计框图3、电路设计3.1单片机最小系统设计图3.1单片机最小系统1.时钟电路在XTAL1、XTAL2的引脚上外接定时元件一个石英晶体和两个电容,内部振荡器便能产生自激振荡。在本设计中采用的12M的石英晶振。和晶振并联的两个电容的大小对振荡频率有微小影响,能够起到频率微调作用。当采用石英晶振时,电容能够在2040pF之间选择。2.复位电路复位操作通常有两种基本形式:上电自动复位和开关复位。上电霎时,电容两端电压不能突变,此时电容的负极和RESET相连,电压全部加在了电阻上,RESET的输入为高,芯片被复位。随之+5V电源给电容充电,电阻上的电压逐步减小,最后约等于0,芯片正常工作。并联在电容的两端为复位按键,当复位按键没有被按下的时候电路实现上电复位,在芯片正常工作后,通过按下按键使RST管脚出现高电平到达手动复位的效果。3.EA/VPP31脚的功能和接法51单片机的EA/VPP31脚是内部和外部程序存储器的选择管脚。当EA保持高电平常,单片机访问内部程序存储器;对于现今的绝大部分单片机来讲,其内部的程序存储器一般为flash容量都很大,因而基本上不需要外接程序存储器,而是直接使用内部的存储器。4.P0口外接上拉电阻51单片机的P0端口为开漏输出,内部无上拉电阻。所以在当做普通I/O输出数据时,由于V2截止,输出级是漏极开路电路,要使“1信号即高电平正常输出,必须外接上拉电阻。3.2数码管显示模块设计显示部分采用动态显示。数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的共阴极增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到一样的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的位选通端,就使各个数码管轮流受控显示,这就是动态驱动。动态显示是利用人眼视觉暂留特性来实现显示的。事实上,显示器上任何时刻只要一个数码管有显示。由于各数码管轮流显示的时间间隔短、节拍快,人的眼睛反响不过来,因而看到的是连续显示的现象。为防止闪烁延时的时间在1ms左右,不能太长,也不能太短。3.3摁键控制系统模块设计由P1口作为独立摁键信号的输入端控制时钟的加1s、减1s、复位60.0s等操作。用外部中断0作为秒表计时器的开启和暂停的操作。且所有摁键均为低电平有效。其中部分摁键为单刀双掷开关用于控制增计时或减计时以及限60.0s计时和60.0s外计时。3.4程序设计如下:#include/包含52单片机寄存器定义的头文件unsignedcharTab1=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/段码表unsignedcharTab2=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef;/个位段码表unsignedintx;unsignedchark;sbitint0=P32;sbitint1=P33;sbitSUB60=P11;sbitS60=P12;sbitK5=P13;sbitK6=P14;sbitK7=P15;sbitK8=P16;/*延时1ms基准*/voiddelay1ms(unsignedinti)unsignedcharj;while(i-)for(j=0;jdelay1ms(6);P2=0xfb;/P2.2引脚输出低电平,DS6点亮P0=Tab2x%100/10;/显示个位delay1ms(6);P2=0xf7;/P2.3引脚输出低电平,DS7点亮P0=Tab1x%10;/显示0.1位delay1ms(6);P2=0xff;/*函数功能:主函数*/voidmain(void)x=0;TMOD=0x01;/TMOD=00000001B,使用计数器T0的工作方式1EA=1;/开起总中断ET0=1;/允许定时器T0的中断EX0=1;/允许外中断INT0IT0=1;/INT0为下负脉冲触发方式TH0=(65536-50000)/256;/计数器T0高8位赋初值TL0=(65536-50000)%256;/计数器T0低8位赋初值TF0=0;/溢出标志位清零while(1)/*K5P1.3按一次加1开关S1*/if(K5=0)delay1ms(20);if(K5=0)x=x+10;while(!K5);/摁键关断摁一次触发一次/*K6P1.4按一次减1开关S2*/if(K6=0)delay1ms(20);if(K6=0)if(x=0)x=10;/在00.0的时候停止x=x-10;while(!K6);/摁键关断摁一次触发一次/*K7P1.5初始值赋值为60.0秒开关S5*/if(K7=0)delay1ms(20);if(K7=0)x=600;/赋初值60.0秒while(!K7);/摁键关断摁一次触发一次/*S60控制60S停止开关P1.2*/if(x=600)if(S60=0)/假如P1.2口是低电平,秒表变化范围00.060.0TR0=0;/*K8P1.6清零clear0摁键开关S3*/if(K8=0)delay1ms(20);/延时消震if(K8=0)x=0;/数据清0数码管显示000.0TR0=0;/溢出标志位清0/*数码管显示*/Display(x);/*INT0中断函数用于开场或暂停开关S4*/voidbegin_stop()interrupt0if(int0=0)delay1ms(30);/延时消震if(int0=0)TR0=TR0;/按键摁一次读秒开场或暂停if(x=0&&SUB60=0)TR0=0;/*T0计数器中断控制每隔加0.1秒*/voidadd_one0()interrupt1k+;if(k=2)k=0;TF0=0;if(SUB60=1)/当P1.1口是高电平常秒表加0.1s/当P1.1口是低电平常秒表减0.1sx=x+1;/秒表加0.1selsex=x-1;/秒表减0.1sif(x=0)TR0=0;if(x=9999)TR0=0;TH0=(65536-50000)/256;/计数器T0高8位赋初值TL0=(65536-50000)%256;/计数器T0低8位赋初值4、制作及调试经过4.1电路的制作(1)分析各单元电路图,并分析其各部分的功能;(2)用仿真软件仿真电路的功能,并检查能否有错,无误后进行下步工作;(3)查找有关文献了解各元件的功能及引脚和有关的资料;(4)分别焊接单片机最小系统、数码管显示电路和摁键控制电路,与此同时检查各元器件能否可用,并分辨其引脚;(5)对照事先设计好的原理图仔细检查在实物中能否有接错的地方(主要检查集成电路的引脚与导线能否出错接错和能否出现了短路),若发现有,就立即改正。以防给实物通电之后,出现意外。然后,用数字万用表检测实物中能否有不导通的地方,若有,应立即修正。以防通电后不能工作,而怀疑其他地方出错。(6)给实物通电,并进行调试。看电路工作能否正常。若有误,则检查并考虑错误原因,然后进行修改直至电路工作正常为止。4.2电路的调试起初我打算用PCB板来做秒表计时器,由于一些条件也不允许(如腐蚀液和钻孔机等器件没有),经过再三考虑,我选择了用万用板来制作秒表计时器。但在制作的经过中我也碰到了很多问题。问题以及解决办法如下:(1)问题1:由于在焊电子元件及芯片时没有注意到元件的排布以及芯片的引脚问题,使得电路板上的跳线很密,这给查线带来了很大的困难,使得最后