收藏 分销(赏)

可任意启动停止的电子秒表设计.docx

上传人:xrp****65 文档编号:6132826 上传时间:2024-11-28 格式:DOCX 页数:18 大小:422.02KB 下载积分:10 金币
下载 相关 举报
可任意启动停止的电子秒表设计.docx_第1页
第1页 / 共18页
可任意启动停止的电子秒表设计.docx_第2页
第2页 / 共18页


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

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 环境建筑 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服