您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 基于AT89S52的足球篮球双用计时计分器
第1页共4页深圳大学考试答题纸(以论文、报告等形式考核专用)二○一四~二○一五学年度第一学期课程编号1303100001课程名称单片机应用与设计主讲教师王百鸣评分学号2012130035姓名黄志宇专业年级集成电路设计与集成系统大三教师评语:题目:基于AT89S52的篮球足球比赛计时计分器仿真及实物制作答题:第2页共4页一、设计任务概述:采用AT89S52单片机为核心设计的一个用于赛场的篮球足球比赛的计时计分器并制作出实物。本设计分为三个模块:显示模块,计时模块和按键模块。计时模块采用定时器T0中断计时,并通过P3口的外部中断0和外部中断1实现比赛时间的修改。显示模块分为计时和计分两部分,采用一个四位共阴七段数码管和两个共阴七段数码管显示,采用动态扫描方式显示,段选采用P0口实现,位选通过P2口实现。按键模块通过P1口输入数据。总体实现功能如下:(1)能为比赛提供计时功能,并能任意修改所要计量的时间,以此来满足足球篮球比赛的不同赛制。(2)能为比赛提供记录比分功能,随时刷新甲、乙两队在整个比赛过程中的比分,出现错误也能重新修改比分。(3)比赛结束时,能发出报警声,并能随时关闭报警声。(4)比赛期间可随时接受暂停请求,计时停止。二、系统硬件模块设计:(1)设计框图及原理图第3页共4页(2)单片机芯片AT89S52模块AT89S52的主要特性如下:·与AT89C51,C52,STC89RC52兼容·8K字节可编程闪烁存储器·128*8位内部RAM·32可编程I/O线·三个16位定时器/计数器·6个中断源·可编程串行通道·片内振荡器和时钟电路(3)时钟模块采用12MHZ的晶振,另有两个30pF的瓷片电容(4)复位电路5(5)报警电路采用蜂鸣器加100Ω的限流电阻接P1口第4页共4页(6)按键控制模块共有9个设置按键,P1口有7个:add1、add2是加分键(add1按一次加一分,add2按一次加二分),minus1是减分键(按一下减一分),,bstop是关蜂鸣器键,start是开始计时键,stopagain是时间暂停键,turn是切换键(用于加分方的切换),P3口有2个中断:timeadd1是时间计时加1分钟,timeadd10是时间计时加10分钟。(7)时间显示模块采用一个四位共阴七段数码管显示分秒。段选口接P0口,P0口接一个1kΩ的排阻,起上拉电平作用。位选口接P2,采用动态扫描。(8)比分显示模块采用两个两位共阴七段数码管显示甲队乙队分数。段选口接P0口,P0口接一个1kΩ的排阻,起上拉电平作用。位选口接P2,采用动态扫描。第5页共4页三、系统软件模块设计(1)C语言程序流程图NNN开始初始化显示中断函数按否修改计时时间start按否计时函数按键函数时间是否为0显示函数报警函数复位函数第6页共4页(2)源程序代码:#includereg52.h#includeintrins.h#defineuintunsignedint#defineucharunsignedcharucharcodetable1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};uchardisbuffer[8]={0};ucharminute=0,second=0;ucharAscore=0,Bscore=0,temp=0;ucharflage1=0;ucharflage=0;uintcount,z;sbitbizz=P1^7;//定义按键对应的端口sbitadd1=P1^0;sbitadd2=P1^1;sbitminus1=P1^2;sbitbstop=P1^4;sbitstart=P1^5;sbitstopagain=P1^6;sbitturn=P1^3;sbittimeadd1=P3^2;sbittimeadd10=P3^3;voidininterrupt()interrupt1//定时器T0计时函数{TH0=(65536-50000)/256;TL0=(65536-50000)%256;count++;if(count==20){count=0;if(second==0&&minute==0){ET0=0;}elseif(second==0&&minute!=0){second=59;minute--;}elseif(second!=0)第7页共4页second--;}}voiddelay()//显示延时函数{uintx,y;for(x=10;x0;x--)for(y=10;y0;y--);}voiddelay1()//延时消抖函数16ms{uintx,y;for(x=10;x0;x--)for(y=360;y0;y--);}voiddisplay1(){uchari,j;uchartemp;disbuffer[3]=second%10;disbuffer[2]=second/10;disbuffer[1]=minute%10;disbuffer[0]=minute/10;disbuffer[5]=Ascore%10;disbuffer[4]=Ascore/10;disbuffer[7]=Bscore%10;disbuffer[6]=Bscore/10;temp=0xfe;//采用动态扫描P2=temp;for(i=0;i8;i++){j=disbuffer[i];P0=table1[j];delay();temp=_crol_(temp,1);//temp的最低位0左移,依次选通各个数码管P2=temp;}}voiddisplay()//显示函数{uchari,j;uchartemp;disbuffer[3]=second%10;disbuffer[2]=second/10;disbuffer[1]=minute%10;disbuffer[0]=minute/10;第8页共4页disbuffer[5]=Ascore%10;disbuffer[4]=Ascore/10;disbuffer[7]=Bscore%10;disbuffer[6]=Bscore/10;temp=0xfe;P2=temp;for(i=0;i8;i++){j=disbuffer[i];P0=table[j];delay();temp=_crol_(temp,1);P2=temp;}}voidbizzer()//报警函数{while(minute==0&&second==0){bizz=0;delay1();display1();if(!bstop==1){delay1();if(!bstop==1){while(!bstop==1);while(1){bizz=1;display();}}}}}voidexinterrupt()interrupt0//外部中断0,增加1分钟计时{delay1();if(!timeadd1){while(!timeadd1);minute++;}第9页共4页}voidexinterrupt1()interrupt2//外部中断1,增加10分钟计时{delay1();if(!timeadd10){while(!timeadd10);minute+=10;}}voidbutton()//按键控制函数{if(!turn){delay1();if(!turn){while(!turn);flage+=1;}}if(flage%2==0){if(!add1)//分数加1分{delay1();if(!add1){while(!add1);Ascore+=1;}}if(!add2)//分数加2分{delay1();if(!add2){while(!add2);Ascore+=2;}}if(!minus1)//减分{delay1();if(!minus1){第10页共4页while(!minus1);Ascore-=1;}}}else{if(!add1){delay1();if(!add1){while(!add1);Bscore+=1;}}if(!add2){delay1();if(!add2){while(!add2);Bscore+=2;}}if(!minus1){delay1();if(!minus1){while(!minus1);Bscore-=1;}}}if(!stopagain)//时间暂停{delay1();if(!stopagain){while(!stopagain);flage1+=1;}}if(flage1%2==1){第11页共4页TR0=0;}elseTR0=1;if(!bstop==1){delay1();if(!bstop==1){while(!bstop==1);bizz=1;}}}voidmain(){while(1){display1();TH0=(65536-50000)/256;TL0=(65536-50000)%256;TMOD=0x01;//定时器T0,工作方式1,16位计时器EA=1;//开放所有中断ET0=1;//允许定时/计数器T0中断EX0=1;//允许外部中断0请求EX1=1;//允许外部中断1请求IT0=1;//外部中断0下降沿触发IT1=1;//外部中断1下降沿触发if(!start){delay1();if(!start){while(!start);TR0=1;while(minute!=0||second!=0){display1();button();bizzer();}}}}}第12页共4页四、设计的仿真(1)初始化显示(2)比赛中显示第13页共4页五、设计layout六、实物制作(1)打印底层布线(2)用图纸敷在感光板(10*15cm)下,放到实验室的曝光机下曝光320秒。第14页共4页(3)将曝光好的感光板放至显影剂中显影,摇晃3分钟左右,电路连线出现。(4)将显影后的感光板放至腐蚀液(三氯化铁溶液),刻蚀两小时左右后形成所要的电路板。(5)打孔,焊元器件第15页共4页(6)完成实物七、实物测试(1)初始化显示(2)比赛中显示第16页共4页八、课程设计体会:这次单片机的期末设计我选择了第四个题目“单片机应用系统的仿真与实现”。做篮球足球比赛计时计分器是源于自己对这两种球类的热爱,所以有动力去完成这样一个设计。在设计过程中懂得了从硬件模块和软件模块两个方面开始着手,并运用keil编写C语言生成编译文件和运用proteus7进行仿真。在制作实物的工程中,阻碍非常大,由于经验不足,花了6个板子才成功。从中吸取了很多教训,如单片机layout时不能镜像,布线要粗,孔要大,跳线注意分布等等。最大的感悟在于仿真与制作实物之间存在着很大的问题。例如仿真时上拉电阻,系统会帮你调好。而做实物时,上拉电阻需要你自己计算。1k,5k还是10k。又比如蜂鸣器接1kΩ在仿真会响,到实物上只有很细微的声音。所以需要自己调小为100Ω。让我明白了理论必须与实践结合才是最好的。所以只有把理论牢牢学好,才能有能力进行实践。在实践中发现的问题并思考去解决它,这样收获才会更大。
本文标题:基于AT89S52的足球篮球双用计时计分器
链接地址:https://www.777doc.com/doc-3609297 .html