篮球记分器的设计.docx
《篮球记分器的设计.docx》由会员分享,可在线阅读,更多相关《篮球记分器的设计.docx(17页珍藏版)》请在冰豆网上搜索。
![篮球记分器的设计.docx](https://file1.bdocx.com/fileroot1/2023-4/18/36b1dbd0-282f-42a9-b461-eaf693bb1d97/36b1dbd0-282f-42a9-b461-eaf693bb1d971.gif)
篮球记分器的设计
中北大学
课程设计任务书
2014/2015学年第一学期
学院:
信息商务学院
专业:
电子信息工程
学生姓名:
窦杰学号:
11050643X26
课程设计题目:
篮球计分器设计
起迄日期:
1月12日~1月24日
课程设计地点:
中北大学
指导教师:
赵英亮王伟
系主任:
王浩全
下达任务书日期:
2015年1月12日
课程设计任务书
1.设计目的:
在学习专业基础课和专业课的基础上,主要在电子仪器、微机综合设计与实践、单片机与A/D和D/A和光、计、电综合应用等几个方面开展实践活动,巩固所学知识、培养动手能力。
2.设计内容和要求(包括原始数据、技术参数、条件、设计要求等):
1.设计一款能够显示篮球比分的记分牌。
2.通过加分按钮可以给A队,或B队加分。
3.设计对调功能,更换场地后,AB队分数互换。
4.增加局数比分功能。
5.增加比赛时间倒计时功能。
6.其他功能。
3.设计工作任务及工作量的要求〔包括课程设计计算说明书(论文)、图纸、实物样品等〕:
1)设计说明书符合要求;
2)相应器件的工作原理及应用;
3)系统工作原理图;
4)参考文献原文不少于3篇。
课程设计任务书
4.主要参考文献:
[1]李群芳张士军.单片微型计算机与接口技术.电子工业出版社.2008,5
[2]林仲茂.8051单片机彻底研究基础篇.人民邮电出版社.2004,5
[3]徐安.单片机原理与应用.北京希望电子出版社.2002,11
[4]张毅刚.MSC-51单片机应用设计.哈尔滨工业大学出版社.1997,12
[5]余修武.单片机原理及应用.电子科技大学出版社.2007.9
5.设计成果形式及要求:
设计说明书及相关电路图
6.工作计划及进度:
1月12日~1月15日了解设计题目及熟悉资料
1月16日~1月9日确定各题目要求计算相关参数,确定具体设计方案
1月10日~1月16日结合要求具体设计与仿真
1月17日~1月24日整理课程设计说明书,答辩或成绩考核。
系主任审查意见:
签字:
年月日
一、设计任务
⏹设计一款能够显示篮球比分的记分牌;
⏹通过加分按钮可以给A队,或B队加分;
⏹设计对调功能,更换场地后,AB队分数互换;
⏹增加局数比分功能
⏹增加比赛时间倒计时功能;
⏹其他功能(创新部分)
⏹画出完整的电路原理图(包含电源部分)和PCB板图。
图1效果图
二、方案与论证
(一)计时方案:
方案一:
采用芯片计时
通过触发控制电路是计时器自动地计时,达到预定时间后芯片重新开始计时。
计算机可以通过中断或查询的方式读取计时数据,实现计时的控制,并显示计时。
计时功能的实现就无需占用CPU的时间,程序简单,控制精度高。
但价格很高。
方案二:
软件计时
利用MCS—51内部的定时器/计数器进行中断定时,配合软件延时实现计时。
该方案节省了硬件成本,并且可以综合运用定时器/计数器、中断以及程序设计的知识。
由于篮球计分器对于时间的控制和精度要求不是很高,所以从成本来考虑选择软件计时的方案。
(二)单片机的选择:
采用89C51芯片作为硬件核心,其内部采用FlashROM,具有4KBROM存储空间,能与3V的超低压工作,但运用于电路设计中时由于不具备ISP在线编程技术,烧入程序时需要专门的C编程。
三、系统硬件设计
(一)系统总框图
图2系统总框图
(二)原理图设计
1、模块设计
1.1电源部分
图3电源电路
如图3所示,从外部引入5.0V直流电,为单片机、复位电路提供电源。
1.2复位电路
如图4所示,复位电路主要由一个,型号为10uF的电解电容,型号为200和10K的电阻以及按键K0构成,K0接芯片的相应引脚为RST,当开关按下时引脚RST为高电平1,断开时引脚为低电平0。
图4复位电路
1.3独立按键
图5按键电路
如图所示,该电路图,由2个按键S0、S1构成,键盘简洁,通过不同的按键次数来实现不同的功能。
1.4位选部分
图6位选电路
上图为位选电路,三极管的集电极接数码管的公共端,当P0口对应的引脚输出高带你跑时三极管导通,对应的数码管显示数据。
这样,再去在统一时刻,8位LED中只有选通的哪一位显示出字符,而其他7位则是熄灭的。
同样,在下一时刻,只让下一位的位选线处于处于选通状态,而其他几位的位选线处于关闭状态,在段码线上输出将要显示字符的段码则同一时刻,只有选通位显示出相应的字符,而其他各位是熄灭的。
如此循环下去,就可以是各位显示出将要显示的字符。
虽然这些字符是在不同的时刻出现的饿,而在同一时刻,只有一位显示,其他各位熄灭,但由于LED的余辉和人眼视觉的暂留作用,只要美味显示间隔足够短,则可以造成多位同时亮的假象,达到同时显示的效果。
1.5LED显示电路
图7LED显示电路
如图为了LED显示电路,leda~h分别接P1字形码,和X1~8分别接P0位选码。
1.6CPU控制部分
图8CPU控制电路
上图为AT89C51单片机控制部分和时钟电路。
该电路P1口用来输出字型码,P0用来选通数码管;采用的是共阳极数码管,由于单片机的带负载能力很弱,所以使用了八个NPN三极管用来做反相器。
连接P0、P1口的电阻用来限流。
由于发光数码管的额定电流为10mA级别的,故紧接P1口的电阻设置为200欧姆;二极管基极的电流约为集电极电流的0.01倍,为1mA级别的,所以紧接P0口的电阻设置为3.3千欧姆。
四、系统软件设计
图9软件流程图
该软件的设计的思想是扫描显示在死循环执行,而按键和计时使用中断实现,这样思路就比较清晰,不必为程序的执行顺序而烦恼。
由于外部中断只有两个,如果只用中断的话,最多只能用两个按键,所以这里要达到在不同的按键组合下,按下相同的按键却实现不同的效果;因此,必需有一个变量来记录其中一个按键的次数;我在程序中使用的是变量j。
此变量很重要,不同的j导致不同的响应;相应的,程序是一种选择结构,有很多分支。
而倒计时程序使用的是时间中断1,计时是否开始由标志位start控制;在相应的j下,start被触发后,开启倒计时程序。
同时倒计时结束时,时间中断0开启,这样在P3.0口输出一个1KHZ的方波以产生响铃。
五、调试说明
以下是在proteus下的仿真结果,经过仿真,能很好的运行出令人满意的结果,经过实物上的测试,也能产生出跟仿真相同的结果。
图10倒计时仿真图
图11比分仿真图
图12比分交换仿真图
当按键s0没按下时,显示的是AB两队的比分;按下s0一次后,B队分数闪烁,提示已选中B队分数,按下按键s1可对B队分数加一;按下s0两次后,A队分数闪烁,提示已选中A队分数,按下按键s1可对A队分数加一;按下s0三次后,AB队分数闪烁,提示已选中AB队分数,按下按键s1可对AB队分数对调;按下s0四次后,显示12—00,提示已选中倒计时功能,按下按键s1可对开启或暂停倒计时。
六、总结与展望
学习了一个学期的单片机,我花了九牛二虎之力才把系统完成,这充分说明仅仅学习一个学期就想要做出多么完美的系统是难以想象的,何况我们还是非电子专业的,要想真正地把单片机给学好、摸透,我想,必须得从电子电路基础开始学起,这也正是我下一步打算去实现的。
我想,只要是我们认真地去学一样东西,那么什么东西都是有趣的,看着一连串的指令能够实现某一实用的功能,我确实很高兴,这其中的乐趣也并不亚于画画,音乐等等。
在这次实训中,我认为我学到了很多东西,比如,关于电子线路实现的几个软件,KEIL、Protel和Proteus仿真软件。
以前我对它们很陌生,自从完成了这次课题设计之后,我基本能完整熟练的操作它。
通过这么多次的锻炼,我觉得我对单片机的认识更深刻了,对它的掌控更好了,我想这将对我今后设计单片机控制系统有着深远的影响。
总之,什么叫单片机我心中已有数了,以后一定会去钻研它的。
七、参考文献
[1]李群芳张士军.单片微型计算机与接口技术.电子工业出版社.2008,5。
[2]林仲茂.8051单片机彻底研究基础篇.人民邮电出版社.2004,5。
[3]徐安.单片机原理与应用.北京希望电子出版社.2002,11。
[4]张毅刚.MSC-51单片机应用设计.哈尔滨工业大学出版社.1997,12。
[5]余修武.单片机原理及应用.电子科技大学出版社.2007.9。
附录一:
系统总电路
图13总电路图
附录二:
源代码
#include
#defineucharunsignedchar
ucharcodetab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF,0xBF}/*1~9、空格和—的字型码*/
display[8]={1,2,4,8,16,32,64,128};//动态显示数码管
ucharscore[2]={0,0},time[2]={12,0},byte[8]={0},j=0,h=0;//score数组记录A、B两队份数time
//数组记录倒计时分、秒时间,byte
//数组记录八个数码管的显示字,j记
//录按键s0按下的次数,h记录时间
//中断1的次数;
bitstart=0;//start为12分倒计时是否开始时的标志位;
sbitalrm=P3^0;//alrm为响铃脉冲输出端
unsignedintt=0;//响铃脉冲个数
voiddelay1(uchart)//延时程序,最短5ms
{
unsignedcharm,n,k;
for(m=t;m>0;m--)
for(n=10;n>0;n--)
for(k=250;k>0;k--);
}
voidjishi()//倒计时程序
{
if(start==1)//如果倒计时标志有效,则开始倒计时
{
if(time[1]==0)
{
if(time[0]==0)//如果分秒位都为0时,开启时间中断0,输出响铃脉冲
{
start=0;
ET0=1;
TR0=1;
}
else//如果秒位为0,分位不为0,则秒位跳为59,分位减1
{
time[0]--;
time[1]=59;
}
}
elsetime[1]--;//如果分秒位都不为0,则秒位减1
}
}
voidTIMER0()interrupt1using0//时间中断0;用于产生响铃脉冲
{
TH0=0xfc;//1ms的计数初始状态
TL0=0x18;
t++;
alrm=!
alrm;
if(t==5000)//如果输出5000个脉冲,则停止响铃
{
t=0;
ET0=0;
TR0=0;
}
}
voidTIMER1()interrupt3using1
{
TH1=0x63;
TL1=0xc0;//50ms初始值;
if((h++)==20)
{//一秒是否到,如果到,则进行倒计时程序
h=0;
jishi();
}
}
voidINT_0()interrupt0using2//外部中断0,记录按键按下次数
{
ET0=0;
delay1
(1);//延时消抖
j++;
if(j==5)//如果按键s0按下五次,则归零
j=0;
ET0=1;
}
voidjiaohuan()//分数交换,AB两队换场程序
{
uchartemp;
temp=score[0];
score[0]=score[1];
score[1]=temp;
}
voidINT_1()interrupt2using3//外部中断1
{
ET1=0;//延时消抖
delay1
(1);
if(j==1)//如果s0按下的次数为1次,则score[1]加1
{
score[1]++;
if(score[1]==100)//分数到100后归零
score[1]=0;
}
elseif(j==2)
{
score[0]++;//如果s0按下的次数为2次,则score[0]加1
if(score[0]==100)//分数到100后归零
score[0]=0;
}
elseif(j==3)//如果s0按下的次数为3次,则两队分数交换
jiaohuan();
elseif(j==4)//如果s0按下的次数为4次,则打开倒计时或关闭倒计时
start=!
start;
else;
ET1=1;
}
voidby(void)
{
byte[5]=11;//第五个数码管一直显示为“—”
if(j==4)//如果s0按下的次数为4,则显示倒计时
{
byte[3]=time[0]/10;
byte[4]=time[0]%10;
byte[6]=time[1]/10;
byte[7]=time[1]%10;
}
else//否则显示比分
{
byte[3]=score[0]/10;
byte[4]=score[0]%10;
byte[6]=score[1]/10;
byte[7]=score[1]%10;
}
}
voidblank()
{
if(j==1)//如果s0按下1次;第7、8个数码管闪烁跳动
{
byte[7]=10,byte[6]=10;
}
elseif(j==2)//如果s0按下2次;第4、5个数码管闪烁跳动
{
byte[3]=10,byte[4]=10;
}
elseif(j==3)//如果s0按下3次;第4、5、7、8个数码管闪烁跳动
{
byte[7]=10,byte[6]=10;
byte[4]=10,byte[3]=10;
}
else;
}
voidbitshow()
{if(h<=10)//前半秒正常显示,后半秒根据s0按下的次数相应的数码管闪烁
by();
else
blank();
}
voiddis()
{uchari;
while
(1)//死循环显示
{
bitshow();//求每一位的显示
for(i=3;i<=7;i++)
{
P0=~display[i];//P0口控制扫描显示的数码管
P1=tab[byte[i]];//P1口输出字型码
delay1
(1);//延时5ms,增加显示亮度
}
}
}
voidmain(void)
{
TMOD=0x11;
EA=1;
EX0=1;
EX1=1;
ET1=1;
IT1=1;
IT0=1;
TR1=1;//开启时间中断1,两个外部中断
IP=5;//中断优先级控制
dis();//显示子程序
}
........忽略此处.......