篮球计分与控制器的设计与仿真.docx

上传人:b****6 文档编号:6178736 上传时间:2023-01-04 格式:DOCX 页数:19 大小:201.65KB
下载 相关 举报
篮球计分与控制器的设计与仿真.docx_第1页
第1页 / 共19页
篮球计分与控制器的设计与仿真.docx_第2页
第2页 / 共19页
篮球计分与控制器的设计与仿真.docx_第3页
第3页 / 共19页
篮球计分与控制器的设计与仿真.docx_第4页
第4页 / 共19页
篮球计分与控制器的设计与仿真.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

篮球计分与控制器的设计与仿真.docx

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

篮球计分与控制器的设计与仿真.docx

篮球计分与控制器的设计与仿真

 

株洲职业技术学院课程设计报告

 

设计名称:

篮球计分与控制器的设计与仿真

班级:

高电子0803班

姓名:

张帅

 

2010~2011学年第一学期

单片机课程设计       

篮球计分与控制器的设计

摘要:

在此设计中共接入了1个四位一体7段共阴LED显示器,2个两位一体7段共阴LED显示器,前者用来记录赛程时间,其中2位用于显示分钟,2位用于显示秒钟,后者用于记录甲乙队的分数,每队2个LED显示器显示范围可达到0~99分。

赛程计时采用倒计时方式,比赛开始时启动计时,直至计时到零为止。

其次,为了配合计时器和计分器校正调整时间和比分,我们特定在本设计中设立了7个按键,用于设置,调整时间,启动,调整分数和暂停等功能。

采用单片机控制是这个系统按键操作使用简洁,LED显示,安装方便。

根据七段数码管的基本原理,利用7段共阴LED作为显示器件!

关键字:

单片机数码管

前言:

本设计是基于Atmega16单片机的篮球计时计分器,利用7段共阴LED作为显示器件。

在此设计中共接入了1个四位一体7段共阴LED显示器,2个两位一体7段共阴LED显示器,前者用来记录赛程时间,其中2位用于显示分钟,2位用于显示秒钟,后者用于记录甲乙队的分数,每队2个LED显示器显示范围可达到0~99分。

赛程计时采用倒计时方式,比赛开始时启动计时,直至计时到零为止。

其次,为了配合计时器和计分器校正调整时间和比分,我们特定在本设计中设立了7个按键,用于设置,调整时间,启动,调整分数和暂停等功能。

采用单片机控制是这个系统按键操作使用简洁,LED显示,安装方便。

1.1计任务和要求:

任务:

设计一个用于NBA赛场的篮球计时计分器。

要求:

1、能记录整个赛程的比赛时间,并能随时实现暂停。

2、能随时刷新甲、乙两队在整个过程中的比分。

3、中场交换比赛场地时,能自动交换甲、乙两队比分的位置。

4、比赛中场和结束时,能发出报警声。

5、通过指示灯指示上下半场。

6、当比赛时间需要回倒时,能通过按键实现回表。

7、加分有误时可通过按键实现减分调整。

2.系统总体方案及硬件设计

2.1系统总体方案设计

篮球计时计分器主要包括单片机控制系统、计时显示模块、计分显示模块、定时报警,按键控制键盘模块。

通过这几个模块的协调工作就可以完成相应的计

时计分控制和显示功能。

这四个模块的相互连接如下图(图1)所示:

本设计是基于Atmega16单片机的篮球计时计分器,利用7段共阴LED作为显示器件。

此设计在中共接入了1个四位一体7段共阴LED显示器,2个两位一体7段共阴LED显示器,前者用来记录赛程时间,其中2位用于显示分钟,2位用于显示秒钟,后者用于记录甲乙队的分数,每队2个LED显示器显示范围可达到0~99分。

赛程计时采用倒计时方式,比赛开始时启动计时,直至计时到零为止。

2.2硬件电路设计

单片机Atmega16简介

ATmega16是基于增强的AVRRISC结构的低功耗8位CMOS微控制器。

由于其先进的指令集以及单时钟周期指令执行时间,ATmega16的数据吞吐率高达1MIPS/MHz,从而可以缓减系统在功耗和处理速度之间的矛盾

   ATmega16(如图2)具有如下特点:

40个引脚,8kBytesFlash片内程序存储器,256bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器.

图2ATmega16单片机引脚图

此模块电路包括时钟电路模块,复位电路模块及报警显示模块。

2.3时钟电路模块

时钟电路在单片机系统中起着非常重要的作用,是保证系统正常工作的基础。

在一个单片机应用系统中,时钟是保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢。

为达到振荡周期是12MHZ的要求,这里要采用12MHZ的晶振,另外有两个22P的电容,两晶振引脚分别连到XTAL1和XTAL2振荡脉冲输入引脚。

具体连接图如

图3所示:

图3晶振电路

2.4复位电路模块

复位是单片微机的初始化操作,其主要功能是把PC初始化为0000H,使单片微机从0000H单元开始执行程序。

除进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,可以按复位键以重新启动,也可以通过监视定时器来强迫复位。

RST引脚是复位信号的输入端。

复位电路在这里采用的是上电+按钮复位电路形式,具体连接电路如图4

 

图4复位电路

2.5、2.6显示模块

本设计采用共阴极数码显示器,通常,共阴极接低电平(一般接地),其它管脚接段驱动电路输出端。

当某段驱动电路的输出端为高电平时,该端所连接的字符导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。

同样,要求段驱动电路能提供额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。

本次设计在显示模块用到的是一个4位一体和2个两位一体共阴极数码管,共有8个代码输入口和8个位选输入口,采用排阻提供上拉电流数码管,以保证有足够大的电流点亮数码管,采用动态驱动,使各位数码管逐个轮流受控显示,这就是动态驱动,由于扫描速度极快,显示效果与静态驱动相同,其具体图形如下图5图6所示

图5

图6

2.7报警模块

蜂鸣器通过一NPN三极管进行驱动,如图触发信号有基极引入。

(图7)

图7

 

2.8总硬件电路设计

图8

3软件设计

在设计程序之前,我们首先要对单片机应用系统预完成的任务进行深入的分析,明确系统的设计任务、功能要求和技术指标。

其次,要对系统的硬件资源和工作环境进行分析。

这是单片机应用系统程序设计的基础和条件。

3.1软件总体设计方案

本次单片机课程设计软件设计部分采用模块化程序设计,程序部分由主程序、T0中断程序、扫描显示子程序、计时加(减)1秒的子程序、暂停子程序、快表和回表子程序、延时子程序等组成.其程序流程图如图9图10。

图9主程序流程图

图10扫描刷新显示子程序流程图

3.2软件设计

程序部分由主程序、T0中断程序、扫描显示子程序、计时加(减)1秒的子程序、暂停子程序、快表和回表子程序、延时子程序等组成。

3.3延时模块设计

voiddelay(intt)调用该子程序能实现延时功能

{通过参数t,可以调成延时时间

while(t--)

{

unsignedinti;设置变量i的变化范围,能调整延时的单位时间

for(i=0;i<200;i++);长度,i越小,延时的单位时间越短,精度越高

}

}

3.4数码管动态刷新显示程序

voiddisplay(inti,intj,intx,inty)变量i,j,x,y分别为分,秒,A分数,B分数

{

if(jie==1&&bujin!

=2)当中间变量jie==1时,为上半场,此时对P1赋值

P1=0xbf;使P1=0xbf,即P1=10111111B,上半场指示灯对应点亮

P2=0xfe;数码管动态刷新显示程序P2=11111110,i为分钟

P0=seg[i%100/10];P2=0xfe,所以刷新显示时间的分钟十位,调用延时程序,

delay

(1);延时数码管的点亮

P2=0xff;

P0=0;

P2=0xfd;同理,动态刷新时分钟个位并延时点亮

P0=seg[i%10];

delay

(1);

P2=0xff;

P0=0;

P2=0xfb;同理,动态刷新时秒钟十位并延时点亮

P0=seg[j%100/10];

delay

(1);

P0=0;

P2=0xff;

P2=0xf7;同理,动态刷新时秒钟个位并延时点亮

P0=seg[j%10];

delay

(1);

P0=0;

P2=0xff;

P2=0xef;同理,动态刷新A分数十位并延时点亮

P0=seg[x%100/10];

delay

(1);

P2=0xff;

P0=0;

P2=0xdf;同理,动态刷新A分数个位并延时点亮

P0=seg[x%10];

delay

(1);

P2=0xff;

P0=0;

P2=0xbf;同理,动态刷新B分数十位并延时点亮

P0=seg[y%100/10];

delay

(1);

P0=0;

P2=0xff;

P2=0x7f;同理,动态刷新B分数十位并延时点亮

P0=seg[y%10];

delay

(1);

P0=0;

P2=0xff;

}

本设计中各个数码管采用动态驱动,使各位数码管逐个轮流受控显示,由于扫描速度极快(本实验中大约每20毫秒刷新一次),所以显示效果与静态驱动相同。

3.5中断程序

voidt0(void)interrupt1本设计调用定时器T0,计时单位为一秒

{

TH0=0xb1;对定时器T0送入计数初值,由于TH0=0xb;

TL0=0x10;TL0=0x10故定时器定时为20毫秒,即每

if(n==0)20毫秒调用一次voidt0(void)interrupt1

{

n=60;

m--;

}

i++;

if(i==50)

{令i值为5050*20毫秒=1秒,来实现计时

n--;单位为一秒

i=0;

}

display(m,n-1,x,y);调用动态刷新显示程序,即每20毫秒刷新一

}次数码管

3.2.4加分子程序

voidkeyjiafen1()

{当检测到RXD按键按下时,调用延时子程序if(RXD==0)实现消除按键抖动功能,即,当

delay

(1);,

{检测到按键按下时候,延时,按键仍按下,说明

if(RXD==0)按键确实按下,非抖动,A对应加分

{

while(RXD==0);

x++;

}

}

if(TXD==0)检测TXD加分按键时候按下,B加分

{

delay

(1);

if(TXD==0)

{

while(TXD==0);

y++;

}

}

}

3.6减分子程序

voidkeyjianfen1()减分按键检测子程序,其基本算法及功能与加分

{相同

if(WR==0)

{

delay

(1);

if(WR==0)

{

while(WR==0);

x--;

}

}

if(RD==0)

{

delay

(1);

if(RD==0)

{

while(RD==0);

y--;

}

}

}

3.7调整时间子程序

调整时间子程序,使时间快速倒退或快进,实现回表功能,同时回表之后能自动暂停

voidkey2()

{

if(INT0==0)

{

delay(10);

if(INT0==0)回表子程序,检测到INT0按下时,使时间回倒

{

chuzanting==0;chuzanting==0;zanting=1;为附加变量,当回表按键

zanting=1;松开时,表暂停,这两个变量用来调用暂停

n++;

if(n==60)

{

m++;

n=1;

}

}

}

if(INT1==0)快表子程序,检测到INT1按下时,使倒计加快,

{通常情况下与回表子程序配合使用,即当回表

回过的时候,按此键调整时间

delay(10);chuzanting==0;zanting=1;作用同上

if(INT1==0)

{

chuzanting==0;

zanting=1;

n--;

}

}

}

voidshijian()该程序使回表和快表按键松开时候能自动暂停

{

if(zanting==1&&INT0==1&&INT1==1&&chuzanting==0)

{

EA=0;zanting==1&&INT0==1&&INT1==1&&chuzanting==0作用为

zanting=0;当按键松开的时候,调用暂停程序条件

huzanting=0;zanting=0;chuzanting=0,初始化,以便下次回表和快表while

(1)按键松开时候仍能调用暂停程序

{

display(m,n,x,y);

if(P1_0==0)当检测暂停键按下,开中断,跳出暂停

{

delay

(1);

if(P1_0==0)

{

while(P1_0==0);

EA=1;

break;

}

}

}

}

}

3.8半场交换比分子程序

voidkey3()

{

inttemp;定义中间变量temp,检测到有按键按下时候

if(zidong==1&&jie==1)通过temp交换甲队,乙队两队比赛分数

{

temp=x;zidong==1&&jie==1是判断半场的条件

y=temp;

display(m,n,x,y);刷新数码管

zidong=0;

bujin=0;

}

}

3.9比赛暂停子程序

voidkey4()

{

if(P1_0==0)检测到暂停按键按下时候,令EA=0关闭中断

{

delay

(1);同通过死循环程序while

(1),不断刷新数码管

if(P1_0==0)当暂停键再次按下时候,开中断,以使比赛时间

{继续倒计时,由于在暂停的时候,程序处于死循

while(P1_0==0);

EA=0;无法回到主程序,暂停时,除了暂停键

while

(1)其他按键按下均无效

{

display(m,n,x,y);

if(P1_0==0)

{当暂停键再次按下时候,EA=1开中断,计时数码管

delay

(1);继续倒计时,同时通过break语句,跳出死循环

if(P1_0==0)

{

while(P1_0==0);

EA=1;

break;

}

}

}

}

}

}

3.10中场指示灯程序

voidover()

{

if((m==0)&&(n==0))当m,n均为0的时候,通过变量jie的值判断比赛

{是否结束

if(jie>1)如果jie>1,说明半场到了,比赛没有结束,

{令m=2,n=0,关中断,再次按下暂停键时候继续倒计时

m=2;同是T1=1;delay(400);delay(400);,是蜂鸣器

n=0;发声报警

EA=0;

T1=1;

delay(400);

T1=0;

while

(1)

{

display(m,n,x,y);刷新数码管,等待暂停减再次按下,跳出暂停

if(P1_0==0)

{

delay

(1);

if(P1_0==0)

{

while(P1_0==0);

EA=1;

break;

}

}

}

jie--;

}

if(jie==1&&bujin==2)如果jie==1&&bujin==2,说明比赛结束了,{关闭中断,比赛秒表不再走动,同时不短刷新数码管,EA=0;

m=0;

n=0;

T1=1;全场比赛结束蜂鸣器开始报警

delay(400);

T1=0;

P1=0x3f;P1=0x3f上下半场指示灯同时点亮,比赛结束while

(1)

display(m,n,x,y);同时应当不断刷新数码管

}

}

}

3.11主程序

voidmain()

{TMOD=0x01;首先设置定时器工作方式

EA=1;

ET0=1;

TH0=0xb1;定时器送计数初值,EA=1,开中断,P3口电平拉高

TL0=0x10;P1=0x7f,上半场指示灯点亮

TR0=1;TR0=1启动定时器

P3=0xff;

P1=0x7f;

T1=0;

while

(1)主程序通过while

(1),反复调用循环体内的子程序

{来执行相应的功能

keyjiafen1();

keyjianfen1();

key2();

if(zidong==1)zidong==1为key3()执行条件

key3();key3()半场交换场地时自动交换双方

if(n==18&&bujin==0)比赛分数子程序,所以仅当中场时调用

{

bujin=2;修改变量bujin的值,目的是设定over()

}中第二个if语句的执行条件

shijian();

key4();

over();

}

}

参考文献:

单片机原理及应用技术:

中国矿业大学出社

XX

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

当前位置:首页 > 表格模板 > 合同协议

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

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