篮球记分器的设计说明.docx

上传人:b****5 文档编号:6824839 上传时间:2023-01-10 格式:DOCX 页数:23 大小:539.97KB
下载 相关 举报
篮球记分器的设计说明.docx_第1页
第1页 / 共23页
篮球记分器的设计说明.docx_第2页
第2页 / 共23页
篮球记分器的设计说明.docx_第3页
第3页 / 共23页
篮球记分器的设计说明.docx_第4页
第4页 / 共23页
篮球记分器的设计说明.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

篮球记分器的设计说明.docx

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

篮球记分器的设计说明.docx

篮球记分器的设计说明

中北大学

课程设计任务书

 

学生:

学号:

学院:

信息与通信工程学院

专业:

电子信息工程

题目:

专业综合实践之单片机系统部分:

篮球计分器设计

 

指导教师:

王伟职称:

副教授

 

2015年12月28日

中北大学

课程设计任务书

2015/2016学年第一学期

学院:

信息与通信工程学院

专业:

电子信息工程

学生姓名:

学号:

学生姓名:

学号:

学生姓名:

学号:

题目:

专业综合实践之单片机系统部分:

篮球计分器设计

起迄日期:

12月28日~1月8日

课程设计地点:

中北大学

指导教师:

王伟敏娟

系主任:

王浩全

 

下达任务书日期:

2015年12月28日

课程设计任务书

1.设计目的:

在学习专业基础课和专业课的基础上,主要在电子仪器、微机综合设计与实践、单片机与A/D和D/A和光、计、电综合应用等几个方面开展实践活动,巩固所学知识、培养动手能力。

2.设计容和要求(包括原始数据、技术参数、条件、设计要求等):

1.设计一款能够显示篮球比分的记分牌。

2.通过加分按钮可以给A队,或B队加分。

3.设计对调功能,更换场地后,AB队分数互换。

4.增加局数比分功能。

5.增加比赛时间倒计时功能。

6.其他功能。

 

3.设计工作任务及工作量的要求〔包括课程设计计算说明书(论文)、图纸、实物样品等〕:

1)设计说明书符合要求;

2)相应器件的工作原理及应用;

3)系统工作原理图;

4)参考文献原文不少于3篇。

课程设计任务书

4.主要参考文献:

[1]万文略编著.单片机原理及应用[M].:

大学,2004.

[2]德文编著.微型计算机技术[M].北京:

高等教育,2005.

[3]建勋编著.C语言程序设计教程[M].北京:

清华大学,2008.

[4]于海生编著.计算机控制技术[M].北京:

机械工业,2007.

[5]唐俊翟编著.单片机原理及应用[M].北京:

冶金工业,2003.

[6]彭为编著.单片机典型系统应用设计实例精讲[M].北京:

电子工业,2006.

5.设计成果形式及要求:

设计说明书及相关电路图

6.工作计划及进度:

12月28日~12月31日:

查阅资料;

1月1日~1月5日:

方案设计、实验验证;

1月6日~1月7日:

完成课程设计说明书;

1月8日:

答辩。

系主任审查意见:

签字:

年月日

 

1概述

1.1设计意义

目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。

导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。

更不用说自动控制领域的机器人、智能仪表、医疗器械了。

因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。

通过此次基于单片机设计的篮球计时计分系统,我们可以更清楚详细的了解单片机程序设计的基本指令功能、编程步骤和技巧来讲述单片机编程,并对AT89S51单片机的结构和原理进行讲述,以及基于单片机开发应用的相关芯片的工作原理,和相关外围电路的设计和调试过程进一步了解,有助于今后的工作和学习生活。

本次设计用由AT89S51编程控制LCD作显示的球赛计时计分系统。

该系统具有赛程时间暂停,及时刷新甲、乙双方的成绩等功能。

它具有价格低廉,性能稳定,操作方便并且易于携带等特点。

广泛适合各类学校或者小型团体作为赛程计时计分。

1.2系统的主要功能

本系统有三项主要主要功能:

1.设计一款能够显示篮球比分的记分牌。

2.通过加分按钮可以给A队,或B队加分。

3.设计对调功能,更换场地后,AB队分数互换。

4.增加局数比分功能。

5.增加比赛时间倒计时功能。

2硬件方案设计及描述

2.1方案选择及设计思想

通过分析之后我们觉得此次设计主要是两大模块,一是系统显示模块,二是单片机设计模块,在显示模块的设计中,开始想到了常用的LED显示,但是考虑的后续硬件实现的复杂性(超过10以上的LED实物连接将十分复杂),于是选取了方便但是没有接触过的LCD显示,因此也导致了一定程度的难度,在选取单片机方面,我们选取了课堂上讲授的51单片机,对于简单的输入和输出控制,51机显然最合适,51单片机是8位的,采用总线结构,但是具有变成控制简便,接口简单,工作可靠,价格经济,能耗少,容易实现系统小型化等特点。

因为篮球计分系统电路结构比较简单,只有按键控制和数码显示两个部分,P0口接12个开关,分别作为比分的加一,加二,加三,减一,设置节次,暂停,交换场地的按键控制。

P2口和P3口控制LCD的比分及时间显示。

该系统包括AT89S51,时钟及复位电路,按键电路,及LCD显示器。

该电路控制简单,清晰明了,用LCD液晶显示,避免了用LED的复杂接线,便于实体硬件电路的焊接。

2.2原理框图

1602aLCD

图1.1原理图

2.3工作原理

LCD显示器

该显示器的RS,RW,E端与P2相连,引脚的作用分别是:

RS=0输入指令,RS=1输入数据,RW=0向LCD写入指令或数据,RW=1从LCD读取信息,E是使能信号。

D0~D7与P3相连是数据总线。

时钟电路

时钟电路在单片机系统中起着非常重要的作用,是为保证系统正常工作的基础,在一个单片机系统中,时钟是保障系统正常工作的基准震荡定时信号,主要有晶振和外围电路组成,晶振频率大小决定单片机的快慢,我们这里采用的是12MHZ,另外有2个30P的电容。

复位电路

单片机系统的复位电路我们采用的是上电加按钮的复位电路形式,电阻采用220欧的阻值,采用22μ的电容。

按键电路

本设计共有12个设置按键,分别为+1,+2,+3,-1,暂停,设置节次按键和交换场次按键。

2.4电路图

 

3软件设计流程及描述

3.1系统模块层次结构图

3.2程序流程图

 

N

Y

 

 

3.3源程序代码

#include

#include"intrins.h"//_nop_();延时函数用

#defineucharunsignedchar

#defineuintunsignedint

#defineLcd_PortP3//定义数据端口

#defineKEY_IOP0//键盘接口

sbitRS=P2^1;//定义和LCM的连接端口

sbitRW=P2^2;

sbitE=P2^5;

sbitBusy=P3^7;

sbitspeaker=P1^0;

uchardatakeytemp,key;

ucharL=0;

uchark=0;

ucharc=0;

ucharb=0;

ucharj=0;

uchare=1;

uchard=0;

ucharhour=24;

ucharhour1=0;

ucharmin=11;

ucharsec=59;//赋初值

uchardataflag=0x00;

bitflag_key=0;

ucharcodeLcddata[]={"0123456789:

"};

//ucharcodeLcddata[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff,0xbf};

/******************************************************************************************

*函数名称:

Timer0Init

*功能描述:

定时器0初始化

******************************************************************************************/

voidTimer0Init(void)

{

TMOD=0x11;

TH0=0x3c;

TL0=0xb0;

TH1=-10300/256;

TL1=-10300%256;//25MS定时初值(T1计时用)

ET0=1;

ET1=1;

TR0=1;

TR1=1;

EA=1;

}

/******************************************************************************************

*函数名称:

IsrTimer0

*功能描述:

T050mS中断程序

******************************************************************************************/

voidIsrTimer0(void)interrupt1using1//T050mS中断程序

{

staticucharcount=0;

TH0=0x3c;

TL0=0xb0;

count++;

if(count==20)//定时1s时间到

{

count=0;

sec--;

if(sec==0)//1分钟时间到

{

if(min==0)//1小时时间到

{

min=0;

EA=0;

speaker=~speaker;

}

else

{

sec=59;

min--;

}

}

}

}

voidIsrTimer1(void)interrupt3using3//T150mS中断程序

{uchari=0,m=0,a=0;

staticucharta20ms=0;

TH1=-10300/256;

TL1=-10300%256;

ta20ms++;

if(ta20ms==1)//定时1s时间到

{

ta20ms=0;

hour1--;

if(hour1==-1)//1分钟时间到

{

hour--;hour1=99;

if(hour==0)

{

hour=24;hour1=0;

k=1;

//EA=0;

L=1;

speaker=~speaker;

while(a<=2){

while(m<=225){for(i=0;i<=225;i++)

a++;m++;}}

speaker=1;}

}

}

}

/******************************************************************************************

*函数名称:

Delay

*功能描述:

延时子程序,延时(1MS*t)S

******************************************************************************************/

voidDelay(uchart)

{

uchara;

while(t--!

=0)

{

for(a=0;a<125;a++);

}

}

/******************************************************************************************

*函数名称:

Read_Busy

*功能描述:

读忙信号判断

******************************************************************************************/

voidRead_Busy(void)

{

uchari=50;

Lcd_Port=0xff;

RS=0;

RW=1;

E=1;

while((i--)&&Busy);

E=0;

}

/******************************************************************************************

*函数名称:

Write_Comm

*功能描述:

写指令函数ok

******************************************************************************************/

voidWrite_Comm(ucharlcdcomm)

{

Read_Busy();

RS=0;

RW=0;

E=1;

Lcd_Port=lcdcomm;

E=0;

}

/******************************************************************************************

*函数名称:

Write_Char

*功能描述:

写字符函数ok

******************************************************************************************/

voidWrite_Char(uintnum)//写字符函数

{

Read_Busy();

RS=1;

RW=0;

E=1;

Lcd_Port=Lcddata[num];

E=0;

}

/******************************************************************************************

*函数名称:

Write_Data

*功能描述:

写数据函数ok

******************************************************************************************/

voidWrite_Data(ucharlcddata)

{

Read_Busy();

RS=1;

RW=0;

E=1;

Lcd_Port=lcddata;

E=0;

}

/******************************************************************************************

*函数名称:

Init_LCD

*功能描述:

初始化LCD

******************************************************************************************/

voidInit_LCD(void)

{

//Delay(400);//稍微延时,等待LCM进入工作状态

Write_Comm(0x38);//8位2行5*8

Write_Comm(0x0c);//显示开/关,光标开闪烁开

Write_Comm(0x01);//清显示

Write_Comm(0x06);//文字不动,光标右移

Write_Comm(0x02);//光标归位

}

/******************************************************************************************

*函数名称:

Show_Time

*功能描述:

LCD上显示当前时间

******************************************************************************************/

voidShow_Time(void)

{

Write_Comm(0x80+0x08);//显示首地址

Write_Char(hour/10);//显示小时

Write_Char(hour%10);

Write_Char(10);//显示:

Write_Char(hour1/10);//显示小时

Write_Char(hour1%10);

Write_Comm(0x80+0x4b);

Write_Char(min/10);//显示分钟

Write_Char(min%10);

Write_Char(10);//显示:

Write_Char(sec/10);//显示秒

Write_Char(sec%10);

Write_Comm(0x80+0x45);

Write_Char(c/10);

Write_Char(c%10);

Write_Comm(0x85);

Write_Char(d/10);

Write_Char(d%10);

}

//***************按键扫描函数/*************

voidkeyscan()

{

uchari,t=0xef,temp=0;//11101111

KEY_IO=0x0f;

keytemp=(~KEY_IO)&0x0e;

if(keytemp!

=0)//00000000;00001000;00000100;00000010;00000001;

{

Delay(20);

for(i=0;i<4;i++)

{

KEY_IO=t;

keytemp=(~KEY_IO)&0x0e;

if(keytemp!

=0&flag_key==0)

{

flag_key=1;

switch(keytemp)

{

case0x08:

key=0*3+i;break;

case0x04:

key=1*4+i;break;

case0x02:

key=2*4+i;break;

default:

break;

}

switch(key)

{

case0:

{c++;j=1;if(c>=99){Write_Comm(0x84);Write_Data('1');d=0;}b=0;}break;

case1:

{c++;c++;j=1;if(c>=99){Write_Comm(0x84);Write_Data('1');d=0;}b=0;}break;

case2:

{c++;c++;c++;if(c>=99){Write_Comm(0x84);Write_Data('1');d=0;}j=1;b=0;}break;

case4:

{d++;if(d>=99){Write_Comm(0x80+0x44);Write_Data('1');c=0;};b=1;j=0;}break;

case5:

{d++;d++;if(d>=99){Write_Comm(0x80+0x44);Write_Data('1');c=0;}b=1;j=0;}break;

case6:

{d++;d++;d++;if(d>=99){Write_Comm(0x80+0x44);Write_Data('1');c=0;}b=1;j=0;}break;

case8:

{if(b==1){d--;if(d==0)d=0;};if(j==1)c--;}break;

case9:

if(k==1)hour=24;EA=~EA;speaker=1;L=0;k=0;break;

case10:

e++;if(e==5)e=1;Write_Comm(0x80+0x0d);Write_Char(e%10);break;

case3:

{Write_Comm(0x80);

Write_Data('C');

Write_Data('B');

Write_Data('A');

Write_Data(':

');

Write_Comm(0x80+0x0d);

Write_Char(e%10);

Write_Data('S');

Write_Data('t');

Write_Comm(0x80+0x40);

Write_Data('N');

Write_Data('B');

Write_Data('A');

Write_Data(':

');

temp=c;

c=d;

d=temp;

}break;

case7:

{Write_Comm(0x80);

Write_Data('N');

Write_Data('B');

Write_Data('A');

Write_Data(':

');

Write_Comm(0x80+0x0d);

Write_Char(e%10);

Write_Data('S');

Write_Data('t');

Write_Comm(0x80+0x40);

Write_Data('C');

Write_Data('B');

Write_Data('A');

Write_Data(':

');

temp=c;

c=d;

d=temp;}break;

default:

break;

}

}

t=(t<<1)|0x01;

}

}

elseflag_key=0;

}

/******************************************************************************************

*函数名称:

main

*功能描述:

主函数

******************************************************************************************/

voidmain(void)

{

Init_LCD();//初始化LCM

Timer0Init();//初始化定时器

Write_Comm(0x80);

Write_Data('N');

Write_Data('B');

Write_Da

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

当前位置:首页 > 自然科学 > 数学

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

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