基于51单片机的篮球比赛电子记分牌仿真图+完整程序Word格式.docx
《基于51单片机的篮球比赛电子记分牌仿真图+完整程序Word格式.docx》由会员分享,可在线阅读,更多相关《基于51单片机的篮球比赛电子记分牌仿真图+完整程序Word格式.docx(20页珍藏版)》请在冰豆网上搜索。
1.1单片机在体育赛事计分的应用1
1.2本设计任务1
第2章总体方案论证与设计2
2.1显示模块2
2.2按键控制模块2
2.3报警模块2
2.4总体硬件组成框图3
第3章系统硬件设计4
3.1LCD1602显示模块的硬件设计4
3.2按键控制模块的硬件设计4
3.3蜂鸣器报警模块的硬件设计5
3.4单片机最小系统的硬件设计6
第4章系统的软件设计7
4.1主程序设计7
4.2按键控制程序设计8
4.3蜂鸣器报警程序设计8
第5章系统调试与测试结果分析10
5.1系统调试10
5.2测试结果10
结论11
参考文献12
附录1程序13
附录2仿真效果图19
第1章绪论
体育比赛计时计分系统是对体育比赛过程中所产生的时间、比分等数据进行快速采集记录,加工处理,传递数据的信息系统。
根据不同运动项目的不同比赛规则要求,体育比赛的计时计分系统包括测量类、评分类、命中类、制胜类得分类等多种类型。
篮球比赛是根据参赛队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统是一个负责篮球比赛的数据采集和分配的专用系统,它负责对比赛结果、成绩信息的采集处理、传输分配。
篮球比赛的计时计分系统由计时器、计分器等多种电子设备组成,由于比赛的不可重复性,决定了篮球计时计分系统是一个实时性很强、可靠性要求极高的电子服务系统,所以计时计分设备是篮球比赛中不可缺少的电子设备,计时计分系统设计是否合理,关系到比赛系统运行的稳定和可靠,并直接影响到比赛的顺利进行。
同时,根据目前高水平篮球比赛要求,完善的篮球比赛计时计分系统设备应能够与现场成绩处理、现场大屏幕、电视转播车等多种设备相联,以便实现高比赛现场感、表演娱乐观众等功能目标。
随着比赛规则的进一步完善,相应的计时计分系统也必须随之改进。
1.1单片机在体育赛事计分的应用
传统的篮球比赛计分是由工作人员人工翻动记分牌实现的,而比赛的时间则由工作人员计表控制。
由于人为因素,人工操作的比赛计分板难免会出现误差。
而作为微型控制系统的单片机具有集成度高,功能强,通用性好,特别是它具有体积小,重量轻,能耗低,价格便宜,可靠性高,抗干扰能力强和使用方便等独特的优点,使单片机迅速得到了推广应用,目前已经成为测量控制应用系统中的优选机种和新电子产品的关键部位。
因此单片机在体育比赛记分牌的应用也成为了一种不可避免的趋势。
1.2本设计任务
本次设计以AT89C51单片机为核心组成单片机最小系统,构建得分和时间的显示模块、进行控制的按键模块以及能够在规定的时间报警的提示模块,通过在按键控制模块的操作实现对比分和时间的设计,最终在显示模块上显示
。
第2章总体方案论证与设计
本系统采用单片机AT89C51为控制核心,系统主要包括显示模块、按键控制模块、蜂鸣器报警模块等。
下面对各模块的设计进行论证比较。
2.1显示模块
方案一:
采用七段码数码管显示。
数码管是指将所有发光二极管的一极接到一起形成公共极,因此数码管有共阴共阳之分。
以共阳数码管为例,共阳数码管在应用时应将公共极接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。
当某一字段的阴极为高电平时,相应字段就不亮。
因此每个数码管有9个接口。
数码管的驱动方式有静态扫描和动态扫描两种形式。
静态扫描编程简单,但电路复杂;
动态扫描变成复杂,而且还需要使用其他芯片。
方案二:
采用1602液晶显示。
液晶的物理特性是:
当通电时导通,排列变得有秩序,是光线容易通过,不通电时排列混乱,阻止光线通过。
相比于数码管,LCD1602不仅可以显示的图形符号更丰富,而且具有轻薄、无辐射等优点。
比较以上两种方案,系统设计中采用方案二。
2.2按键控制模块
采用矩阵键盘。
矩阵键盘的长各分接口分别于单片机的I/O口连接,可以通过连接数量较少的I/O口,扩展出多个按键。
但其缺点是电路更复杂,编程更麻烦。
采用独立按键。
每个独立按键与单片机I/O连接,虽然不能节省I/O口,但电路简单、编程容易
比较以上两种方案,由于本系统只需要4个按键,因此选者方案二。
2.3报警模块
报警模块中,信号由单片机输出经PNP型三极管放大后进入蜂鸣器发出声响进行比赛时间的提示功能。
2.4总体硬件组成框图
系统框图如图2-1所示,系统主要由四大模块组成即单片机最小系统模块、液晶显示模块、蜂鸣器报警模块、按键控制模块。
单片机最小系统作为整个系统的控制核心,按键模块的4个按键对分数和时间进行控制然后显示在LCD1602上,蜂鸣器报警模块则根据程序设定的时间进行报警。
第3章系统硬件设计
为使该电子记分牌更加方便和灵活,本设计将其划分为四个模块,下面将对各个模块逐一介绍。
3.1LCD1602显示模块的硬件设计
1602液晶也叫1602字符型液晶它是一种专门用来显示字母、数字、符号等的点阵型液晶模块它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符。
1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块。
3.2按键控制模块的硬件设计
按键控制模块采用4个独立按键,Key1、Key2、Key3、Key4分别于单片机的P1^0、P1^1、P1^2、P1^3连接,每个按键的另一端直接与地相连接,因此是低电平有效。
按键控制模块的电路如图3-2所示。
这四个独立按键分别实现了比赛的暂停、时间的刷新以及比赛两只队伍的得分值的改变。
具体标号和功能如表3-1所示。
表3-1按键功能描述
序号
接口
功能
Key1
P1^0
比赛开始/暂停
Key2
P1^1
刷新进攻球队24秒时间
Key3
P1^2
A队得分值加一
Key4
P1^3
B队得分值加一
图3-2按键控制模块电路图
3.3蜂鸣器报警模块的硬件设计
蜂鸣器报警模块由一个蜂鸣器和一个PNP型的三极管组成,接单片机的P2^7口,蜂鸣器为5V驱动,低电平有效。
蜂鸣器模块如图3-3所示。
3.4单片机最小系统的硬件设计
AT89C51是一种带4K字节FLASH存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。
最小系统模块的晶振电路由12MHz晶振和30pF的电容构成,复位电路由10uF的电解电容和104瓷片电容构成。
电路如图3-4所示。
第4章系统的软件设计
在本设计中,系统的软件设计也采用了模块化的设计,将系统的各部分功能编写成子模块的形式,这样增强了系统软件的可读性和可移植性。
4.1主程序设计
本系统中单片机的主要功能就是利用内部的定时器计时,并随时接受控制模块的信息,将比赛的得分和剩余时间显示在1602液晶上。
其主程序流程如图4-1所示
4.2按键控制程序设计
Key1键配合程序所设定的标志位flag控制比赛的暂停,当Key1按下,flag加一,两种不同的flag值分别带关闭定时器和打开定时器。
按下Key2键后给24秒进攻时间的变量"
miao"
重新赋值为24,代表上一次进攻结束,另一只球队开始进攻。
每按下Key3和Key4键,A、B两队的得分加一。
程序流程如图4-2所示。
图4-2按键控制流程图
4.3蜂鸣器报警程序设计
在程序里设定一个变量,用if语句判断,当该变量等于设定的时间段的时候,蜂鸣器响。
在24秒进攻时间只剩5秒时,蜂鸣器响一秒;
当24秒进攻时间结束时,蜂鸣器响4秒;
单节比赛结束蜂鸣器响4秒。
流程图如图4-3所示。
第5章系统调试与测试结果分析
5.1系统调试
为预先排除软件和硬件的错误,本设计需经过软件调试、硬件调试和软硬兼联合调试。
5.1.1硬件调试
本阶段采用实验板ST-3A对各个模块的功能进行调试,主要检查硬件间连线是否正确并调试各模块能否实现指定的功能。
5.1.2软件调试
软件调试采用Keil软件完成。
在写好源程序之后,建新工程,选择AT89C51处理器;
接着新建文档编辑程序,编辑完存为.C,把保存的.C文件加入到工程里。
检查无语法错误后生成.HEX文件。
5.1.3硬件软件联调
软硬件联合调试主要是运用Proteus完成
将系统原理图在Proteus环境下画好之后,将软件调试阶段Keil生成的.HEX文件下载到单片机里,在电脑上进行软件仿真。
5.2测试结果
本次系统设计结构较好,单片机最小系统能正常工作,按键模块能实现控制功能,液晶显示模块能根据按键模块输入的控制信息进行显示,蜂鸣器报警模块能按程序设定的要求报警。
仿真结果图如附录2所示。
结论
本次基于单片机的篮球比赛电子记分牌是针对传统篮球比赛人工翻动比分牌的改进,解决篮球比赛时计分与计时准确方便和灵活适用的问题。
系统总体电路由单片机最小系统、1602液晶显示模块、5个独立按键控制模块以及蜂鸣器报警模块构成。
四个模块分别完成信息的处理、显示、控制等篮球比赛记分牌的基本功能。
通过软硬件的仿真调试,实现了本次设计的基本功能:
在1602液晶左边部分分别显示比赛队伍的得分,右边部分显示比赛剩余时间,四个按键能完成程序的要求对比分和时间的调整进行控制,蜂鸣器能在规定的时间段鸣叫,给予球员和观众提示。
参考文献
[1]李川,汪秋蒙.ISP技术的原理及实现方法[J].科技资讯.2007,35期:
93-94.
[2]万光毅.单片机实验与实践教程[M].北京:
北京航空航天大学出版社.2005.1.
[3]张毅刚.单片机原理及应用[M].北京:
高等教育出版社.2003:
160-190.
[4]胡烨,姚鹏翼,陈明.Protel99SE原理图与PCB设计教程[M].机械工业出社.2005:
23-99.
[5]马忠梅.单片机的C语言应用程序设计[M].北京:
北京航空航天大学出版社.2006
[6]周润景.基于Proteus的电路与单片机仿真系统设计与仿真[M].北京:
北京航空航天大学出版社.2005.
[7]金炯泰,金奎焕.如何使用KEIL8051C编译器[M].北京:
北京航空航天大学出版社.2002.
[8]尹仕.电工电子制作基础[M].武汉:
[9]彭介华.电子技术课程设计指导[J].北京:
附录1程序
#include<
reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
ucharcodetab1[]="
A:
"
;
ucharcodetab2[]="
B"
ucharcodetab3[]="
GAMEOVER"
//比赛结束时显示
ucharcodetab4[]="
AB"
sbitlcden=P2^2;
sbitlcdrw=P2^1;
//1602液晶的3个端口
sbitlcdrs=P2^0;
sbitkey1=P1^0;
sbitkey2=P1^1;
//四个按键
sbitkey3=P1^2;
sbitkey4=P1^3;
sbitBell=P2^7;
//蜂鸣器
uintkeyflag,flag;
//标志位
uchari,num,count;
ucharsec,min,miao;
ucharAscore,Bscore;
//两队得分
/*******************液晶函数****************************/
voiddelay(uintz)//液晶延时函数
{
uintx,y;
for(x=z;
x>
0;
x--)
for(y=110;
y>
y--);
}
voidwrite_com(ucharcom)//命令子函数command
lcdrs=0;
//接受指令
P0=com;
//给P0口送指令码
delay(5);
lcden=1;
//E变为高电平
//在此延迟期间,将指令送入
lcden=0;
//E变为低电平,高脉冲结束
voidwrite_dat(uchardate)//数据子函数data
lcdrs=1;
//接受数据
P0=date;
//给P0口送数据
//在此延迟期间,将数据送入
voidwrite_time(ucharadd,uchardate)//写入时间函数
ucharshi,ge;
shi=date/10;
ge=date%10;
write_com(0x80+add);
write_dat(0x30+shi);
write_dat(0x30+ge);
voidwrite_miao(ucharadd,uchardate)//写入24秒函数
write_com(0x80+0x40+add);
voidwrite_Ascore(ucharadd,uchardate)//写入A队得分函数
ucharbai,shi,ge;
bai=date/100;
shi=date/10%10;
write_dat(0x30+bai);
voidwrite_Bscore(ucharadd,uchardate)//写入B队得分函数
voidwrite_score(ucharadd,uchardate)//比赛结束写入得分函数
voiddelay_Bell(uintz)//蜂鸣器延时函数
for(y=255;
voidinit()//初始化函数
Bell=1;
keyflag=0;
flag=0;
min=12;
sec=0;
miao=25;
Ascore=0;
Bscore=0;
lcdrw=0;
//E的初始值为低电平,后面的程序给高电平从而满足E为高脉冲
write_com(0x38);
//写入显示模式指令
write_com(0x0e);
//显示是否打开以及光标的设置
write_com(0x06);
//地址指针的加减和整屏是否移动
write_com(0x01);
//清屏指令
write_com(0x80+0x00);
//显示字符的初始位置
for(num=0;
num<
16;
num++)
{write_dat(tab1[num]);
write_com(0x80+0x40);
//起始地址为53,将字符调到了第二行
2;
{write_dat(tab2[num]);
write_Ascore(2,Ascore);
write_Bscore(2,Bscore);
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
//开定时器
voidkeyscan()//按键函数
if(key1==0)
delay(10);
{keyflag++;
//键一按下,标志位加一
while(!
key1);
if(keyflag==1)
{TR0=0;
}//关中断
if(keyflag==2)
{TR0=1;
keyflag=0;
if(key2==0)//刷新24秒
if(key2==0)
{while(!
key2);
miao=25;
if(key3==0)
key3);
Ascore++;
write_Ascore(2,Ascore);
}//写入A队得分
if(key4==0)
key4);
Bscore++;
write_Bscore(2,Bscore);
}//写入B队得分
voidmain()
init();
while
(1)
keyscan();
if(flag==0)
write_com(0x80+0x40+7);
//写入第一节FIR
write_dat('
F'
);
I'
R'
if(flag==1)
//写入第二节SEC
S'
write_dat('
E'
C'
if(flag==2)
//写入第三节THR
T'
H'
if(flag==3)
//写入第四节FOU
O'
U'
if(flag==4)//比赛结束显示”GAMEOVER“和两队比分
TR0=0;
write_com(0x80);
for(i=0;
i<
i++)
write_dat(tab3[i]);
//"
GAMEOVER"
字符串数组
write_dat(tab4[i]);
write_score(5,Ascore);
//比赛结束写入两队比分
write_score(11,Bscore);
if(miao>
=4&
&
miao<
=5)//若只剩5秒,蜂鸣器响1秒
{Bell=0;
delay_Bell(510);
Bell=1;
}
voidtimer0()interrupt1//定时器
count++;
if(count==18)
count=0;
sec--;
miao--;
if(miao==(-1))//若24秒到,蜂鸣器响4秒
{
Bell=0;
delay_Bell(510);
if(miao==(-1))
{miao=24;
if(sec==((-1)))
sec=59;
min--;
if(min==(-1))//若比赛(单节)结束,蜂鸣器响4秒
min=11;
flag++;
write_time(11,min);
write_time(14,sec);
write_miao(14,miao);
}//显示比赛时间
附录2仿真效果图