篮球计分器.docx

上传人:b****3 文档编号:5202891 上传时间:2022-12-13 格式:DOCX 页数:22 大小:514.10KB
下载 相关 举报
篮球计分器.docx_第1页
第1页 / 共22页
篮球计分器.docx_第2页
第2页 / 共22页
篮球计分器.docx_第3页
第3页 / 共22页
篮球计分器.docx_第4页
第4页 / 共22页
篮球计分器.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

篮球计分器.docx

《篮球计分器.docx》由会员分享,可在线阅读,更多相关《篮球计分器.docx(22页珍藏版)》请在冰豆网上搜索。

篮球计分器.docx

篮球计分器

第1章系统概述

1.1系统功能

设计一个甲、乙两队比赛计分器,主要用于各种体育比赛记录分数。

采用矩阵式键盘作为输入。

基于以上思路,本次设计使用80C51实现一基于单片机的电子计分器的设计,其主要具有如下功能:

(1)用户可分别对两队比分进行加5、加10、加15和减5,减10,减15操作。

(2)比分通过8个8段共阴极数码管显示器进行显示,每队比分显示三位,中间两个数码管作为分开分数,可以交换两队的比分。

(4)具有复位功能,通过复位键实现。

(5)裁判可通过控制按键对甲乙实现加减分数。

1.2设计内容及要求

1.2.1设计内容:

(1)给甲乙两队分别设置一个分数控制按钮,此按钮有7种状态,分别为+5、+10、+15、-5、-10、-15,初始状态置数+50。

(2)设置一个切换状态按钮,可以分别切换每一种状态,然后每一种状态对相应的对加分。

(3)设置一个复位按钮,按下实现甲、乙队总分置0并即时显示。

(4)设置一个交换分按钮,用于交换甲乙比分。

1.2.2设计要求:

1、方案合理、正确,系统稳定、可靠。

2、软件设计要求尽可能精练、简短和运行可靠。

3、硬件电路要求简单明了,以节约成本。

1.3按钮设置

本设计的宗旨是用最少的按键实现最多的功能。

设计中一共用到了9个按钮,分别为:

清零按钮、甲的加分减分按钮,乙的加分减分按钮,切换状态按钮和交换比分按钮。

每个按钮的功能如下:

控制甲的按钮:

实现+5、+10、+15、-5、-10、-15功能;

控制乙的按钮:

实现+5、+10、+15、-5、-10、-15功能;

切换按钮:

实现甲乙的各种状态的切换;

切换比分按钮:

交换甲乙的比分;

清零按钮:

实现甲乙比分清零;

 

第2章总体方案设计

2.1总体系统框图

此次设计80C51单片机为核心,配以一定的外围电路和软件,以实现比赛计分器的功能。

利用8个8段共阴级数码管显示器.采用动态显示输出比分,用户信息输入则采用4×4矩阵式键盘。

用一片单片机可满足本设计的输入输出。

系统设计方案的硬件电路设计框图如图2-1所示。

图2-1硬件电路设计

2.2系统组成

系统由硬件部分和软件部分组成。

硬件电路由复位按钮、80C51单片机、矩阵键盘和独立按键,两个四位一体个数码管等组成。

软件部分主程序主要由系统初始化段、键盘识别、键值处理、8段共阴极LED显示器扫描显示子程序组成。

第3章系统硬件设计

3.1控制电路设计

3.1.1复位电路

如图3-1所示,按钮与单片机的RST引脚相连,当每次按下该按钮后,系统将通过软件实现对计分回到初始值功能。

图3-1复位控制接口电路

3.1.2矩阵按钮电路

键盘的读取方式:

行与列各有4条线档其中一个按键被按下后,它所在的行列线就导通了,如果一条线上是低电平,那么按键的另一条线也是低电平。

先给第一行送一个低电平,读取列值,就可以判定第一行上是否有按键按下,如果有按键,那么列线里面就有一条线为低电平。

如果都为高电平,说明第一行上没有按键被按下,接着给第二行送低电平,重复上述步骤,就可以读取按键了,下图即(图3-2)为矩阵按键。

3.2数码管显示电路设计

显示器采用8段共阴极数码管显示器,来实现显示器的动态扫描,八个二极管连接一个阴极的结构,只要另一段为高电平,二极管就会发光,从而形成一段。

将八段顺序排列后就成为具有一定编码的共阴显示器了。

动态扫描的频率有一定的要求,频率太低,LED将出现闪烁现象。

如果频率太高,由于每个LED点亮的时间太短,LED的亮度太低,肉眼无法看清,所以一般均取几个ms左右为宜,这就要求在编写程序时,选通某一位LED使其点亮并保持一定的时间,程序上常采用的是调用延时子程序。

图3-3数码管扫描显示电路

数码管显示采用8个8段数码管显示器,来实现显示器的动态扫描显示采用动态扫描显示方法,即由显示器扫描显示子程序控制显示器逐个循环从左至右依次点亮各个显示器。

由单片机的P1口控制位选显示,P0控制数码管的段选。

 

第4章软件设计

4.1主程序设计

主程序主要由系统初始化段、键盘识别、键值处理、8个8段共阴极数码管显示器扫描显示子程序组成。

通过对以上各段和子程序的结合,以实现系统功能。

该系统主程序流程图如下图所示。

图4-1系统主程序流程图

4.2各子程序设计

4.2.1延时子程序

voiddelay(uintx)

{

uintq,i;

for(q=x;q>0;q--)

{for(i=40;i>0;i--);

}

}

4.2.2键盘扫描子程序

keyscan()

{

ucharj;

P2=0xf0;

scan1=P2;

if((scan1&0xf0)!

=0xf0)

{

delay(20);

scan1=P2;

if((scan1&0xf0)!

=0xf0)

{

P2=0x0f;

scan2=P2;

keycode=scan1|scan2;

for(j=0;j<16;j++)

{

if(keycode==key_code[j])

{

key=j;

return(key);

}

}

}

}

else

P2=0xff;

return(16);

}

4.2.3分数调换部分程序

voidkeychange()

{

if(key3==0)

{

delay(20);

if(key3==0)

{

time_one[2]=time_one[0];

time_one[0]=time_one[1];

time_one[1]=time_one[2];

while(key3==0){display_one();display_two();};

}

}

}

4.2.4加减部分程序

voiddisplay_two()

{

if(time_one[1]<0||time_one[1]>200)

{

P1=0xfb;

P0=dis_code[10];

delay

(2);

P1=0xfd;

P0=dis_code[10];

delay

(2);

P1=0xfe;

P0=dis_code[10];

delay

(2);

}

else

{

P1=0xfb;

P0=dis_code[time_one[1]%10];

delay

(2);

P1=0xfd;

P0=dis_code[time_one[1]/10%10];

delay

(2);

P1=0xfe;

P0=dis_code[time_one[1]/100];

delay

(2);

}

}

4.2.5裁判对两队选择改分部分程序

voidint_0()interrupt0

{

delay(20);

if(INT0==0)

{

a++;

if(a>2)a=0;

}

}

4.2.6初始比分程序

voidint_1()interrupt2

{

delay(20);

if(INT1==0)

{

time_one[0]=0;

time_one[1]=0;

display_one();

display_two();

}

}

 

第5章实物连接图

5.1设置的开始比分

5.2交换分值

5.3清零显示

5.4三位分值显示

5.5当分数小于0时显示结果结果

5.6软件调试结果

调试结果记录如下:

按照键盘分布说明按键,可以给甲、乙加或者减5分,10分,15分,显示器跟踪显示出总分,然后模拟比赛细节,均达到预期效果。

在甲、乙均有一定总分的情况下,按复位按钮,显示结果复位。

重复进行上面操作,结果均符合设计要求。

可以通过切换按钮选择不同的状态,将会实现不同的功能。

还可以通过比分交换按钮交换双方的比分,这点是非常实际化的,在现实比赛中也有这样的功能,完全实现了比赛的要求。

 

设计总结

通过本次的课程设计,使我了解到,主要是以MCS-51单片机为核心,结合KeiluVision4编程软件和Proteus调试软件的一门计算机语言,通过指令来控制相应硬件的运行状态,虽然这次设计只有短短的两周时间,但我深刻体会到了其中的苦与乐,感悟甚是深切,总觉得从书本上接受的东西不如操作和实践来的那么深刻。

在没有做课程设计以前,觉得课程设计只是对知识的单纯总结,但是通过这次课程设计发现自己的看法有点太片面,课程设计不仅是对前面所学知识的一种检验,也是对自己能力的一种提高,通过这次课程设计使自己明白了原来的那点知识是非常欠缺的,要学习的东西还很多,通过这次课程设计,明白学习是一个长期积累的过程,在以后的工作和生活中都应该不断的学习,努力提高自己的知识和综合素质,并将理论与实际相结合,学以致用,不再是纸上谈兵,。

对我们学生来说,理论与实际同样重要,这是我们以后在工作中说明自己能力的一个重要标准。

在这次课程设计中,我在整个设计过程中懂得了许多东西,也培养了独立思考和设计的能力,树立了对知识应用的信心,相信会对今后的学习工作和生活有非常大的帮助,并且提高了自己的动手实践操作能力,使自己充分体会到了在设计过程中的成功喜悦。

虽然这个设计做的不是很理想,但是在设计过程中所学到的东西是这次课程设计的最大收获和财富,使我受益良多。

课程设计是结束了,不过学习单片机知识的过程还没有终结,探索学习的奥妙,培养学习的兴趣,养成良好的学习习惯对我们来说才是最重要的。

与此同时我感受到了老师对学生的那种悔人不卷的精神,每天的固定时间,老师都来给我们指导,使我们少走弯路,顺利完成实习任务,感谢汪老师一路以来对我们的关心与帮助,感谢我们组的同学,给我提出了宝贵的意见和建议,使得本次课程设计能过顺利完成。

参考文献

[1]《单片机原理与应用》王迎旭编机械工业出版社

[2]《51系列单片机原理与接口技术实验指导》周向红编湖南工程学院

[3]《微型计算机原理及应用》许立梓编机械工业出版社2002

[4]《微型计算机接口技术及应用》刘乐善编华中理工大学出版社2000

[5]《计算机硬件技术基础试验教程》邹逢兴编高等教育出版社2000

[6]《16位微型计算机原理接口及其应用》周佩玲编中国科技大学出版社2000

[7]《微型计算机原理与接口技术》吴秀清编中国科学技术出版社2001

[8]《微型计算机接口技术》邓亚平编清华大学出版社2001

[9]《单片机原理及及应用》王迎旭编机械工业出版社2001

[10]《单片机应用程序设计技术》周航慈著北京航空航天出版社2002

[11]《单片机实用技术问答》谢宜仁主编人民邮电出版社2002

 

附录A:

源程序清单

#include

#defineucharunsignedchar

#defineuintunsignedint

ucharkey,a,scan1,scan2,keycode;

Ucharcodedis_code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};

ucharcodekey_code[]={0xee,0xed,0xeb,0xe7,0xde,0xdd,0xdb,0xd7,

0xbe,0xbd,0xbb,0xb7,0x7e,0x7d,0x7b,0x77};

inttime_one[]={0,0,0};

sbitkey1=P3^5;

sbitkey2=P3^6;

sbitkey3=P3^7;

keyscan();

voidfunc();

voidpanduan();

voiddisplay_one();

voiddisplay_two();

voiddisplay_three();

voiddisplay_fore();

voidkeychange();

voiddelay(uintx);

voidmain()

{

uchart;

IT0=1;

IT1=1;

EX0=1;

EX1=1;

EA=1;

a=0;

time_one[0]=50;

time_one[1]=50;

while

(1)

{

panduan();

keychange();

for(t=0;t<100;t++)

{

display_one();

display_two();

}

keyscan();

func();

}

}

voiddelay(uintx)

{

uintq,i;

for(q=x;q>0;q--)

{

for(i=40;i>0;i--);

}

}

voiddisplay_one()

{

if(time_one[0]<0||time_one[0]>200)

{

P1=0x7f;

P0=dis_code[10];

delay

(2);

P1=0xbf;

P0=dis_code[10];

delay

(2);

P1=0xdf;

P0=dis_code[10];

delay

(2);

}

else

{

P1=0x7f;

P0=dis_code[time_one[0]%10];

delay

(2);

P1=0xbf;

P0=dis_code[time_one[0]/10%10];

delay

(2);

P1=0xdf;

P0=dis_code[time_one[0]/100];

delay

(2);

}

P1=0xef;

P0=0x40;

delay

(2);

P1=0xf7;

P0=0x40;

delay

(2);

}

voiddisplay_two()

{

if(time_one[1]<0||time_one[1]>200)

{

P1=0xfb;

P0=dis_code[10];

delay

(2);

P1=0xfd;

P0=dis_code[10];

delay

(2);

P1=0xfe;

P0=dis_code[10];

delay

(2);

}

else

{

P1=0xfb;

P0=dis_code[time_one[1]%10];

delay

(2);

P1=0xfd;

P0=dis_code[time_one[1]/10%10];

delay

(2);

P1=0xfe;

P0=dis_code[time_one[1]/100];

delay

(2);

}

}

keyscan()

{

ucharj;

P2=0xf0;

scan1=P2;

if((scan1&0xf0)!

=0xf0)

{

delay(20);

scan1=P2;

if((scan1&0xf0)!

=0xf0)

{

P2=0x0f;

scan2=P2;

keycode=scan1|scan2;

for(j=0;j<16;j++)

{

if(keycode==key_code[j])

{

key=j;

return(key);

}

}

}

}

else

P2=0xff;

return(16);

}

voidfunc()

{

if(a==1)

{

if((scan1&0xf0)!

=0xf0)

{

switch(key)

{

case0:

if(time_one[0]==-1)

{time_one[0]=0;}

else

{time_one[0]+=5;}

break;

case1:

if(time_one[0]==-1)

{time_one[0]=0;}

else

{time_one[0]+=10;}

break;

case2:

if(time_one[0]==-1)

{time_one[0]=0;}

else

{time_one[0]+=15;}

break;

case4:

if(time_one[0]==-1)

{time_one[0]=0;}

else

{time_one[0]-=5;}

break;

case5:

if(time_one[0]==-1)

{time_one[0]=0;}

else

{time_one[0]-=10;}

break;

case6:

if(time_one[0]==-1)

{time_one[0]=0;}

else

{time_one[0]-=15;}

break;

default:

break;

}

}

}

if(a==2)

{

if((scan1&0xf0)!

=0xf0)

{

switch(key)

{

case0:

if(time_one[1]==-1)

{time_one[1]=0;}

else

{time_one[1]+=5;}

break;

case1:

if(time_one[1]==-1)

{time_one[1]=0;}

else

{time_one[1]+=10;}

break;

case2:

if(time_one[1]==-1)

{time_one[1]=0;}

else

{time_one[1]+=15;}

break;

case4:

if(time_one[1]==-1)

{time_one[1]=0;}

else

{time_one[1]-=5;}

break;

case5:

if(time_one[1]==-1)

{time_one[1]=0;}

else

{time_one[1]-=10;}

break;

case6:

if(time_one[1]==-1)

{time_one[1]=0;}

else

{time_one[1]-=15;}

break;

default:

break;

}

}

}

}

voidpanduan()

{

if((time_one[1]<0)||(time_one[2]>250))

{

time_one[1]=-1;

display_one();

display_two();

}

if((time_one[0]<0)||(time_one[0]>250))

{

time_one[0]=-1;

display_one();

display_two();

}

}

voidint_0()interrupt0

{

delay(20);

if(INT0==0)

{

a++;

if(a>2)a=0;

}

}

voidint_1()interrupt2

{

delay(20);}

附录B:

总体硬件实物图

 

电气信息学院课程设计评分表

项目

评价

及格

设计方案合理性与创造性(10%)

开发板焊接及其调试完成情况*(10%)

硬件设计或软件编程完成情况(20%)

硬件测试或软件调试结果*(10%)

设计说明书质量(20%)

答辩情况(10%)

完成任务情况(10%)

独立工作能力(10%)

出勤情况(10%)

综合评分

指导教师签名:

________________

日期:

________________

注:

表中标*号项目是硬件制作或软件编程类课题必填内容;

此表装订在课程设计说明书的最后一页。

课程设计说明书装订顺序:

封面、任务书、目录、正文、评分表、附件(非16K大小的图纸及程序清单)。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 营销活动策划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1