您好,欢迎来到爱问旅游网。
搜索
您的当前位置:首页毕业设计基于AT89S52单片机的篮球计时计分器

毕业设计基于AT89S52单片机的篮球计时计分器

来源:爱问旅游网



毕业设计

摘要

单片机,亦称单片微电脑或单片微型计算机。它是把中央处理器(

CPU)、随机存取存储器(RAM)、只读存储器(ROM)、输入/输出端

口(I/0)等主要计算机功能部件都集成在一块集成电路芯片上的微

型计算机。

本设计是基于AT89S52单片机的篮球计时计分器,利用7段共

LED作为显示器件。在此设计中共接入了1个四位一体7段共阴

LED显示器,2个两位一体7段共阴LED显示器,前者用来记录赛

程时间,其中2位用于显示分钟,2位用于显示秒钟,后者用于记录

甲乙队的分数,每队2 LED 显示器显示范围可达到0~99 分。赛程

其次,为了配合计时器和计分器校正调整时间和比分,计时采用倒计时方式,比赛开始时启动计时,直至计时到零为止。

在本设计中设立了7 个按键,用于设置,调整时间,启动,调整分数

显示,安装方便。

Keil uVision3 来进行编译,再生成的HEX 文件装入芯片中,采用

proteus软件来仿真,检验功能是否能够正常实现。

1.概述.......................................................................................................3

1.1背景知识介绍............................................................................3

1.2设计内容....................................................................................3

1.3计任务和要求...............................................................................4

1.4 设计意义..................................................................................4

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



2.1系统总体方案设计......................................................................52.2硬件电路设计............................................................................62.2.1时钟电路模块.....................................................................7
2.2.2复位电路模块....................................................................7
2.2.3显示模块.............................................................................8
2.2.4报警模块............................................................................9
2.2.5总硬件电路设计...............................................................10
3软件设计..............................................................................................113.1软件总体设计方案....................................................................11

3.2.1 延时模块设计.....................................................................133.2 软件设计具体过程....................................................................12

www.

3.2.5减分子程序.......................................................................16 3.2.6调整时间子程序..............................................................17 3.2.7 半场交换比分子程序....................................................19 3.2.8比赛暂停子程序............................................................20 3.2.9 中场指示灯程序........................................................21 3.2.10主程序............................................................................224. PROTEUS仿真24
......................................................................................................................




.........................................................................................................1.概述....................................................................................................................31.1背景知识介绍............................................................................31.2设计内容....................................................................................31.3计任务和要求...............................................................................41.4 设计意义..................................................................................42.系统总体方案及硬件设计.....................................................................52.1系统总体方案设计......................................................................52.2硬件电路设计............................................................................6

2.2.2 复位电路模块....................................................................72.2.1 时钟电路模块.....................................................................7

www.

3软件设计..............................................................................................113.1软件总体设计方案....................................................................113.2软件设计具体过程....................................................................123.2.1延时模块设计.....................................................................13
3.2.2数码管动态刷新显示程序................................................13
3.2.3T0中断程序........................................................................15
3.2.4加分子程序....................................................................16
3.2.5减分子程序.......................................................................16




3.2.6调整时间子程序..............................................................17

3.2.7 半场交换比分子程序....................................................19

3.2.8比赛暂停子程序............................................................20

3.2.9 中场指示灯程序........................................................21

3.2.10主程序............................................................................22

4. PROTEUS仿真..................................................................................24

4.1PROTEUS简介.............................................................................24

4.2仿真过程.....................................................................................24

5.课程设计体会......................................................................................28

1 源程序...........................................................................................30参考文献..................................................................................................29

40

1. 概述

1.1 背景知识介绍

体育比赛计时计分系统是对体育比赛过程中所产生的时间,比分等数据进行快速采集记录,加工处理,传递利用的信息系统。根据不同运动项目的不同比赛规则要求,体育比赛的计时计分系统包括测量类,评分类,命中类,制胜类得分类等多种类型。

篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统。篮球比赛的计时计分系统由计时器,计分器等多种电子设备组成,同时, 完善的篮球比赛计时计分系统设备应根据目前高水平篮球比赛要求,




能够与现场成绩处理,现场大屏幕,电视转播车等多种设备相联,以

便实现高比赛现场感,表演娱乐观众等功能目标。

由于单片机的集成度高,功能强,通用性好,特别是它具有体积小,

重量轻,能耗低,价格便宜,可靠性高,抗干扰能力强和使用方便等

独特的优点,使单片机迅速得到了推广应用,目前已经成为测量控制

应用系统中的优选机种和新电子产品的关键部位。世界各大电气厂家,

测控技术企业,机电行业,竞相把单片机应用于产品更新,作为实现

数字化,智能化的核心部件。篮球计时计分器就是以单片机为核心的

计时计分系统,由计时器,计分器,综合控制器和24秒控制器等组

成。

1.2 设计内容

本设计是基于AT89S52 单片机的篮球计时计分器,利用7 段共阴LED 作为显示器件。在此设计中共接入了1 个四位一体7 段共阴LED 显示器,2 个两位一体7 段共阴LED 显示器,前者用来记录赛程时间,其中2 位用于显示分钟,2 位用于显示秒钟,后者用于记录

其次,甲乙队的分数,

在本设计中设立了7 个按键,用于设置,调整时间,启动,调整分数

和暂停等功能。采用单片机控制是这个系统按键操作使用简洁,LED

显示,安装方便。

1.3计任务和要求

任务:设计一个用于赛场的篮球计时计分器。

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

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

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

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

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



6、当比赛时间需要回倒时,能通过按键实现回表。
7、加分有误时可通过按键实现减分调整。

1.4 设计意义

课程设计使我们进一步熟悉和掌握了单片机的内部结构和工作原理,了解了单片机应用系统设计的基本方法和步骤,掌握了单片机仿真软件Proteus的使用方法,键盘和显示器在的单片机控制系统中的应用以及撰写课程设计报告的方法。此次设计很好的将书本上的理论知识和实践有机的联系了起来,是我们对理论知识有了更进一步的掌握,锻炼了我们的动手能力,同时也让我们懂得了理论与实际相结合的意义。为以后的工作和学习提供了宝贵的经验。

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

2.1 系统总体方案设计

作就可以完成相应的计时计分控制和显示功能。这四个模块的相互连接如下图(图1)所示:





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

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




2.2 硬件电路设计

Commented [dlf1]: 已经出现3 次相同的话

单片机AT89S52简介

AT89S52是一个低功耗,高性能CMOS8 位单片机,片内含8kBytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash 存储单元,功能强大的微型计算机的AT89S52可为许多嵌入式控制应用系统提供高性价比的解决方案。

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

30
31
29
1
2
3
4
5
6
7
8
P1.7

P3.7/RD

P3.6/WR

P3.5/T1

P3.4/T0

P3.3/INT1

P3.2/INT0

P3.1/TXD

P3.0/RXD

P2.7/A15

P2.6/A14

P2.5/A13

P2.4/A12

P2.3/A11

P2.2/A10

P2.1/A9

P2.0/A8

P0.7/AD7

P0.6/AD6

P0.5/AD5

P0.4/AD4

P0.3/AD3

P0.2/AD2

P0.1/AD1

P0.0/AD0

17

16

15

14

13

12

11

10

28

27

26

25

24

23

22

21

32

33

34

35

36

37

38

39

2 AT89S52单片机引脚图

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

Commented[dlf2]: 此处与上文不连贯



2.2.1时钟电路模块

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

常工作的基础。在一个单片机应用系统中,时钟是保障系统正常工作

的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小

决定了单片机系统工作的快慢。为达到振荡周期是12MHZ的要求,这

里要采用12MHZ的晶振,另外有两个22P的电容,两晶振引脚分别连

XTAL1XTAL2振荡脉冲输入引脚。具体连接图如

3所示:

C1

33p

29
30
31

PSEN ALE
EA

晶振电路

P2.0/A8

21

22

P2.1/A9

23

P2.2/A10

24

P2.3/A11

25

P2.4/A12

26

P2.5/A13

27

P2.6/A14

28

P2.7/A15

1 P1.0
2
P1.1
3
P1.2
4

5 3 P1.3

P1.4
6 P1.5
7 P1.6
8
P1.7

P3.0/RXD

10

11

P3.1/TXD

12

P3.2/INT0

13

P3.3/INT1

14

P3.4/T0

15

P3.5/T1

16

P3.6/WR

17

P3.7/RD

AT89C51



2.2.2复位电路模块

复位是单片微机的初始化操作,其主要功能是把PC初始化为

0000H,使单片微机从0000H单元开始执行程序。除进入系统的正常

初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,

为摆脱困境,可以按复位键以重新启动,也可以通过监视定时器来强

迫复位。RST引脚是复位信号的输入端。复位电路在这里采用的是上U1
+按钮复位电路形式,具体连接电路如图4C3 19 39 XTAL1 P0.0/AD0 P0.1/AD1 38

P0.2/AD2 37R6 22p 18 XTAL2 P0.3/AD3 36

P0.4/AD4 35

200R K5 P0.5/AD5 P0.6/AD6 34 33

P0.7/AD7 32

C1 P2.0/A8 P2.1/A9 21 224
复位电路 P2.6/A14 P2.7/A15 28

2.2.3显示模块 1 P1.0 P3.0/RXD 10 2 P1.1 P3.1/TXD 11

本设计采用共阴极数码显示器,通常,共阴极接低电平(一般接3 P1.2 P3.2/INT0 12 4 13地)

电平时,
,其它管脚接段驱动电路输出端。当某段驱动电路的输出端为高

该端所连接的字符导通并点亮,根据发光字段的不同组合可 5 6 P1.3 P1.4 P1.5 P3.3/INT1 P3.4/T0 P3.5/T1 14 15

显示出各种数字或字符。同样,要求段驱动电路能提供额定的段导通7 P1.6 P3.6/WR 16

电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。8 P1.7 P3.7/RD 17

本次设计在显示模块用到的是一个4位一体和2个两位一体共阴极数AT89C51码管,共有8个代码输入口和8个位选输入口,采用排阻提供上拉电

流数码管,以保证有足够大的电流点亮数码管,采用动态驱动,使各



位数码管逐个轮流受控显示,这就是动态驱动,由于扫描速度极快,显示效果与静态驱动相同,其具体图形如下图56所示

5

www.taodocs.com

6




2.2.4报警模块

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

R3 Q2 LS1

NPN

0R1

SPEAKER

7

2.2.5总硬件电路设计




www.taodocs.com

3软件设计

在设计程序之前,我们首先要对单片机应用系统预完成的任务进

行深入的分析,明确系统的设计任务、功能要求和技术指标。其次,

要对系统的硬件资源和工作环境进行分析。这是单片机应用系统程序

设计的基础和条件。

3.1软件总体设计方案

本次单片机毕业软件设计部分采用模块化程序设计,程序部分由

主程序、T0中断程序、扫描显示子程序、计时加(减)1秒的子程序、



暂停子程序、快表和回表子程序、延时子程序等组成.其程序流程图如图910


www.taodocs.com

9主程序流程图





www.taodocs.com

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

3.2软件设计具体过程

软件设计部分采用模块化程序设计,用C语言编写。Keil是美国KeilSoftware 公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。

KeilC51 软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51 生成的目标代码效率非常之高,多数语句




生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级

语言的优势。

程序部分由主程序、T0中断程序、扫描显示子程序、计时加(减)

秒的子程序、暂停子程序、快表和回表子程序、延时子程序等组成。

3.2.1延时模块设计

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

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

时时间

while(t--)

{

调整延时的单位时间

unsigned int i;

时间越短,精度越高 }

}

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

voiddisplay(int i,int j,int x,int y) 变量ijxy分别为分,秒,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;

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;

点亮 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);

}

本设计中各个数码管采用动态驱动,使各位数码管逐个轮流受控显示,

由于扫描速度极快(本实验中大约每20 毫秒刷新一次),所以显示效

果与静态驱动相同。

3.2.3T0中断程序

voidt0(void) interrupt 1本设计调用定时器T0,计时单位

为一秒




{
TH0=0xb1; 对定时器T0送入计数初值,由于 TH0=0xb;
TL0=0x10; TL0=0x10 故定时器定时为20毫秒,即每
if(n==0) 20 毫秒调用一次voidt0(void) interrupt 1
{
n=60;

m--;
}

if(i==50) i++;

来实现计时
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.2.5减分子程序

void keyjianfen1()

减分按键检测子程序,其基本算法及

功能与加分
{ 相同 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.2.6调整时间子程序

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

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;
}

} }

倒计加快,

即当回表
回过的时候,按此键调整时间 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 作用为

表和快表 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.2.7 半场交换比分子程序

voidkey3()
{
int temp; 定义中间变量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.2.8 比赛暂停子程序

void key4() {

中断
{
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)

break;
}
}
}
}
}
}




3.2.9 中场指示灯程序

voidover()
{
if((m==0)&&(n==0)) mn均为0的时候,通过变量jie的值判断比赛
{ 是否结束
if(jie>1)
如果jie>1,说明半场到了,比赛没有结束, { m=2,n=0,关中断,再次按下暂停键时候

继续倒计时

是蜂鸣器

m=2; 同是T1=1

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;
}

}

}

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.2.10主程序

void main()
{ TMOD=0x01; 首先设置定时器工作方式
EA=1;

电平拉高
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) 比赛分数子程序,所以仅当中场时

调用
{

over()

shijian();

key4();
over();
}
}




4. PROTEUS仿真

4.1PROTEUS 简介

Proteus是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:
实现了单片机仿真和SPICE电路仿真相结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。

支持主流单片机系统的仿真。目前支持的单片机类型有:

ARM7(LPC21xx) 8051/52 系列、AVR 系列、PIC10/12/16/18 系列、

提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点

等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在HC11 系列以及多种外围芯片。

译和调试环境,如Keil C51 uVision2MPLAB 等软件。该软件仿真系统中,也必须具有这些功能

SPICE 分析于一身的仿真软件,功能极其强大。

4.2仿真过程

接通电源,计时显示即开始倒计时工作,上半场指示灯亮,计时初始设计为2分钟,按下A+1键实现对A的加分,每按下一次加1分,如图11.




RP1
RESPACK-8

R1
1k

C1

U1

P0.0/AD0
P0.1/AD1
P0.2/AD2


A+1

1

2

3
4

5
6

7

8
9

计时显示

1nF

19
X1

XTAL1

39
38
37

C2

CRYSTAL 18

XTAL2

P0.3/AD3

36

9

RST

P0.4/AD4
P0.5/AD5

35
34

1nF

P0.6/AD6

33
32

R2

P0.7/AD7

21
22

P2.0/A8
P2.1/A9

C3 29

1uF 30

31

PSEN
ALE
EA

P2.2/A10
P2.3/A11
P2.4/A12

23
24
25


P2.5/A13

26
27

1
2
3
4
5
6
7
8

P1.0/T2
P1.1/T2EX P1.2
P1.3
P1.4
P1.5
P1.6
P1.7

P2.6/A14
P2.7/A15

28

10k

P3.0/RXD

10

P3.1/TXD

11

B+1

P3.2/INT0
P3.3/INT1

12
13

P3.4/T0

14

回表按键

P3.5/T1

15

P3.6/WR

16

时间快进

P3.7/RD

17

A-1

AT89C52

B-1

暂停/启动

GND

D1

D2

R3

Q2

LS1

LED-RED

LED-RED

NPN

0R1

SPEAKER

11

RP1同样可实现AB的加减分,按下暂停/启动键可实现暂停和启动。

A+1

B+1

回表按键

时间快进

A-1

B-1

暂停/启动

GND

12



13

上半场结束后,停止计时,蜂鸣器报警,按下暂停\启动按键启动下半场计时,同时可实现甲队和乙队交换分数,下半场指示灯亮。

通过这几天的单片机的实训,我在理论的基础上更深刻的掌握了单片机的深层内容及实际生活中的应用,实训锻炼了自己动手能力和思维能力,还有在软件方面的编程能力,让我受益匪浅,同时也暴露出一些平时学习上的问题,让我深刻反思。这些问题的发现将为我以后的学习和工作找明道路,查漏补缺为进一步学习作好准备。

通过实训,让我更熟悉掌握了KeiluVision3, proteus ISIS这些应用程序的运用,让我懂得了如何编写一些简单的程序,学会了如何制但在中间暴露出很多问作单片机应用程序,还有焊接和程序下载,。

题:对平时上课讲的理论知识没有完全掌握消化,到了实际操作中还得请教同学,在焊接中焊接的基本工夫掌握不到家,手上工夫还是很欠缺的,使得电路板不是很美观。




这些问题的发现,有助于提高我在以后的工作和学习中对此类问题的认识,确保不在同一问题上再次犯错。严谨求实、踏实务实,是我这次实训的深刻总结。

做课程设计的这几天翻阅了很多书,也上了很多网站去寻找自己需要的资料。这种寻找有很强的目的性,只是为了自己选定的课题内 所以除了自己课题以外的其他方面几乎还是一无所知。这容而查阅,
让我深刻的认识到了自己专业知识的贫乏。
为我对自己大四生活的规划敲响了警钟。我对单片机的学习不会因为课程设计的结束而结束,在接触的众多资料里,做设计只是走马观花般的点到。

通过单片机课程设计,我加深了对单片机理论的理解,学回了 而且我还学会了如何去培养我怎样将理论很好地应用到实际当中去,
们的不畏困难的挑战精神,从而不断地战胜自己,超越自己,我在这一设计过程中,学会了坚持不懈,不轻易言弃。设计过程,也好比是

挑战,勇敢过,也战胜了,胜利的钟声也就一定会为我们而敲响。我们人类成长的历程,常有一些不如意,

参考文献

3】刘法治,常用电子器件及典型芯片应用技术:机械工业出版社,

2007
4】何立民,MSC--51系列单片机应用系统设计:北京航空航天大 学出版社,1993

1 源程序

#include<REGX51.H> //#include <REGX51.H>为头文件P1口各

位分别用P1_0等表示

code unsigned




seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
// {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}
//分别对应数码管显示的字形09int
m=1,n=60,x=0,y=0,i=0,jie=2,zidong=1,bujin=1,zanting=0,chuzanting=0; //定义全局变量mnxyijie,zidong,bujin,zanting,chuzanting
//并初始化,其中mn分别表示分钟与秒计时,


x,y 分别表示甲乙//两队的分数,其余中间变量

整暂停时间

{ void delay(int t)

while(t--)
{
unsignedint i;
for(i=0;i<200;i++);
}
}

void display(int i,int j,int x,int y)

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




{
if(jie==1&&bujin!=2) //中间变量jie==1时,为上半场,对P1赋值
P1=0xbf; //P1=0xbf,P1=10111111B,点亮对应上半场指示灯

P2=0xfe; //数码管动态刷新显示程序P2=11111110,i为分钟
P0=seg[i%100/10]; //刷新显示时间显示分钟十位,调

用延时程序,delay(1);

//延时数码管的点亮

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;

时点亮
P0=seg[x%100/10];
delay(1);
P2=0xff;
P0=0;

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




P0=seg[x%10];
delay(1);
P2=0xff;
P0=0;

P2=0xbf; / /同理,动态刷新乙队分数十位并延时点亮
P0=seg[y%100/10];
delay(1);

P0=0;
P2=0xff;

点亮 P2=0x7f;

P0=seg[y%10];
delay(1);
P0=0;
P2=0xff;
}

voidt0(void) interrupt 1 //调用定时器T0 基本计时单位秒




{ TH0=0xb1; //利用定时器T0,送入计数初值TH0=0xb1;TL0=0x10;
TL0=0x10; //定时器定时单位为20毫秒if(n==0)
{ //分钟与秒时间调整当秒减到0以后分钟减1
n=60;m--;
}
i++;

{ //利用中间变量i i 值为50 if(i==50)

n--;

i=0; 50*20 毫秒=1

}
display(m,n-1,x,y); //调用动态刷新显示程序
}

voidkeyjiafen1() //加分按键子程序,在主程序中不断调用该子程序
{ //当检测到甲队加分按键按下时,对应加分




if(RXD==0)
{ //调用延时子程序实现消除按键抖动功能,即,当
delay(1); //检测到按键按下时候,延时,按键仍按下,说明按键
if(RXD==0) //确实按下,非抖动,甲队对应加分
{
while(RXD==0);

} x++;

if(TXD==0)

按下,并加分 }

{
delay(1);
if(TXD==0)
{
while(TXD==0);
y++;
}
}




}
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--;
}
}
}





void key2()

//显示时间调整程序,即回表和快


{
if(INT0==0)
{ //在比赛中有时经常需要回表,故写此程序
delay(10);
if(INT0==0) //回表子程序,检测到INT0按下时,使时间回倒

chuzanting==0; // chuzanting==0; zanting=1;为附{

来调用暂停加变量,当回表按键

n++;
if(n==60)
{
m++;
n=1;
}
}
}




if(INT1==0) //快表子程序,检测到INT1按下时,使倒计加快,
{ //通常情况下与回表子程序配合使用,即当回表
//回过的时候,按此键调整时间
delay(10); //chuzanting==0; zanting=1;作用同上
if(INT1==0)

chuzanting==0; {

n--;

} zanting=1;

}
}
voidshijian() / /该程序使回表和快表按键松开时候能自动暂停
{
if(zanting==1&&INT0==1&&INT1==1&&chuzanting==0)
{
EA=0; //




zanting==1&&INT0==1&&INT1==1&&chuzanting==0作用为
zanting=0; //当按键松开的时候,调用暂停程序条件 chuzanting=0; //zanting=0;chuzanting=0,初始化,以便下次回表和快表 while(1) //按键松开时候仍能调用暂停程序
{
display(m,n,x,y);
if(P1_0==0) //检测暂停键按下,开中断,跳出暂停

{

delay(1);

EA=1;
break;
}
}
}
}
}
voidkey3() //半场交换场地时自动交换双方比赛分数子




程序{
int temp; //定义中间变量temp,检测到有按键按下时候
if(zidong==1&&jie==1) //交换甲队,乙队比赛分数
{
temp=x; // zidong==1&&jie==1是判断半场的条件 //
y=temp;
display(m,n,x,y);

}

bujin=0; zidong=0;

}

void key4()

//比赛暂停子程序

{
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)

开中断,计时数码管

跳出死循环
if(P1_0==0)
{
while(P1_0==0);
EA=1;
break;
}
}




}
}
}
}

voidover() //比赛结束及及点亮下半场指示灯程序
{

if((m==0)&&(n==0)) jie 的值判断比赛


//m

有结束, {

{ //jie--,关中断,再次按下暂停键时候继续倒计时
m=2;
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)
{

EA=1;
while(P1_0==0);

}
jie--;
}
if(jie==1&&bujin==2) //如果jie==1&&bujin==2,说明比赛结束了,令EA=0 { //比关闭中断,比赛秒

表不再走动,同时不短刷新数码管, EA=0;
//全场比赛结束蜂鸣器开始报警
m=0;




n=0;
T1=1;
delay(400);
T1=0;
P1=0x3f; //P1=0x3f上下半场指示灯同时点亮,比赛结束
while(1)
display(m,n,x,y); //不断刷新数码管
}

}

}

{ TMOD=0x01; EA=1; void main()

ET0=1;
TH0=0xb1;//定时器送计数初值,EA=1,开中断,P3口电平拉高
TL0=0x10; //P1=0x7f,上半场指示灯点亮 TR0=1;
P3=0xff;
P1=0x7f;
T1=0;




while(1)
{ //通过while(1),反复调用循环体内的子程序
keyjiafen1();//执行相应的功能
keyjianfen1();
key2();
if(zidong==1) //zidong==1key3()执行条件,仅当半场结束时候执行
key3();

if(n==18&&bujin==0) {

if 语句的执行条件 }

shijian();

key4();
over();
}
}





www.taodocs.com

Copyright © 2019- awee.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务