电子记分牌设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
广西工学院鹿山学院单片机课程设计报告
题目:电子记分牌
专业:电子信息工程
班级:电子081、082
姓名:杨静张盼星刘瑞云蒙其业刘杰
电子记分牌的设计
一、 内容提要:
1、引言
现在篮球爱好者越来越多了,大多数比赛中都需要向观众和选手展示比赛得分情况,需要用到记分牌。在目前的市场上,普通记分牌系统都需要几百块,价格比较高。本项目设计的记分牌系统,电路简单,成本较低,灵敏可靠,操作方便,具有较高的推广价值。
2、设计简介
本设计是采用AT89C51单片机设计的一个用于篮球比赛的篮球计时计分器。本设计采用定时器T0中断进行计时,显示部分分为计分显示和计秒显示两部分,均采用液晶显示器(LCD1602)显示,用于显示整个比赛赛程的比赛时间和两队的比分情况。采用四个键盘和外部中断0实现输入功能,用于赛前调节时间、比赛过程中计分、暂停和开始、比赛时间结束以后报警等功能。本设计采用AT89C51单片机作为核心部件,整个系统结构简单、实用性强、操作简便、具有低功耗,可靠性,安全性以及低成本等特点,该设计方案完全满足篮球计分器的设计要求。
现在篮球比赛计时器的设计大都比较的复杂,所用芯片太多,造成整体的价格提高,而且软件设计比较的复杂。导致性价比不是很高,很难得到广泛的推广。我所设计的这个篮球比赛计时器一改他们的缺点,硬件比较的简单,软件也很容易。因此,实用性比较大
二、设计内容及要求:
1、设计任务:
设计并制作一个用于篮球比赛计时计分器,能显示各种比赛时间,并显示比赛比分,能实现每次加、减分和时间修改操作,平时显示时间、时间精确到秒。
2、设计要求:
使用LCD1602显示比分,格式为
00
00B
A :: ,并且显示比赛剩余时间(使用倒计时方式),时间格式为00:00 (分:秒),开始时间为05:00。另设4个按键K1,K2,K3,
K4,K1控制A 队比分加1,K2控制A 队比分减1;K3控制B 队比分加1,K4控制B 队比分减1 。当时间记到0时,停止,锁定按键。
三、基本原理
电子记分牌一般由按键 、单片机(AT89C51)、 液晶显示器(LCD1602)等几个部分组成。单片机作为主控制器,根据输入信号对系统进行相应的控制。液晶显示器显示
显示比分,格式为00
00B
A ::。按键设置用来控制选手的分数(加分和减分)。
四、设计方案
一、单片机的选型
51单片机
虽然51单片机是8位的,采用总线结构,但具有编程控制简便、接口简单、工作可靠,价格经济,能耗少,容易实现系统小型化。
二、计时方案
软件控制
利用MCS-51内部的定时器/计数器进行中断定时,配合软件延时实现计时。该方案节省硬件成本,并且可综合运用定时器/计数器、中断以及程序设计的知识。
五、设计方案的电路框图
六、基于AT89C51单片机的比赛记分牌设计程序如下:
#include
#include ".\LCD1602\LCD1602.h" //调用LCD1602里的函数 #define uchar unsigned char //宏定义
#define uint unsigned int
//宏定义
uchar c=0,e=0,i=0,t=5;
unsigned char ss;
sbit L=P1^3; //提示灯
sbit K1=P1^4; //用于给A对加分
sbit K2=P1^5; // 给A对减分
sbit K3=P1^6; // 给B对加分
sbit K4=P1^7; //给B对减分
sbit K5=P3^0; //比赛开始暂停按键
/**************按键控制分数*****************/
void key()
{
if(TR0==0)
{
K1=1; //中断没开始的时候,K1置1,按键锁定
K2=1; //中断没开始的时候,K2置1,按键锁定
K3=1; //中断没开始的时候,K3置1,按键锁定
if(K4==0)
{
c=0; //中断没开始的时候,A队分数置0
e=0; //中断没开始的时候,B对分数置0
t=5; //中断没开始的时候,倒计时时间置5
L=1; //中断没开始的时候,K1置0
} //在中断结束,按键K4控制分数时间以及提示灯的复位 } //当中断关闭时,K1、K2、K3键锁定,不能使用if(TR0==1)
{
if(K1==0)
{
c++;
while(K1==0); //消抖,按键放开的时候分数加1
} //按键K1控制A队分数加
if(K2==0)
{
c--;
if(c==-1)
{
c=0;
}
while(K2==0); //消抖,按键放开的时候分数减1 } //按键K2控制A队分数减
if(K3==0)
{
e++;
while(K3==0); //消抖,按键放开的时候分数加1 } //按键K3控制B队分数加
if(K4==0)
{
e--;
if(e==-1)
{
e=0;
}
while(K4==0); //消抖,按键放开的时候分数减1 }
} //按键K4控制B队分数减
if(K5==0)
{
if(K5==0)
{
TR0=~TR0; //定时器的启动与暂停
}
while(K5==0); //消抖,按键放开的时候K5操作有效 } //K5控制定时器的启动,进入倒计时
}
/*****************中断函数初始化**********************/
void time()
{
TMOD=0x01; // 0000 0001 中断方式设置,T0设置在方式1 TH0=15536/256; // 初值设定,(65536-x)*12/(12*10^6)=50*10^3 TL0=15536%256;
ET0=1; // 中断允许标志
EA=1; // 中断总开关打开