1单片机秒表的课程设计摘要本课程设计是在单片机最小系统的基础上增加数码管显示电路和键盘控制电路来完成00~99秒的电子秒表硬件电路。电子秒表电路主要由AT89C51单片机最小系统电路、2位一体八段共阳数码管动态显示电路和键盘控制电路组成,它能实现两位数码显示和多次计时,能通过键盘控制电路能控制时间的开始和暂停,能够实现复位功能和计数加一功能。关键字AT89C51单片机;两位数码管动态显示电路;键盘控制电路1.设计要求1.1设计功能用AT89C51设计一个2位LED数码显示“秒表”,显示时间为00~99秒,每秒自动加一。另设计一个“开始”按键和一个“复位”按键。再增加一个“暂停”按键和一个“快加”按键(每10ms快速加一)。1.2按键说明(1)按“开始”按键,开始计数,数码管显示从00开始每秒自动加一;(2)按“复位”按键,系统清零,数码管显示00;(3)按“暂停”按键,系统暂停计数,数码管显示当时的计数;(4)按“快加”按键,系统每10ms快速加一,即数码显示管在原先的计数上快速加一。2.设计过程2.1方案设计方案一:采用分立元件门电路和集成块电路设计数显定时器此方案可分为五个功能模块:秒脉冲发生器、计数器、译码显示电路、时序控制电路。秒脉冲发生器:555振荡器振荡周期T=0.693(1R+22R)C=0.72,频率f=1.39Hz;计数器和控制电路是系统的主要部分,计数器是用可加(减)的计数方法,它是十进制计数的方式,选用74LS192,计时器完成计时功能;控制电路具有直接控制计数器的启动计数、暂停/连续计数、查询所计数、译码显示电路2显示等功能。设计框图如下图所示控制电路计数器脉冲发生器数码显示外部操作开关图一方案二:采用AT89C51单片机设计数显定时器和定时器。本方案采用AT89C51单片机系统来实现。单片机软件编程灵活、自由度大,可用软件编程实现各种控制算法和逻辑控制。单片机系统可控制数码管显示秒表的值,并能用键盘输入暂停,并可实现报捷。同时AT89C51芯片(内部含有8KB的EEPROM),不需要外扩展存储器,可使系统整体结构更为简单。设计框图如下图所示AT89C51单片机八段数码管显示外部操作开关图二方案论证:方案一是电子式,时间走的很准时,也能达到“快加”键的功能,显示时间是现代式的数码管显示,但要做好是有很大的难度的,线非常之多,元件分散、多,容易把线接错。综合考虑,我们采用了方案二以AT89C51芯片为中心控制系统,可实现显示、键盘控制、“快加一”等功能,大大提高了系统的智能化,也使得系统所测结果精度大大提高。2.2器件选择2.2.1AT89C51单片机AT89C51是一种带4K字节FLASH存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。3单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。AT89C51单片机的外型如图三所示。S2/P2.223S3/P2.122P1.67P1.01P1.12P1.23P1.34P1.78P3.3/INT113P1.56EA/VP31P3.4/T014P3.9/X219P3.5/T115P3.8/X118Reset9P3.7/RD17P3.2/INT012P3.1/TXD11S4/P2.021S1/P2.324P2.325P2.426P2.527P2.628PSEN29ALE/P30P3.0/RXD10P0.732P0.633P0.534P0.435P0.336P0.039P0.237P3.6/WR16P0.138P1.45GND20VCC40图三AT89C51引脚图AT89C51有40个引脚,32个外部双向输入/输出(I/O)口。该芯片还具有PDIP40、TQFP44和PLCC44三种封装形式,以适应不同产品的需求。AT89C51还提供以下标准功能:4k字节Flash闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。2.2.2二位一体八段共阳数码管数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划a,b,c,d,e,f,g,dp的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是哪个数码4管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。由于二位一体数码管内部管脚相连,外部只有10个管脚,对于电路的连接有了很大的简化。2.3系统电路设计在本秒表系统中,AT89C51单片机是整个系统的核心,对整个系统的信息输入、处理、信息输出进行控制。键盘和LED显示起输入信息和显示信息的作用,本系统中共有四个独立按键分别作为秒表的“开始”“复位”“暂停”和“快加”按键,通过程序的控制,使按键控制数码管上数字的走动,从而起到秒表的效果。系统硬件结构图如下图所示AT89C51单片机电源11.0592M晶振2位一体数码管4个独立按键图4系统硬件结构框2.3.1电源电路电源电路是系统最基本的部分,任何电路都离不开电源部分,由于三端集成稳压器件所组成的稳压电源线路简单,性能稳定,工作可靠,调整方便,已逐渐5取代分立元件,在生产中被广泛采用,由于是小系统,我们采用7805提供+5V的稳定电压。2.3.2晶体振荡电路AT89C51单片机内部的振荡电路是一个高增益反相放大器,引线X1和X2分别为反向振荡放大器的输入及内部时钟工作电路的输入和来自反向振荡器的输出,该反向放大器可以配置为片内振荡器。这里,我们选用AT89C51单片机11.0592MHZ的内部振荡方式,电路如下:电容器1C,2C起稳定振荡频率,快速起振的作用,1C和2C可在20-100pf之间取,这里取20pf,接线时要使晶体振荡器X1尽可能接近单片机。具体晶振振荡电路如图5所示20pFC220pFC312Y111.0592MGNDX1X2图5晶体振荡电路2.3.3复位电路本系统采用上电+按键复位电路,上电后,由于电容充电,使RST持续一段高电平时间。当单片机已在运行之中时,按下复位键也能使用使RST持续一段时间的高电平,从而实现上电加开关复位的操作。这不仅能使单片机复位,而且还能使单片机的外围芯片也同时复位。当程序出现错误时,可以随时使电路复位。具体复位电路图6所示S110uFC11KR4GNDVCCRST1KR3图6复位电路2.3.4显示电路6显示电路既可以选用液晶显示器,也可以选用数码管显示,我们采用的是二位一体共阳八段数码管显示电路。用2个共阳极LED显示,LED是八段式显示器,内部有7个条形发光二极管和1个小圆点发光二极管组成,根据各管的亮暗组合成字符。在用数码管显示时,我们有静态和动态两种选择,静态显示程序简单,显示稳定,但是占用端口比较多;动态显示所使用的端口比较少,可以节省单片机的I/O口。在设计中,我们采用LED动态显示,用P0口驱动显示。由于P0口的输出级是开漏电路,用它驱动时需要外接上拉电阻才能输出高电平。数码管显示电路电路图如图7所示D0D2D3D4D5D6D7D1Q1PNP2KR3LED1VCCQ2PNP2KR4LED2c1dp2e3d4g5f6w17w28b9a10SEG1330R1330R2图7显示电路2.3.5键盘电路在按键电路中,我们可以在I/O口上直接接按键,或者通过I/O口设计一个键盘,然后通过键盘扫描程序判断是否有键按下等。键盘扫描电路节省I/O口,但编程有些复杂,在这里,由于我们所用的按键较少,且系统是一个小系统,有足够的I/O口可以使用,为了使程序简化,我们采用按键电路,用部分P3口做开关,P3.3为开始停止,P3.4为清零,用外部中断INT1开始,另外用软件法消除抖动。键盘电路如图8所示S3S4S5S4S3S2S1GNDS2图8键盘电路72.3.6硬件主电路用AltiumDesignerSummer09画出其硬件主电路图如图9所示S3S4S5S1VCCGNDRST10uFC120pFC220pFC312Y111.0592MGNDX1X21KR6GNDVCCRSTD0D2D3D4D5D6D7D1Q1PNP2KR3LED1S4S3S2S1X2X1D7D0D2D3D4D5D6D1GNDS21KR5VCCQ2PNP2KR4LED2S1S2S3S4LED1LED2VCCS2/P2.223S3/P2.122P1.6/FM27P1.0/DB11P1.1/DB22P1.2/DB33P1.3/DB44P1.7/T18P3.3/INT113P1.5/FM16EA/VP31P3.4/T014P3.9/X219P3.5/T115P3.8/X118Reset9P3.7/RD17P3.2/INT012P3.1/TXD11S4/P2.021S1/P2.324P2.325P2.426D4/P2.527D1/P2.628PSEN29ALE/P30P3.0/RXD10D0/P0.732D2/P0.633D3/P0.534D5/P0.435D6/P0.336LED1/P0.039D7/P0.237P3.6/WR16LED2/P0.138P1.45GND20VCC40STC189C52c1dp2e3d4g5f6w17w28b9a10SEG1330R1330R2图9硬件主电路图2.4软件设计此次选用C51来编程,首先要有初始化程序,通过初始化程序,将对主程序所用到的变量、常量以及各个参数和所调用的子函数定义。其次还有显示程序、按键扫描及处理程序、时钟程序和倒计时程序,系统软件流程图图如图10所示:开始系统初始化数码管显示是否有按键按键扫描及处理图10软件流程图3.结果分析81)按下“开始”键K1时,数码管从00开始加一显示至99;按下“暂停”键K2时,数码管示数暂停显示;按下“复位”键K3时,数码管示数清零至00;按下“快加”键K4时,数码管示数快速加一。2)数码管可以从00~99正常的显示,期间并无乱码的出现,说明软件程序编写的很正确。4.设计总结4.1设计中出现的问题和相应的解决方案。问题:LED显示时出现数字的错误原因:在将2位一体数码管2进制数换算成16进制数时,由于疏忽,将数字9的16进制数显示错误。解决方法:在认真检查重新换算后,秒表可以从00~99正常显示了。4.2心得体会在电路设计初期,我们对于如何设计“电子秒表”有点困惑,不了解这个秒表的要求与实现方法,为了让自己心里有个底,我们先在图书馆找了相关书籍,并且在网上查了一些“秒表”的制作实例,在资料查询、分析并请教同学后,我们发现直接用AT8