实训项目篮球记分牌单片机设计.docx
- 文档编号:22869347
- 上传时间:2023-04-28
- 格式:DOCX
- 页数:20
- 大小:99.41KB
实训项目篮球记分牌单片机设计.docx
《实训项目篮球记分牌单片机设计.docx》由会员分享,可在线阅读,更多相关《实训项目篮球记分牌单片机设计.docx(20页珍藏版)》请在冰豆网上搜索。
实训项目篮球记分牌单片机设计
单片机课程设计报告书
课题名称
篮球赛计时计分电路
姓名
学号
院系
通信与电子工程学院
专业
电子信息工程
指导教师
2012年6月14日
一、设计任务及要求:
。
1.1设计任务
设计一个单片机系统用于篮球比赛计时计分,满足以下功能要求:
能记录整个赛程的比赛时间,并能修改比赛时间、暂停比赛时间;能随时刷新甲、乙两队在整个比赛过程中的比分;中场交换比赛场地时,能交换甲、乙两队比分的位置;比赛结束时,能发出报警声。
1.2设计要求
1. 画出总体设计框图,以说明计时计分器独立的功能模块组成,标出各个模块之间互相联系。
2. 设计各个功能模块的电路图,加上原理说明。
3. 选择合适的元器件,在面板上接线验证、调试各个功能模块的电路,在接线验证时设计、选择合适的输入信号和输出方式,在确定电路充分正确性同时,输入信号和输出方式要便于电路的测试和故障排除。
4. 在验证各个功能模块基础上,对整个电路的元器件和布线进行合理布局,进行整个计时计分电路的接线调试。
指导教师签名:
2012年6月14日
二、指导教师评语:
指导教师签名:
年月日
三、成绩
验收盖章
年月日
篮球计时计分电路课程设计
(湖南城市学院通电与电子工程学院电子信息工程专业,益阳,413000)
1设计任务
1.1设计目的
1.了解计时计分器组成及工作原理。
2.进一步掌握计时计分器的设计方法
3.进一步掌握芯片的逻辑功能及使用方法。
4.熟悉集成电路的引脚安排.。
1.2设计指标
设计一个单片机系统用于篮球比赛计时计分,满足以下功能要求:
(1)能记录整个赛程的比赛时间,并能修改比赛时间、暂停比赛时间。
(2)能随时刷新甲、乙两队在整个比赛过程中的比分。
(3)中场交换比赛场地时,能交换甲、乙两队比分的位置。
(4)比赛结束时,能发出报警声。
1.3设计要求
1. 画出总体设计框图,以说明计时计分器独立的功能模块组成,标出各个模块之间互相联系。
2. 设计各个功能模块的电路图,加上原理说明。
3. 选择合适的元器件,在面板上接线验证、调试各个功能模块的电路,在接线验证时设计、选择合适的输入信号和输出方式,在确定电路充分正确性同时,输入信号和输出方式要便于电路的测试和故障排除。
4. 在验证各个功能模块基础上,对整个电路的元器件和布线进行合理布局,进行整个计时计分电路的接线调试。
2、设计思路与总体框图.
本设计是采用AT89C52单片机为核心设计的一个用于赛场的篮球计时计分器。
本设计采用定时器T0中断计时,显示部分分为计时和计分显示两部分,均采用共阴极LED显示。
单片机P3口(P3.0——P3.5)是计时计分显示共用的扫描口,P0口是计时数据输出口,P2口是计分数据输出口。
计时部分计时范围宽,而且可定时设定与小时、分钟调整;计分部分调整灵活,显示范围宽,足以满足各种规模赛程需要。
两个显示模块均采用动态扫描方式显示。
图1所示为计时计分器的总体框图。
▲图1计时计分器结构框图
3、系统硬件电路的设计
3.1、时钟电路
MCS-51内部有一个用于构成振荡器的高增益反相放大器,此放大器的输入和输出端分别是引脚XTAL1和XTAL2,在XTAL1和XTAL2上外接时钟源即可构成时钟电路。
有内部和外部两种时钟产生方式。
本设计采用的是外部方式。
3.2、复位电路
复位电路的基本功能是:
系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。
为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。
上电复位设利用电容充电来实现的,即上电瞬间RST/Vpd端的电位与Vcc相同,随着充电电流的减少,RST/Vpd的电位下降,最后被嵌位在0V。
按钮电平复位是当按下按钮后,电源Vcc通过电阻R施加在单片机复位端RST/Vpd上,实现单片机复位。
本设计采用的是上电+按钮电平复位电路,是上电自动复位与按钮电平复位电路的组合,当振荡频率选11.0592MH时。
电容C取10uF,R取10K,Rs取1K。
3.3、按键控制电路
设计采用的是用查询方式的,也就是把按键接在P1口,用程序查询方式查询那个按键按下,执行相应的操作。
3.4、数码管显示电路
数码管实际上是由7个发光管组成8字形构成的,加上小数点就是8个。
我们分别把他命名为A,B,C,D,E,F,G,H。
假设我们要显示一个数字2,那么A、B、G、E、D这5个段的发光管亮就可以了,C、F、H不亮,同时由于接法为共阳接法,那么为低电平是亮,为高电平是灭。
从高往低排列,P1.7-P1.0写成二进制为01111110,把他转化为16进制则为A2H。
本设计采用的是数码管动态显示。
3.5、定时报警电路
定式报警电路
4、软件设计
4.1、程序流程图
篮球比赛中,得分可分为1分、2分、3分三种情况,但为了方便我们在这只设置加1分,得2分、3分的情况可用按2次、3次加1分得到。
还设置了定是报警键。
根据这样的设计要求,结合数码管的显示以及52单片机中计数器的工作实现方式、接口应用、中断控制等可设计出程序流程图如下:
4.2、程序分析
本设计采用AT89S52单片机中的一个16位的定时/计数器T0,分别由TH0和TL0组成,它们均是8位寄存器,在特殊功能寄存器中占地址8AH-8DH。
它们用于存放定时或计数的初始值。
此外,内部还有一个8位的方式寄存器TMOD和一个8位的控制寄存器TCON。
用于选择和控制定时/计数器的工作。
5程序设计仿真
在计算机中打开PROTEUS软件,建立新的项目,在元件库中选择相应的元件,放在编辑窗口中,依次连线,组成仿真原理图。
计时工作仿真状态图:
甲乙两队计分工作仿真状态图:
6.总结与体会
6.1总结
1.根据原理和芯片引脚图,分功能设计原理图,并根据接线顺序分步骤验证。
2.容易出现故障为接触不良。
a) 集成块引脚方向预先弯好对准面板的金属孔,再小心插入。
b) 导线的剥线长度与面包板的厚度相适应(比板的厚度稍短)。
c)导线的裸线部分不要露在板的上面,以防短路。
d) 导线要插入金属孔中央。
3.注意芯片的控制引脚必须正确接好
4.检查故障时除测试输入、输出信号外,要注意电源、接地和控制引脚。
5.要注意芯片引脚上的信号与面包板上插座上信号是否一致(集成块引脚与面包板常接触不良)。
6.2体会
这次课程设计历时二个星期左右,通过这两个星期的学习,发现了自己的很多不足,自己知识的很多漏洞,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还急需提高。
回顾起此次单片机课程设计,我仍感慨颇多,的确,从选题到定稿,从理论到实践,在接近两星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说不懂一些元器件的使用方法,对C语言程序设计掌握的不够……通过这次课程设计之后,一定把以前所学过的知识重新温故。
7.参考文献:
附1
/*******************************************************************************
程序名:
篮球记分牌测试程序
编辑时间:
2012-06-14
编辑者:
修改时间:
硬件平台:
MCU:
At89C51晶振:
12MHz
硬件连接:
功能说明:
按下K1键,甲队加1分按下K2键,乙队加1分按下K5交换记分牌
按下K3键,开始/停止比赛按下K4:
调整比赛时间
第1~4位数码管为比赛时间的分和秒,第5~8位数码管分别为两队的分数
测试结果:
OK
注意:
*******************************************************************************/
//头文件
#include
#include
#include"display.h"
#include"delay.h"
#include"key.h"
//变量定义
unsignedchardisp_buff1[4]={1,2,0,0};//比赛时间显示缓冲区
unsignedchardisp_buff2[4]={0};//两队得分显示缓冲区
unsignedcharminute=12,second=0;//比赛时分秒
unsignedcharscore1=0,score2=0;//两队的比赛得分
bitvolatilefinish_flag=0;//比赛完成标志位
unsignedcharnum=0;//定时累加计数
unsignedcharkey=0;//保存键值
//定时器T0初始化函数
voidinitial()
{
TMOD=0x80;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
EA=1;
ET0=1;
TR0=1;
}
/*********************************************************************************
函数名:
数码管显示缓冲区数组处理函数
入口参数:
无
出口参数:
无
*********************************************************************************/
voiddispose(void)
{
disp_buff1[0]=minute/10;//分钟的十位
disp_buff1[1]=minute%10;//分钟的个位
disp_buff1[2]=second/10;//秒钟的十位
disp_buff1[3]=second%10;//秒钟的个位
disp_buff2[0]=score1/10;//甲队得分的十位
disp_buff2[1]=score1%10;//甲队得分的个位
disp_buff2[2]=score2/10;//乙队得分的十位
disp_buff2[3]=score2%10;//乙队得分的个位
}
//主函数
voidmain(void)
{
unsignedchartemp;
initial();//定时器T0初始化
while
(1)
{
key=key_scan();//按键扫描
switch(key)
{
case1:
score1++;//K1按下,甲队加1分
if(score1==100)score1=99;
break;
case2:
score2++;//K2按下,乙队加1分
if(score2==100)score2=99;
break;
case5:
temp=score1;//K5按下,交换记分牌
score1=score2;
score2=temp;
break;
case3:
TR0=~TR0;//K3按下,停止或开始比赛
break;
case4:
if(TR0==0)//停止比赛时,按下K4键可以调整比赛时间
{
minute++;
if(minute==60)
minute=0;
}
break;
default:
break;
}
dispose();
diaplay(disp_buff1,disp_buff2);
if(finish_flag)
{
P1^=0x08;
minute=second=0;
}
}
}
//定时器T0中断服务函数
voidT0_time()interrupt1
{
TH0=(65536-20000)/256;
TL0=(65536-20000)%256;
num++;
if(num==250)
{
num=0;
if(second==0)
{
if(minute==0)//比赛时间到,则停止计时
{
TR0=0;
finish_flag=1;
}
else
{
second=60;
minute--;
}
}
second--;
}
}
/*****************************************************************************
程序名:
8位共阳七段数码管动态显示程序
编辑时间:
2012-06-14
编辑者:
x_z_y
QQ:
812550826
修改时间:
硬件平台:
MCU:
At89c51晶振:
12MHz8位共阳七段数码管
硬件连接:
第1~4位数码管段选————P0位选————P3^0,P3^1,P3^2,P3^3
第5~8位数码管段选————P2位选————P3^0,P3^1,P3^2,P3^3
注意:
*****************************************************************************/
//头文件
#include
#include
#include"delay.h"
#include"display.h"
//变量定义
unsignedcharcodedisptable[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};//定义0~F所对应的十六进制数组disptable
/****************************************************************************
函数名:
一位数码管显示函数
入口参数:
unsignedcharnum对应的第几个数码管
unsignedchardat1,dat2对应要显示的数
出口参数:
无
****************************************************************************/
voidseg_display(unsignedcharnum,unsignedchardat1,unsignedchardat2)
{
P3&=0xf0;//消影
P0=~disptable[dat1];//第1~4位数码管段选
P2=~disptable[dat2];//第5~8位数码管段选
P3=_cror_(0x08,num);//位选
}
/****************************************************************************
函数名:
八位数码管显示函数
入口参数:
unsignedchar*disp_buff1,*disp_buff2对应要显示的数缓冲数组指针
出口参数:
无
****************************************************************************/
voiddiaplay(unsignedchar*disp_buff1,unsignedchar*disp_buff2)
{
unsignedchari;
for(i=0;i<4;i++)//循环扫描数码管
{
seg_display(i,disp_buff1[i],disp_buff2[i]);
delay_ms(3);
}
}
/**************************************************************
程序名:
STC89C52RD+四个独立按键的程序
编辑时间:
2012-06-14
编译环境:
keilc
硬件平台:
STC89C52RD+单片机,11.0592MHZ晶振四个独立按键
功能描述:
sbitK1=P1^0;//K1——甲对加分键
sbitK2=P1^1;//K2——乙队加分键
sbitK3=P1^2;//K3——开始/停止比赛
sbitK4=P1^5;//K4——调整比赛时间
sbitK5=P1^6;//K5——甲乙队交换记分牌
注意:
***************************************************************/
//头文件
#include
#include"delay.h"
#include"key.h"
//硬件定义
sbitK1=P1^0;//K1——甲对加分键
sbitK2=P1^1;//K2——乙队加分键
sbitK3=P1^2;//K3——开始/停止比赛
sbitK4=P1^5;//K4——调整比赛时间
sbitK5=P1^6;//K5——甲乙队交换记分牌
/***************************************************************************************
函数名:
三个独立键盘扫描函数
函数入口:
无
函数出口:
无
***************************************************************************************/
unsignedcharkey_scan(void)
{
unsignedcharkey=0;
if(K1==0)//甲对加分键
{
delay_ms
(2);
if(K1==0)
{
while(K1==0);
key=1;
}
}
elseif(K2==0)//乙队加分键
{
delay_ms
(2);
if(K2==0)
{
while(K2==0);
key=2;
}
}
elseif(K3==0)//开始/停止比赛
{
delay_ms
(2);
if(K3==0)
{
while(K3==0);
key=3;
}
}
elseif(K4==0)//调整比赛时间
{
delay_ms
(2);
if(K4==0)
{
while(K4==0);
key=4;
}
}
elseif(K5==0)//甲乙队交换记分牌
{
delay_ms
(2);
if(K5==0)
{
while(K5==0);
key=5;
}
}
returnkey;
}
//********************延时函数*******************************
//头文件
#include
#include
#include"delay.h"
//延时xus的函数
voiddelay_us(unsignedintxus)
{
while(xus--)
_nop_();
}
//延时xms的函数
voiddelay_ms(unsignedintxms)
{
while(xms--)
delay_us
(1);
}
#ifndef__DISPLAY_H__
#define__DISPLAY_H__
voidseg_display(unsignedcharnum,unsignedchardat1,unsignedchardat2);//一位数码管显示函数
voiddiaplay(unsignedchar*disp_buff1,unsignedchar*disp_buff2);//八位数码管显示函数
#endif
#ifndef__DELAY_H__
#define__DELAY_H__
externvoiddelay_us(unsignedintxus);//微秒延时
externvoiddelay_ms(unsignedintxms);//毫秒延时
#endif
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 项目 篮球 记分牌 单片机 设计