为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

篮球计时计分

2010-10-02 27页 doc 623KB 329阅读

用户头像

is_113843

暂无简介

举报
篮球计时计分摘要 篮球计时计分器设计 班 级 07电子信息工程 姓 名 王莺 学 号 070802041 指导老师 刘 小 燕 完成日期 ___ 2010-06___________ 目录 TOC \o "1-2" \h \z \u 内容摘要: 1 关键词: 2 Abstact: 2 Key words: 2 1 引言 2 1.1 单片机简介 2 1.2 课程设计的意义 3 1.3 任务与要求 4 2系统总体方案及硬件设计 4 2.1 系统总体方案设计 4 2.2 硬件系统设计 5 3 软件设计 9 3.1 软件总体设计方案 9 3.2 ...
篮球计时计分
摘要 篮球计时计分器 班 级 07电子信息工程 姓 名 王莺 学 号 070802041 指导老师 刘 小 燕 完成日期 ___ 2010-06___________ 目录 TOC \o "1-2" \h \z \u 内容摘要: 1 关键词: 2 Abstact: 2 Key words: 2 1 引言 2 1.1 单片机简介 2 1.2 课程设计的意义 3 1.3 任务与要求 4 2系统总体及硬件设计 4 2.1 系统总体方案设计 4 2.2 硬件系统设计 5 3 软件设计 9 3.1 软件总体设计方案 9 3.2 程序模块设计 9 4 PROTEUS软件仿真 14 5 课程设计体会 17 参考文献: 18 附1:源程序代码 19 附2:系统原理图 26 内容摘要:本设计是采用AT89C51单片机为核心设计的用于篮球比赛的篮球计时计分器。本设计采用定时器T0中断计时,显示部分分为计时和计分显示两部分,均采用共阴极LED显示。计时部分计时范围宽,而且可定时设定分钟调整;计分部分调节灵活,显示范围宽。两个显示模块均采用动态扫描方式显示。 本次设计的篮球计时计分器具有以下的功能: (1)能整个赛程的比赛时间,并能修改比赛时间。 (2)能随时刷新甲、乙两队在整个比赛过程中的比分。 (3)中场交换比赛场地时,能交换甲、乙两队比分的位置。 (4)比赛结束时,能声报警和光报警。 关键词:AT89C51、倒计时、按键调整、报警 Abstact:This design USES AT89C51 is used in the design of a game of basketball JiFenQi timing. This design USES the timer interruption, part timer T0 timing and scoring is divided into two parts, the display of the cathode adopted LED display. Timing part timer and wide range, adjust timing Settings minute, Adjust flexibly, scoring part wide range. Two display module are dynamic scanning display. The design of the basketball JiFenQi has the following functions of time: (1) to record the time schedule of the game, and can modify game time. (2) can refresh, two teams in the whole process of the game. (3) midfielder exchange, exchange venues, the two teams. (4) at the end of the race, can sound and light alarm alarm. Key words:AT89C51, countdown, buttons, alarm 1 引言 1.1 单片机简介 单片机,亦称单片微电脑或单片微型计算机。它是把中央处理器(CPU)、随机存取存储器(RAM)、只读存储器(ROM)、输入/输出端口(I/0)等主要计算机功能部件都集成在一块集成电路芯片上的微型计算机。 由于单片机的集成度高,功能强,通用性好,特别是它具有体积小,重量轻,能耗低,价格便宜,可靠性高,抗干扰能力强和使用方便等独特的优点,使单片机迅速得到了推广应用,目前已经成为测量控制应用系统中的优选机种和新电子产品的关键部位。世界各大电气厂家,测控技术企业,机电行业,竞相把单片机应用于产品更新,作为实现数字化,智能化的核心部件。篮球计时计分器就是以单片机为核心的计时计分系统,由计时器,计分器,综合控制器等组成。 计算机的产生加快了人类改造世界的步伐,但是它毕竟体积大。微计算机(单片机)在这种情况下诞生了,它为我们改变了什么?纵观我们现在生活的各个领域,从导弹的导航装置,到飞机上各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各种智能IC卡、电子 宠物等,这些都离不开单片机。以前没有单片机时,这些东西也能做,但是只能使用复杂的模拟电路,然而这样做出来的产品不仅体积大,而且成本高,并且由于长期使用,元器件不断老化,控制的精度自然也会达不到。在单片机产生后,我们就将控制这些东西变为智能化了,我们只需要在单片机外围接一点简单的接口电路,核心部分只是由人为的写入程序来完成。这样产品的体积变小了,成本也降低了,长期使用也不会担心精度达不到了。所以,它的魔力不仅是在现在,在将来将会有更多的人来接受它、使用它。 据统计,我国的单片机年容量已达1—3 亿片,且每年以大约16%的速度增长,特别是沿海地区的玩具厂等生产产品多数用到单片机,并不断地辐射向内地。但相对于世界市场我国的占有率还不到1%。我国开始使用单片机是在1982 年,短短五年时间里发展极为迅速。1986 年在上海召开了全国首届单片机开发与应用交流会,有的地区还成立了单片微型计算机应用协会,那是全国形成的第一次高潮。截止今日,单片机应用技术飞速发展,我们上因特网输入一个“单片机”的搜索,将会看到上万个介绍单片机的网站。所以,学习单片机在我国是有着广阔前景的。 1.2 课程设计的意义 通过课程设计可以使我们进一步熟悉和掌握单片机的内部结构和工作原理,了解单片机应用系统设计的基本方法和步骤;通过利用MCS-51单片机,理解单片机在自动化仪表中的作用以及掌握单片机的编程方法;通过设计一个简单的实际应用输入及显示模拟系统,掌握单片机仿真软件Proteus的使用方法; 掌握键盘和显示器在的单片机控制系统中的应用和掌握撰写课程设计报告的方法。 我选择了设计一个用于赛场的篮球计时计分器,可以代替球场上的人工计时计分,实现带电子显示、有比赛结束报警等功能的精确计时计分器。在该篮球计时计分器设计中不仅用到了单片机定时器中断系统,还用到了单片机4个I/O口。其中的按键输入和数码管显示模块都是单片机设计的最常用、最普通的模块。既巩固了以前学的单片机课程又体验了单片机编程应用的过程。 1.3 任务与要求 (1)能记录整个赛程的比赛时间,并能修改比赛时间。 (2)能随时刷新甲、乙两队在整个比赛过程中的比分。 (3)中场交换比赛场地时,能交换甲、乙两队比分的位置。 (4)比赛结束时,能声报警和光报警。 2系统总体方案及硬件设计 2.1 系统总体方案设计 篮球计时计分器主要包括单片机控制系统、计时计分显示模块、定时报警模块、按键控制键盘模块。通过这几个模块的协调工作就可以完成相应的计时计分控制和显示功能。系统总体框图如图1所示: 图1:系统总体框图 采用AT89C51单片机最小化应用设计,系统时钟采用6MHz的晶振,定时器T0中断计时,显示部分分为计时和计分显示两部分。两个显示模块采用动态扫描显示,均采用共阴极LED显示。在本设计中P3口(P3.0—P3.5)是计时计分显示共用的位选扫描口,P0口是计时数据输出口,P2口计分数据输出口。按键设置输入与报警输出采用P1口传输数据。 2.2 硬件系统设计 系统总体硬件电路图如图2所示,主要有按键模块、显示模块、定时报警模块、单片机控制系统等三部分组成。 图2:硬件总体电路图 2.2.1 单片机选择 AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。外形及引脚排列如图3所示,   图3:AT89C51单片机引脚功能 2.2.2 时钟电路模块 时钟电路在单片机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟是保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢。为达到振荡周期是12MHZ的要求,这里要采用12MHZ的晶振,另外有两个33P的独石电容,两晶振引脚分别连到XTAL1和XTAL2振荡脉冲输入引脚。具体连接电路如图4所示: 图4: 时钟电路 2.2.3 复位电路模块 单片机系统的复位电路在这里采用的是上电+按钮复位电路形式,其中电阻R采用2kΩ的阻值,电容采用电容值为10μF的电解电容。具体连接电路如图5所示: 图5:复位电路 2.2.4按键控制键盘模块 本设计共有K1-K6共六个设置按键,K1是调时位选择键, K2是时间调整加1键,K3是时间调整减1键,K4是分数位置交换键(交换甲、乙两队比分的位置),K5是甲加分键(按一次加一分),K6是乙加分键(按一次加一分)。按键与P3口(除P3.4)相接,低电平输入有效。另外还有一个复位按键K7。 图6:按键控制电路 2.2.5 显示模块和定时报警模块 共阴极数码管中8个发光二极管的阴极连接在一起,即为共阴极接法,简称共阴数码管。通常,共阴极接低电平(一般接地),其它管脚接段驱动电路输出端。当某段驱动电路的输出端为高电平时,该端所连接的字符导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。同样,要求段驱动电路能提供额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。 本次设计在显示模块用到的是一个8位一体的共阴极数码管,有8个代码输入口和8个位选输入口,采用排阻提供上拉电流数码管,以保证有足够大的电流点亮数码管,采用动态驱动,使各位数码管逐个轮流受控显示,这就是动态驱动,由于扫描速度极快,显示效果与静态驱动相同。位选与P1口相接,字段码输出与P0口相接,其具体图形如下图7所示: 图7:显示模块电路 报警由P3.7输出。LED灯与一个2 kΩ的电阻相接,低电平有效,如图8所示。 图8:报警模块电路 3 软件设计 3.1 软件总体设计方案 本次单片机课程设计软件设计部分采用模块化程序设计,程序部分由程序初始化预定义、主程序、T0中断服务程序、显示子程序、按键调整子程序、报警服务子程序、延时子程序。 3.2 程序模块设计 为了增加程序的可读性,在程序开头进行了如下开头文件说明及预定义 #include #include #define uchar unsigned char #define uint unsigned int uchar code wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//八位位选码表 uchar code duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//段选码表 sbit k1=P3^0; //调时位选择键 sbit k2=P3^1; //时间调整加1键 sbit k3=P3^2; //时间调整减1键 sbit k4=P3^3; //分数位置交换键(交换甲、乙两队比分的位置) sbit k5=P3^5; //甲加分键(按一次加一分) sbit k6=P3^6; //乙加分键(按一次加一分) sbit beep=P3^7; //设置蜂鸣器 void delay(uint i);//延时说明 void timedisplay();//时间显示说明 void scoredisplay();//分数显示说明 void timekeyscan();//时间调整说明 void scorekeyscan();//分数调整说明 uchar fen,miao,count,ascore,bscore;//分,秒,50ms计数器,甲分,乙分 3.2.1 主程序 主程序图如图9所示,主程序先对显示数据和定时器/计数器初始化,然后重复调用数码管显示模块和按键调整模块,判断分和秒是否都为0,是则报警。 图9:主程序流程图 3.2.2 T0中断服务程序 中断服务子程序流程图如图10所示,定时器/计数器T0用于时间计时。工作方式1,重复定时,定时时间设为50ms,定时时间到则中断,在中断服务程序中用一个计数器对50ms计数,计20次则对秒减1,秒减至0则对分加1,同时秒为60;分减至0则分为60。 图10:中断服务子程序流程图 3.2.3扫描显示模块 本系统共用8个数码管,从左到右依次显示分十位、分个位、秒十位、秒个位、甲队分数十位、甲队分数个位、乙队分数十位、乙队分数个位。在本系统中数码管显示用软件译码动态显示,通过查表在字段码中查出所显示的信息的字段名,从P0口输出,同时在P1口将对应的位选码输出。 3.2.4按键调整模块 按键调整子程序分为时间调整和比分调整,按键调整流程图如11所示。 时间调整按键设置为:如果没按键,则时钟正常走时。当按下K1(P3.0)时,进入调秒状态,时钟停止走动;按K2 (P3.1)和K3(P3.2)可进行加1或减1操作;继续按K1键可进行调分状态;最后按K1键将退出调整状态,时钟开始计时运行。 分数调整按键设置为:按下K5(P3.5),则甲队分数加1;按下K6(P3.6),则乙队分数加1;按下K4(P3.3),则甲乙两队分数交换显示。 图11:按键调整模块流程图 3.2.5报警及延时子程序 当P3.7由高电平变为低电平时,报警。 报警程序如下: beep=1;//P3.7高电平 if (miao==0&&fen==0)//分和秒都为0 { beep=0;//P3.7变为低电平,报警 TR0=0;//停止走动 } 延时程序如下: void delay(uint i)//延时1s { uint j; for (;i>0;i--) for (j=0;j>125;j++); } 4 PROTEUS软件仿真 用PROTEUS软件进行仿真,各项指标均达到了要求,完美地实现了篮球计时计分器功能。 1、PROTEUS软件仿真原理图如图12所示: 图12:仿真原理图 2、启动篮球计时计分器,开始工作,PROTEUS软件仿真电路启动界面如图13所示,时间开始倒计时: 图13:时间开始倒计时(初值为30s) 3、计时调整:按下K1定时切换,进行秒调整,假如再按K2则秒加1,假如再按K3则秒减1;再按K1,进行分调整,假如再按K2则分加1,假如再按K3则分减1。仿真结果如下所示: 图14:K1按下,时间停止走动 4、计分调整:按下K4,甲乙队比分交换显示位置;按下K5,甲队分数加1;按下K6,乙队分数减1。仿真结果如下所示: 图15:K5按下,甲队分数加1(此处按了两下) 5、分、秒都为0,报警,仿真结果如下所示: 图16:定时到,LED灯亮,喇叭响 6、复位操作:按K7复位,复位后即可进行新一轮比赛计时计分工作。 以上即为本单片机系统设计-篮球计时计分器功能原理,进行PROTEUS软件仿真,性能稳定,功能齐全,调节灵活,显示范围宽,可满足各种规模篮球及其它相关比赛赛程需要。 5 课程设计体会 本次单片机课程设计我选择了“篮球计时计分器”这一题目,通过这次课程设计,自己再次学习了微机原理,并认真复习单片机,查阅和浏览了很多的相关资料, 并且对Proteus软件的使用有了很大提高。 通过这次课程设计的学习与思考,认真总结,我觉得单片机课程设计主要包括四方面的内容:软件部分设计、硬件部分设计、Proteus软件仿真及写出课程设计报告。这四部分内容看似简单,但实际操作起来却并不轻松。 在单片机应用系统设计时,必须先确定该系统的技术要求,这是系统设计的依据和出发点,整个设计过程都必须围绕这个技术要求来工作。软件部分的设计,我按照模块化的思想,一块一块的叠加,常常是各个模块单独调试时没有错误,但是叠加后却有错误,大都是一些细节问题,比如标号重复定义等等。在这次单片机系统的课程设计中,我学到了很多,尤其是在调试程序的过程中,我遇到了很多问题,自己摸索着改正了一些,还有一些错误我没有发现,通过问同学和查资料发现错误。在她们的指导下,我学会了更多的查错方法和仿真知识。这次课程设计,我查阅了大量的文献的资料,也更清楚的认识到自己所学的不足,我学到了很多新的知识,同时也加深了对以前所学知识的理解,也增强了编程与仿真的操作能力。 总之,这次课程设计让我明白:理论必须和实际结合才有威力,知识必须通过应用才能实现其价值!所学的东西最终是要面向应用的,是为了在以后的工作中能够更好的应用,此时的知识积累是为以后的工作做好坚实的基础。这个设计总体上不算完美,但是在这次课程设计的经历的好处是不可估量的。 参考文献: [1]金素华,张尉.单片机调试方法的讨论.电子世界,2004,25(4):34-65 [2]宋凤娟,廉文利,付云强.单片机89C51在调速系统中的应用.微计算机信息,2007,12(6):113-114 [3] 余发山,单片机原理及应用技术,中国矿业大学出社,2003 [4] 河南理工大学电气学院,单片机实验报告指导册,2007 [5] 何立民,MSC--51系列单片机应用系统设计,北京航空航天大学出版社,1993 [6] 曹巧媛,单片机原理及应用.电子工业出版社,1997 [7] 孙育才主编,MCS-51系列单片微型计算机及其应用,东南大学出版社 [8]谢维成主编,单片机原理与应用及C51程序设计,清华大学出版社 附1:源程序代码 #include #include #define uchar unsigned char #define uint unsigned int uchar code wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//八位位选码表 uchar code duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07 ,0x7f,0x6f};//段选码表 sbit k1=P3^0; //调时位选择键 sbit k2=P3^1; //时间调整加1键 sbit k3=P3^2; //时间调整减1键 sbit k4=P3^3; //分数位置交换键(交换甲、乙两队比分的位置) sbit k5=P3^5; //甲加分键(按一次加一分) sbit k6=P3^6; //乙加分键(按一次加一分) sbit beep=P3^7; //设置蜂鸣器 void delay(uint i);//延时说明 void timedisplay();//时间显示说明 void scoredisplay();//分数显示说明 void timekeyscan();//时间调整说明 void scorekeyscan();//分数调整说明 uchar fen,miao,count,ascore,bscore;//分,秒,50ms计数器,甲分,乙分 //主程序 void main() {fen=0;miao=30;ascore=0;bscore=0;//初始化 EA=1;//开总中断 ET0=1;//开T0中断 TMOD=0x01;//T0工作于方式1 TH0=0x9e;//定时50ms,6MHZ晶振 TL0=0x58; TR0=1;//启动计数 while(1) { timedisplay();//调用时间显示子程序 scoredisplay();//调用分数显示子程序 timekeyscan();//调用时间调整子程序 scorekeyscan();//调用分数调整子程序 beep=1;//P3.7高电平 if (miao==0&&fen==0)//分和秒都为0 {beep=0;//P3.7变为低电平,报警 TR0=0;//停止走动 } } } //延时子程序 void delay(uint i)//延时1s {uint j; for (;i>0;i--) for (j=0;j>125;j++); } //时间显示子程序 void timedisplay() {uchar s,g;//十位,个位变量 s=fen/10;//分十位 g=fen%10;//分个位 P1=wei[0];//选中8位一体数码管的1号数码管 P0=duan[s]; delay(1); P1=wei[1];//选中8位一体数码管的2号数码管 P0=duan[g]; delay(1); s=miao/10;//秒十位 g=miao%10;//秒个位 P1=wei[2];//选中8位一体数码管的3号数码管 P0=duan[s]; delay(1); P1=wei[3];//选中8位一体数码管的4号数码管 P0=duan[g]; delay(1); } //分数显示子程序 void scoredisplay() { uchar s,g; s=ascore/10;//甲分数十位 g=ascore%10;//甲分数个位 P1=wei[4];//选中8位一体数码管的5号数码管 P0=duan[s]; delay(1); P1=wei[5];//选中8位一体数码管的6号数码管 P0=duan[g]; delay(1); s=bscore/10;//乙分数十位 g=bscore%10;//乙分数个位 P1=wei[6];//选中8位一体数码管的7号数码管 P0=duan[s]; delay(1); P1=wei[7];//选中8位一体数码管的8号数码管 P0=duan[g]; delay(1); } //中断服务子程序 void timer() interrupt 1 {TH0=0x9e;//重装初值50ms TL0=0x58; count++;//计数加1 if (count==20)//计数20次,定时1s到 {count=0; if (miao==0) { miao=60; if (fen==0) {fen=60;} fen--; } miao--; } } //时间调整子程序 void timekeyscan() {uchar key,num;//定义两变量 if (k1==0)//调时位选择键按下 { delay(5); if (k1==0) { key++;//变量key加1 if (key==3) key=0; } while(!k1)//调时位选择键松开 timedisplay();//时间显示 } if (k2==0)//时间调整加1键 { delay(5); if (k2==0) { num=1;//时间加1,num=1 } while(!k2) timedisplay(); } if (k3==0)//时间调整减1键 { delay(5); if (k3==0) { num=2;//时间减1,num=2 } while(!k3) timedisplay(); } switch(key) { case 0:TR0=1;break;//key=0,时间走动 case 1:TR0=0; // key=1,时间停止,秒调整 if (num==1)//num=1,秒加1 { num=0; miao++; if (miao>=60) miao=0; timedisplay(); } if (num==2)//num=2,秒减1 { num=0; if (miao==0) miao=60; miao--; timedisplay(); }break; case 2:TR0=0;//key=2分调整 if (num==1)//num=1,分加1 { num=0; fen++; if (fen>=60) fen=0; timedisplay(); } if (num==2)//num=2,分减1 { num=0; if (fen==0) fen=60; fen--; timedisplay(); }break; } } //分数调整子程序 void scorekeyscan() {uchar temp,num; if(k4==0) {delay(5); if(k4==0){temp=ascore;ascore=bscore;bscore=temp;}//k4按下,分数交换 while (!k4) scoredisplay(); } else if(k5==0) {delay(5); if(k5==0){ascore++;} //k5按下,甲分数加1 while(!k5) scoredisplay(); } else if(k6==0) {delay(5); if(k6==0){bscore++;}//k6按下,乙分数加1 while(!k6) scoredisplay(); } } 附2:系统原理图
/
本文档为【篮球计时计分】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索