《篮球计分器课程设计..doc》由会员分享,可在线阅读,更多相关《篮球计分器课程设计..doc(29页珍藏版)》请在三一办公上搜索。
1、机械与电子工程学院课程设计报告课 程 名 称 单片机原理及接口技术 设 计 题 目 篮球计分器的设计 所学专业名称 自动化 班 级 111 学 号 011123 学 生 姓 名 小微 指 导 教 师 王老师 2014年5月10日机电学院数字电子技术课程设计任 务 书设计名称: 篮 球 计 分 器 的 设 计 学生姓名: 小微 指导教师: 王老师 起止时间:自 2013 年 5 月 12 日起 至 2013 年 5 月 26 日止一、 课程设计目的设计一种基于单片机技术对篮球比赛进行简单计分的篮球计分器。二、课程设计任务:1、能记录整个赛程的比赛时间,并能随时实现暂停。 2、能随时刷新甲、乙两队
2、在整个过程中的比分, 加分有误时可通过按键实现减分调整。 3、中场交换比赛场地时,能自动交换甲、乙两队比分的位置。 4、比赛结束时,能发出报警声。 5需要调整比赛时间,可通过按键进行加时和减时的调整。 三、基本要求:1、允许采用MCS-51系列或其他类型单片机。2、系统程序采用汇编或C语言编制。3、硬件原理图采用proteus软件绘制。机电学院单片机课程设计指导老师评价表院(部)机电学院年级专业自动化111学生姓名小微学生学号011123题 目篮 球 计 分 器 的 设 计一、 指导老师评语该课题是基于单片机的篮球计分器设计,采用单片机80C51,4个两位共阳极LED数码管显示时间和甲乙两队比
3、分,同时矩阵键盘实现了加分,减分,比分切换等功能,达到设计目的。报告文字通顺,内容详实,论述充分、完整,立论正确,结构合理;报告字数符合相关要求,课题背景介绍清楚;设计方案合理逻辑性强,具有说服力;图表完备、符合规范要求;能对整个设计过程进行全面的总结,得出有一定价值的实验结果。课程设计总体结构合理,思路清晰,设计方案正确详细,课程设计已达到要求。指导老师签名: 年 月 日 二、 成绩评定指导老师签名: 年 月 日 目录摘要与关键字11.绪论21.1设计背景21.2计任务及要求22.系统总体方案设计32.1方案设计与选择3方案一:3方案二:4方案确立:43.系统硬件设计53.1篮球计分器硬件设
4、计的基本要求53.1.1硬件设计基本要求53.1.2引脚应用说明53.1.3引脚排列图63.2显示电路73.2.1显示电路设计73.2.2按键设计83.4晶振电路模块83.5复位电路模块93.6报警模块94. 系统程序设计104.1 设计思想104.2 主程序设计105.仿真验证126.结论13参考文献14附录一15附录二16摘要与关键字摘要:单片机,亦称单片微电脑或单片微型计算机。它是把中央处理器(CPU)、随机存取存储器(RAM)、只读存储器(ROM)、输入/输出端口(I/0)等主要计算机功能部件都集成在一块集成电路芯片上的微型计算机。本设计是基于AT89S52单片机的篮球计时计分器,利用
5、7段共阴LED作为显示器件。在此设计中共接入了4个2位一体7段共阴LED显示器前者用来记录赛程时间,其中2位用于显示分钟,2位用于1显示秒钟,后者用于记录甲乙队的分数,每队2个LED显示器显示范围可达到099分。赛程计时采用倒计时方式,比赛开始时启动计时,直至计时到零为止。其次,为了配合计时器和计分器校正调整时间和比分,我们特定在本设计中设立了一个4*4的矩阵键盘,用于设置,调整时间,启动,调整分数和暂停等功能。采用单片机控制是这个系统按键操作使用简洁,LED显示,安装方便。主控芯片采用AT89S52单片机,采用C语言进行编程,编程后利用Keil uVision3来进行编译,再生成的HEX文件
6、装入芯片中,采用proteus软件来仿真,检验功能是否能够正常实现。关键词:篮球计时计分系统;七段共阴LED数码管;AT89C511.绪论1.1设计背景体育比赛计时计分系统是对体育比赛过程中所产生的时间,比分等数据进行快速采集记录,加工处理,传递利用的信息系统。根据不同运动项目的不同比赛规则要求,体育比赛的计时计分系统包括测量类,评分类,命中类,制胜类得分类等多种类型。篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统。篮球比赛的计时计分系统由计时器,计分器等多种电子设备组成,同时,根据目前高水平篮球比赛要求,完善的篮球比赛计时计分系统
7、设备应能够与现场成绩处理,现场大屏幕,电视转播车等多种设备相联,以便实现高比赛现场感,表演娱乐观众等功能目标。由于单片机的集成度高,功能强,通用性好,特别是它具有体积小,重量轻,能耗低,价格便宜,可靠性高,抗干扰能力强和使用方便等独特的优点,使单片机迅速得到了推广应用,目前已经成为测量控制应用系统中的优选机种和新电子产品的关键部位。世界各大电气厂家,测控技术企业,机电行业,竞相把单片机应用于产品更新,作为实现数字化,智能化的核心部件。篮球计时计分器就是以单片机为核心的计时计分系统,由计时器,计分器,综合控制器和24秒控制器等组成。1.2计任务及要求任务: 设计一个用于赛场的篮球计时计分器。要求
8、:1、能记录整个赛程的比赛时间,并能随时实现暂停。 2、能随时刷新甲、乙两队在整个过程中的比分, 加分有误时可通过按键实现减分调整。 3、中场交换比赛场地时,能自动交换甲、乙两队比分的位置。 4、比赛结束时,能发出报警声。 5需要调整比赛时间,可通过按键进行加时和减时的调整。 2.系统总体方案设计篮球计时计分器主要包括单片机控制系统、计时显示模块、计分显示模块、定时报警,按键控制键盘模块。通过这几个模块的协调工作就可以完成相应的计时计分控制和显示功能。这四个模块的相互连接如下图1-1所示:图2-1系统总流程图本设计是基于AT89S52单片机的篮球计时计分器,利用7段共阴LED作为显示器件。在此
9、设计中共接入了1个四位一体7段共阴LED显示器,2个两位一体7段共阴LED显示器,前者用来记录赛程时间,其中2位用于显示分钟,2位用于显示秒钟,后者用于记录甲乙队的分数,每队2个LED显示器显示范围可达到099分。赛程计时采用倒计时方式,比赛开始时启动计时,直至计时到零为止。2.1方案设计与选择LED数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据LED数码管的驱动方式的不同,可以分为静态式和动态式两类。方案一:静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。静态
10、驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要58=40根I/O端口来驱动,实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。方案二:LED数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划a,b,c,d,e,f,g,dp的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的C
11、OM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为12ms,由于人的视觉暂留现象及发光二的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。方案确立:由于数码管动态显示占用I/O口数量少,外部硬件电路简单,故本次试验采用数码管动态显示驱动。3.系统硬件设计3.1篮球计分器硬件设计的基本要求系统硬件主要是由单片机AT89C51、计时显示电路、计分显示电路、报警电路和4*4的矩阵键盘五个部分组成。3.1.1硬件设计基本
12、要求单 片 机: AT89C51,显示器件: 七段共阴LED显示器,按 键: 矩阵式按键。3.1.2引脚应用说明AT89C51管脚说明:VCC(40):供电电压,接5V的电压。 GND(20):接地。P0口(3932):P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口(18):P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门
13、电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口(2127):P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功
14、能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口(1017):P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为AT89C51的一些特殊功能口,如下表所示: P3口管脚备选功能:P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入) /
15、PSEN(29):外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 /EA/VPP(31):当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1(19):反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2(18):来自反向振荡器的输出。P3.6 /WR(外部数据存储器写选通)
16、 P3.7 /RD(外部数据存储器读选通) P3口同时为闪烁编程和编程校验接收一些控制信号。 RST(9):复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG(30):当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是A
17、LE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。3.1.3引脚排列图 图 3-1 AT89C52单片机引脚图3.2显示电路3.2.1显示电路设计本设计采用共阴极数码显示器,通常,共阴极接低电平(一般接地),其它管脚接段驱动电路输出端。当某段驱动电路的输出端为高电平时,该端所连接的字符导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。同样,要求段驱动电路能提供额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。本次设计在显示模块用到的是一个4位一体和2个两位一体共阴极数码管,共有8个代码输入口和8个位选输入口,采用排阻提供上拉电流
18、数码管,以保证有足够大的电流点亮数码管,采用动态驱动,使各位数码管逐个轮流受控显示,这就是动态驱动,由于扫描速度极快,显示效果与静态驱动相同,其具体图形如下图3-1,3-2所示。图3-2计时显示图3-3比分显示3.2.2按键设计由于在比赛中,甲、乙两队的比分是不断变化的,所以需设置比分刷新控制装置;此功能由4*4的矩阵键盘完成。 当有键按下时,执行相应的功能。 图3-4按键显示3.4晶振电路模块 时钟电路在单片机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟是保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢
19、。为达到振荡周期是12MHZ的要求,这里要采用12MHZ的晶振,另外有两个33P的电容,两晶振引脚分别连到XTAL1和XTAL2振荡脉冲输入引脚。具体连接图如图2-2所示 图 3-5晶振电路3.5复位电路模块复位是单片微机的初始化操作,其主要功能是把PC初始化为0000H,使单片微机从0000H单元开始执行程序。除进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,可以按复位键以重新启动,也可以通过监视定时器来强迫复位。RST引脚是复位信号的输入端。复位电路在这里采用的是上电+按钮复位电路形式,具体连接电路如图2-3:图 3-6复位电路3.6报警模块蜂鸣器通
20、过一NPN三极管进行驱动,如图触发信号有基极引入。如图2-6.图 3-7报警电路4. 系统程序设计4.1 设计思想在设计程序之前,我们首先要对单片机应用系统预完成的任务进行深入的分析,明确系统的设计任务、功能要求和技术指标。其次,要对系统的硬件资源和工作环境进行分析。这是单片机应用系统程序设计的基础和条件。4.2 主程序设计本次单片机课程设计软件设计部分采用模块化程序设计,程序部分由主程序、扫描显示子程序、计时加(减)1秒的子程序、暂停子程序、延时子程序等组成.其程序流程图如图3-1图3-2。图4-1 主程序流程图图4-2扫描刷新显示子程序流程图void timer0(void) interr
21、upt 1 / T0 中断服务TH0=0x4C; / 50MS延时初值TL0=0x00;t+;if(t=20)t=0;miao-;if(miao=-1)fen-;miao=59; / 当59s减完,分减1if(fen=-1)fen=0; / 分清零miao=0;beep=0; / 时间到,蜂鸣器响5.仿真验证图5-1 仿真模拟图a按比赛开始按钮,开始状态显示“10”,即比赛开始。 图5-1 仿真模拟图b时间倒计时,同时显示甲乙比分。6.结论在没有做课程设计以前,觉得课程设计只是对知识的单纯总结,但是通过这次课程设计发现自己的看法有点太片面,课程设计不仅是对前面所学知识的一种检验,也是对自己能力
22、的一种提高,通过这次课程设计使自己明白了原来的那点知识是非常欠缺的,要学习的东西还很多,通过这次课程设计,明白学习是一个长期积累的过程,在以后的工作和生活中都应该不断的学习,努力提高自己的知识和综合素质,并将理论与实际相结合,学以致用,不再是纸上谈兵,。对我们学生来说,理论与实际同样重要,这是我们以后在工作中说明自己能力的一个重要标准。在这次课程设计中,同学之间互相帮助,有什么不懂的大家在一起商量,发现我们所学的知识实在是有限,不过我们能够充分利用网络的优势去查阅资料。而且,课程设计中涉及到的电路图用了比较新的一款PROTEUS进行设计和仿真,使我多掌握了一个得力的仿真工具。我在整个设计过程中
23、懂得了许多东西,当遇到一不了的问题,跟同伴一起商量、合作,或许能收到事半功倍的效果。不管学什么,一定要打好基础,并将其学好、学精,但空有知识也不一定就能说明什么,还得能为己所用;还有更重要的是培养了独立思考和设计的能力,树立了对知识应用的信心,相信会对今后的学习工作和生活有非常大的帮助,并且提高了自己的动手实践操作能力, 使自己充分体会到了在设计过程中的成功喜悦。虽然这个设计做的不是很完美,但是在设计过程中所学到的东西是这次课程设计的最大收获和财富,使我终身受益;最后,也是我感触比较深的一点,这次课程设计时为数不多的独立完成的一次,虽然过程中遇到很多困难,让自己犯愁过,彷徨过,急躁过,可当自己
24、很快调整好心态,从跌倒的地方爬起来继续,最后取得成功,不止是成功后的喜悦,也是一次锻炼!通过这次课程设计,明白学习是一个长期积累的过程,在以后的工作和生活中都应该不断的学习,努力提高自己的知识和综合素质,并将理论与实际相结合,理论与实际同样重要。在设计的过程中不可避免的遇到了许多困难。尤其是在最后的调试中,会因为某种原因而得不到满意的结果,但最后还是解决了。最后在调试结果终于出来以后我更是无比兴奋,无比自豪。在这里我要感谢帮助过我的老师和同学尤其是我的课程设计指导老师张毅宁老师,没有你们也就没有这份课程设计和论文。对我而言,知识上的收获重要,精神上的丰收更加可喜。我们每一个人永远不能满足于现有
25、的成就,人生就像在爬山,一座山峰的后面还有更高的山峰在等着你。挫折是一份财富,经历是一份拥有。这次课程设计必将成为我人生旅途上一个非常美好的回忆。参考文献【1】余发山,单片机原理及应用技术:中国矿业大学出社,2003【2】 河南理工大学电气学院:单片机实验报告指导册,2008【3】刘法治,常用电子器件及典型芯片应用技术:机械工业出版社,2007【4】何立民,MSC-51系列单片机应用系统设计:北京航空航天大学出版社,1993附录一整体仿真图附录二#include#define uchar unsigned char#define uint unsigned intuchar code tab=
26、0xc0,0xf9,0xa4,0xb0,0x99,0x92, 0x82,0xf8,0x80,0x90,0xff;uchar b,d,t;uchar fen=10,miao=0;uchar flag;uchar temp;sbit beep=P17;void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void dispaly()uchar miaoge,fenge,miaoshi,fenshi;miaoge=miao%10;P2=0x80;P0=tabmiaoge;delay(1);miaoshi=miao/10;P2=0x40;P
27、0=tabmiaoshi;delay(1);fenge=fen%10;P2=0x20;P0=tabfenge;delay(1);fenshi=fen/10;P2=0x10;P0=tabfenshi;delay(1);P2=0x00;void dispaly1(char a) /甲队比分显示uchar ge1,shi1;b=a;ge1=b%10;P2=0x02;P0=tabge1;delay(1);shi1=b/10;P2=0x01;P0=tabshi1;delay(1);P2=0x00;void dispaly2(char c) /乙队比分显示uchar ge2,shi2;d=c;ge2=d%
28、10;P2=0x08;P0=tabge2;delay(1);shi2=d/10;P2=0x04;P0=tabshi2;delay(1);P2=0x00; void keyscan() /矩阵键盘扫描控制char a,c,e,f;dispaly1(a);dispaly2(c);P3=0xfe;temp=P3;temp=temp&0xf0;while(temp!=0xf0)delay(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0) temp=P3; if(temp=0xee) delay(5); if(temp=0xee) a+; /甲队比分加1 if(a=
29、100) a=99; dispaly1(a); if(temp=0xde) delay(5); if(temp=0xde) a=a+2;/甲队比分加2 if(a=100) a=99; dispaly1(a); if(temp=0xbe) delay(5); if(temp=0xbe) a=a+3; /甲队比分加3 if(a=100) a=99; dispaly1(a); if(temp=0x7e) delay(5); if(temp=0x7e) a-; /甲队比分减1 if(a=100) a=99; dispaly2(c); if(temp=0xdd) delay(5); if(temp=0x
30、dd) c=c+2; / 乙队比分加2 if(c=100) c=99; dispaly2(c); if(temp=0xbd) delay(5); if(temp=0xbd) c=c+3; / 乙队比分加3 if(c=100) c=99; dispaly2(c); if(temp=0x7d) delay(5); if(temp=0x7d) / 乙队比分减1 c-; if(c=-1) c=0; dispaly2(c); while(temp!=0xf0)temp=P3;temp=temp&0xf0;dispaly2(c);P3=0xfb;temp=P3;temp=temp&0xf0;while(t
31、emp!=0xf0)delay(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0)temp=P3;if(temp=0xeb)delay(5);if(temp=0xeb)a=0;dispaly1(a);/ 双方比分清零c=0;dispaly2(c);if(temp=0xdb) delay(5); if(temp=0xdb) e=a; f=c; a=f; / 双方比分切换 dispaly1(a); c=e; dispaly2(c); if(flag!=1) / 避免误操作,只有在时间停止的情况下才能加减定时时间if(temp=0xbb)delay(5);if(t
32、emp=0xbb) / 定时时间加5fen=fen+5;if(fen=99)fen=0;if(temp=0x7b)delay(5);if(temp=0x7b) / 定时时间减1fen-;if(fen=-1)fen=99;while(temp!=0xf0)temp=P3;temp=temp&0xf0;dispaly2(c);P3=0xf7;temp=P3;temp=temp&0xf0;while(temp!=0xf0)delay(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0)temp=P3;if(temp=0xe7)delay(5);if(temp=0xe
33、7)TR0=1;/ 比赛开始计时按键flag=1;if(temp=0xd7)delay(5);if(temp=0xd7)/ 比赛停止计时按键TR0=0;flag=0;if(temp=0xb7)delay(5);if(temp=0xb7) / 比赛时间清零fen=0;miao=0;while(temp!=0xf0)temp=P3;temp=temp&0xf0;dispaly2(c);void timer0(void) interrupt 1 / T0 中断服务TH0=0x4C; / 50MS延时初值TL0=0x00;t+;if(t=20)t=0;miao-;if(miao=-1)fen-;miao=59; / 当59s减完,分减1if(fen=-1)fen=0; / 分清零miao=0;beep=0; / 时间到,蜂鸣器响void init() / T0中断初始化TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;ET0=1;EA=1;TR0=0;void main() / 主程序P2=0xfe;init();while(1)dispaly();keyscan();