《可任意启动停止的电子秒表设计.doc》由会员分享,可在线阅读,更多相关《可任意启动停止的电子秒表设计.doc(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 电子技术课程设计报告 可任意启动/停止的电子秒表设计 学 院: 机械与电子工程学院 年级专业: 08级电子信息工程 学 号: 姓 名: 指导教师: 完成时间: 2011.07.09 成 绩: 摘 要本系统为基于AT89C52单片机,可任意启动/停止的电子秒表系统。该系统由硬件和软件组成。系统硬件主要由电源电路、按键、数码管显示电路及其他辅助电路组成;软件利用Keil工具,采用8051C语言编程。该系统可以实现0.01s的精度,以及对运行时间的显示、启动或停止秒表等功能。关键词:单片机;数码管;按键目录1 设计目的及要求11.1 设计目的和意义11.2 设计任务与要求12 硬件电路设计12.1
2、 总体方案设计12.2 功能模块电路设计22.2.1 单片机的选型22.2.2 振荡电路设计42.2.3 复位电路设计42.2.4 数码管显示电路设计52.2.5 按键电路设计62.3 总电路设计73 软件系统设计83.1 软件系统总体方案设计83.2 软件流程图设计84 系统调试95 总结105.1 本系统存在的问题及改进措施105.2心得体会11参考文献11附录:系统的源程序清单121 设计目的及要求1.1 设计目的和意义当今,计算机技术带来了科研和生产的许多重大飞跃,微型计算机的应用已渗透到生产、生活的各个方面。其中单片微型计算机虽然问世不久,然而体积小、价廉、功能强,其销售额以每年近8
3、0%的速率增长。他的性能不断提高,适用范围愈来愈宽,在计算机应用领域已占有日益重要的低位。秒表应用于我们生活、工作、运动等需要计时的方面。钟表的数字化给人们生产生活带来了极大的方便,而且大大的扩展了钟表原先的报时功能。它由刚开始的机械式秒表发展到今天所常用的数字式秒表。秒表的计时精度越来越高,功能越来越多,构造也日益复杂。电子科技日新月异,人们对现代电子设备的智能化和微型化及其精度提出来更高的要求,本次采用了AT89C52单片机,其灵活性和可靠性都相对提高。鉴于以上要求,我利用proteus仿真软件,设计了一款基于AT89C52单片机的可启动/暂停的秒表计时系统。1.2 设计任务与要求系统要求
4、6位LED数码显示,计时单位为1/100秒。利用功能键进行启/停控制。其功能为:上电后计时器清0,当第一次(或奇数次)按下启/停键时开始计数。第2次(或偶数次)按下该键时停止计时,再一次按启/停键时清零后重新开始计时。2 硬件电路设计2.1 总体方案设计电子秒表系统主要完成对计时实时的显示,精度达到1/100s,以及通过功能键可以使当前计时暂停或重新计时。系统主要包括晶振电路、复位电路、按键电路以及数码管显示电路。系统采用六个共阴极数码管,其中八位数据口与单片机的P0口通过74LS245双向总线收发器相接,可增加P0的驱动能力。6个片选信号连接单片机P1口的低六位。该电路可满足对计时时间的显示
5、,最后一个最小显示单位为0.01s,溢出则向前进位,显示时间的范围为09999.99s。本系统按键采用外部中断的方式,因此按键接入单片机的P3.2口,通过下降沿触发方式来控制计时器的启停。系统的整体框图如图1所示: 图1 系统整体框图2.2 功能模块电路设计,2.2.1 单片机的选型由于本系统只需要单片机完成对计时的显示以及处理由按键产生的中断。对于I/O资源以及处理速度无特殊要求,故选择ATMEL公司生产的AT89C52单片机,AT89C52增加了在线调试功能,即程序可以通过JTAG接口下载,调试和固化,因而该芯片的开发不再需要昂贵的硬件仿真器,可实现实时仿真,所有的资源都可以为用户所使用,
6、可以在线编程或在系统编程,更进一步地说,在线编程或在系统编程是开发的系统具有了通过网络进行升级、维护的潜在功能。AT89C52的性能及特点1:l 与MCS-51系列单片机兼容。l 片内有8K可在线重复编程的快速内 存可擦写存储器(Flash Memory)。l 存储器可循环写入/擦写10000次以上。l 存储器数据保存时间为10年以上。l 宽工作电压范围:Vcc可为2.7V-6.5V。l 全静态工作:可从0Hz-24MHz。l 程序存储器具有三级加密保护。l 256字节的内部RAM。l 32条可编程I/O口线。l 三个16位定时器/计数器。l 中断结构具有5级(6级)中断源和两个优下级。l 可
7、编程全双工串行通讯。l 空闲维持低功耗和掉电状态保护存储数据。 AT89C52引脚图如图2所示。图2 AT89C52引脚图VCC: +5V电源输入GND:接地P0口是一个双向8位三态I/O口,每个口可独立控制。使用时需外接上拉电阻。P1口是一个准双向8位I/O口,它的功能是单一的,只能用作数据的输入或者输出。P2口是一个准双向8位I/O口,输出时,从P2.x端口可输出CPU写到锁存器上的信号。当该接口用做数据输入接口是,应先向该位写1,然后,读该位即可读入输入数据。P3口是具有第二功能的准双向8位I/O口。ALE/PROG:地址所存/编程信号线。当P0口工作在第二功能时从该端口可复用工作,某时
8、刻该端口可以送出地址信号A0A7,而另外的时刻该端口传送的是数据信号D0D7。利用ALE可以将地址信号A0A7锁存到地址锁存器。/VPP:该控制信号线也具有双重功能,是允许访问片外ROM/编程高电压引线。:程序存储器允许输出控制端,常用作片外ROM的读控制信号,低电平有效。RESET:复位引脚,当该端加上超过24个时钟周期的高电平时,可是8051复位。系统复位电路如图2.3所示。X1、X2:外接时钟引脚。X1为片内振荡电路的输入端,X2为片内振荡电路的输出端。2.2.2 振荡电路设计AT89C52内部有一个用于构成片内振荡器的高增益反相放大器, 振荡器产生的信号送到CPU, 作为CPU的时钟信
9、号,驱动CPU产生执行指令功能的机器周期。引脚XTAL1和XTAL2是此放大器的输人端和输出端。这个放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起可构成一个自激振荡器, 振荡电路的连接如图所示图8所示,外接石英晶体或陶瓷谐振器以及电容C1和C2构成并联谐振电路, 接在放大器的反馈回路中。对外接电容C1和C2的值虽然没有严格的要求, 但电容的大小多少会影响振荡器频率的高低、振荡器的稳定性、起振圈内部振荡的接法的快速性和温度稳定性。外接石英晶体时, C1和C2一般取(40pF-10pF),外接的是石英晶体, 所以,C1、C2选择标称值30pF2。系统振荡电路如图3所示。图3 振荡电路2.2.3
10、 复位电路设计单片机复位是使CPU和系统中的其他功能部件都处在一个确定的初始状态, 并从这个状态开始工作。无论是在单片机刚开始接上电源时, 还是断电后或者发生故障后都要复位。89系列单片机的复位信号是从RST引脚输人到芯片的施密特触发器中的。当系统处于正常工作状态时, 且振荡器稳定后, 如果RST引脚有一个高电平并维持2个机器周期(24个振荡周期), 则CPU就可响应并且将系统复位。复位分为手动复位和上电复位。本设计系统采用的是上电自动复位。系统复位电路如图4所示。图4 复位电路2.2.4 数码管显示电路设计本系统使用了6只集成式共阴极数码管(7SEG-MPX6-CC-BLUE),所有数码管a
11、引脚并联在一起,b,c,d,e,f,g,dp也是分别并联的,任何时候发送的段码均会传送到所有的数码管上,所有数码管共阴极是独立的。为了使不同的数码管显示不同字符,这种集成式多位数码管常用的动态扫描显示技术,它利用了人的视觉暂留特征,宣统第1只数码管时,发送1的段码;选通第2只数码管时,发送2的段码;选通第3只数码管时,发送3的段码。每次仅选通一只数码管,发送对应的段码,每次切换选通下一数码管并发送相应段码的时间间隔非常短,视觉惰性使人感觉不到字符是一个接一个显示在不同数码管上的,而会觉得所有字符很稳定的同时显示在不同数码管上3。数码管电路如图5所示。图5 数码管显示电路2.2.5 按键电路设计
12、 本系统的计数按键连接单片机的P3.2(INT0),程序中将INT0的中断触发方式设置为下降沿触发,这样使得计数按键按下时,P3.2上由高到低的跳变会触发中断,如果按下后没有释放,中断则不会持续触发,只有在释放按键后再次按键时,才会因为又出现高电平到低电平的跳变而再次触发中断,这样会使计数值仅在计数键每次重新按下时累加。按键电路如图6所示。图6 按键电路2.3 总电路设计系统总电路图如图7所示。图7 系统总电路图3 软件系统设计3.1 软件系统总体方案设计 系统软件由主程序模块、测温程序模块、键盘扫描程序模块以及液晶驱动程序模块组成。软件总体框图如图8所示。图8 软件总体框图3.2 软件流程图
13、设计系统软件流程图如图9所示。图9 系统软件流程图4 系统调试程序在Keil uVision4环境下编写,编译通过后生成.hex文件加载到Protuse下可正常运行。程序刚运行前数码管显示初值为0000.00,接通电源后系统开始计时,程序中每0.01s进入一次定时中断,故精度可达到0.01s。在程序运行过程中若按下一次功能键,则系统暂停计时,数码管显示计时截至状态;若再次按下功能键,系统自动清零并重新开始计时,如此重复进行下去。图10为第一次按下功能键后的状态。图09 系统调试状态图5 总结5.1 本系统存在的问题及改进措施本系统所设计的秒表计时器基本实现了所要求的功能,但经过后期的实验发现,
14、其实本系统的精度还不是特别精确,做过对比后得知,当该系统运行大概450秒时,与标准时间相比相差一秒,这对计时时间所要求高精度还需要进一步矫正。依据个人观点,实现高精度的计时,仅通过单片机内部定时并不能到达要求,因为系统每次进入中断处理函数都会多少消耗些没经预算的时间,长时间积累之后误差就会变明显。希望以后能改正这些误差,是通过外加定时器还是修改参数是在以后的学习中要注意的。5.2 心得体会 本次课程设计是电子技术基础,是对所学单片机理论知识的一次综合运用。在本次设计过程中,要求我独立查阅资料,设计电路。这样可以在实践中锻炼我的工程素质,培养我的动脑、动手能力,提高我的综合能力。通过这次对电子秒
15、表的设计与制作,让我了解了设计电路的程序,也让我了解了关于秒表的基本原理与设计理念。要想成功的做好本次课程设计,我们需要有扎实的知识基础,要熟练的掌握课本上的知识,这样才能对试验实验中出现的问题进行分析解决,要有耐心和毅力。最后,这次设计培养了自己严谨认真,实事求是的好习惯。一个复杂的电路原理图,涉及到很多的接线与元器件,任何一根线连接错误,都有可能导致输出不正确。连接的时候,要特别注意结点。每完成一个电路原理图,要记着保存。参数要选择正确,板块的布局要紧凑美观等。通过对细节的修正,是使自己设计的电路图更加符合实际的功能要求。由于本人水平有限,设计中难免有纰缪之处,还请各位老师指正润色。参考文
16、献1 郭文川主编. 单片机原理与接口技术. 北京:中国农业出版社,2007.2 郭天祥主编. 51单片机C语言教程. 北京:电子工业出版社,2009.3 彭伟主编.单片机C语言教程设计实例. 北京:电子工业出版社,2009.附录1:系统的源程序清单#include #include #define uchar unsigned char#define uint unsigned intuchar Count=0;uchar code DSY_CODE= 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;uchar Digits_of_6DSY=
17、0,0,0,0,0,0;void DelayMS(uint x) uchar i;while(-x) for(i=0;i120;i+);/主程序/void main() uchar i,j;TMOD = 0x01; /定时器0 工作于方式1TH0 = (65535-10000)/256;TL0 = (65535-10000)%256;IE = 0x83; /开外部中断0和计时器中断0IT0 = 1; /下降沿触发TR0 = 0; /定时器开始工作Digits_of_6DSY0=0;Digits_of_6DSY1=0;Digits_of_6DSY2=0;Digits_of_6DSY3=0;Dig
18、its_of_6DSY4=0;Digits_of_6DSY5=0;while(1) j = 0x7f;for(i=5;i!=-1;i-)/显示6位 j=_crol_(j,1);P1 = j;P0 = DSY_CODEDigits_of_6DSYi;if(i=2) P0 |= 0x80;/ 1/100 精确度小数点显示DelayMS(2); void Time0() interrupt 1 uchar i;TH0 = (65535-10000)/256;TL0 = (65535-10000)%256;Digits_of_6DSY0+;for(i=0;i=5;i+) if(Digits_of_6D
19、SYi = 10) Digits_of_6DSYi = 0;if(i != 5) Digits_of_6DSYi+1+;else break;void ex_int() interrupt 0 Count+;if(Count=1)TR0=1 ;if(Count=2)TR0=0;if(Count=3)Digits_of_6DSY0=0;Digits_of_6DSY1=0;Digits_of_6DSY2=0;Digits_of_6DSY3=0;Digits_of_6DSY4=0;Digits_of_6DSY5=0;Count=0;#include #include #define uchar un
20、signed char#define uint unsigned intuchar Count=0;uchar code DSY_CODE= 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;uchar Digits_of_6DSY=0,0,0,0,0,0;void DelayMS(uint x) uchar i;while(-x) for(i=0;i120;i+);/主程序/void main() uchar i,j;TMOD = 0x01; /定时器0 工作于方式1TH0 = (65535-10000)/256;TL0 = (65535-1
21、0000)%256;IE = 0x83; /开外部中断0和计时器中断0IT0 = 1; /下降沿触发TR0 = 1; /定时器开始工作while(1) j = 0x7f;for(i=5;i!=-1;i-) /显示6位 j=_crol_(j,1);P1 = j;P0 = DSY_CODEDigits_of_6DSYi;if(i=2) P0 |= 0x80;/ 1/100 精确度小数点显示DelayMS(2); void Time0() interrupt 1 uchar i;TH0 = (65535-10000)/256;TL0 = (65535-10000)%256;Digits_of_6DSY0+;for(i=0;i=5;i+) if(Digits_of_6DSYi = 10) Digits_of_6DSYi = 0;if(i != 5) Digits_of_6DSYi+1+;else break;void ex_int() interrupt 0TR0=0 ; Count+;if(Count=2)Digits_of_6DSY0=0;Digits_of_6DSY1=0;Digits_of_6DSY2=0;Digits_of_6DSY3=0;Digits_of_6DSY4=0;Digits_of_6DSY5=0;TR0=1;Count=0;14