基于AT89S52的篮球足球比赛计时计分器仿真及实物制作Word文档下载推荐.docx

上传人:b****2 文档编号:12972681 上传时间:2022-10-01 格式:DOCX 页数:31 大小:1.79MB
下载 相关 举报
基于AT89S52的篮球足球比赛计时计分器仿真及实物制作Word文档下载推荐.docx_第1页
第1页 / 共31页
基于AT89S52的篮球足球比赛计时计分器仿真及实物制作Word文档下载推荐.docx_第2页
第2页 / 共31页
基于AT89S52的篮球足球比赛计时计分器仿真及实物制作Word文档下载推荐.docx_第3页
第3页 / 共31页
基于AT89S52的篮球足球比赛计时计分器仿真及实物制作Word文档下载推荐.docx_第4页
第4页 / 共31页
基于AT89S52的篮球足球比赛计时计分器仿真及实物制作Word文档下载推荐.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

基于AT89S52的篮球足球比赛计时计分器仿真及实物制作Word文档下载推荐.docx

《基于AT89S52的篮球足球比赛计时计分器仿真及实物制作Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于AT89S52的篮球足球比赛计时计分器仿真及实物制作Word文档下载推荐.docx(31页珍藏版)》请在冰豆网上搜索。

基于AT89S52的篮球足球比赛计时计分器仿真及实物制作Word文档下载推荐.docx

按键模块通过P1口输入数据。

总体实现功能如下:

(1)能为比赛提供计时功能,并能任意修改所要计量的时间,以此来满足足球篮球比赛的不同赛制。

(2)能为比赛提供记录比分功能,随时刷新甲、乙两队在整个比赛过程中的比分,出现错误也能重新修改比分。

(3)比赛结束时,能发出报警声,并能随时关闭报警声。

(4)比赛期间可随时接受暂停请求,计时停止。

2、系统硬件模块设计:

(1)设计框图及原理图

(2)单片机芯片AT89S52模块

AT89S52的主要特性如下:

·

与AT89C51,C52,STC89RC52兼容

·

8K字节可编程闪烁存储器

128*8位内部RAM

32可编程I/O线

三个16位定时器/计数器

6个中断源

可编程串行通道

片内振荡器和时钟电路

 

(3)时钟模块

采用12MHZ的晶振,另有两个30pF的瓷片电容

(4)复位电路

5

(5)报警电路

采用蜂鸣器加100Ω的限流电阻接P1口

(6)按键控制模块

共有9个设置按键,P1口有7个:

add1、add2是加分键(add1按一次加一分,add2按一次加二分),minus1是减分键(按一下减一分),,bstop是关蜂鸣器键,start是开始计时键,stopagain是时间暂停键,turn是切换键(用于加分方的切换),P3口有2个中断:

timeadd1是时间计时加1分钟,timeadd10是时间计时加10分钟。

(7)时间显示模块

采用一个四位共阴七段数码管显示分秒。

段选口接P0口,P0口接一个1kΩ的排阻,起上拉电平作用。

位选口接P2,采用动态扫描。

(8)比分显示模块

采用两个两位共阴七段数码管显示甲队乙队分数。

三、系统软件模块设计

(1)C语言程序流程图

中断函数按否

初始化显示

开始

修改计时时间

N

start按否

时间是否为0

按键函数

计时函数

显示函数

复位函数

报警函数

(2)源程序代码:

#include<

reg52.h>

#include<

intrins.h>

#defineuintunsignedint

#defineucharunsignedchar

ucharcodetable1[]={

0xbf,0x86,0xdb,0xcf,

0xe6,0xed,0xfd,0x87,

0xff,0xef};

ucharcodetable[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f};

uchardisbuffer[8]={0};

ucharminute=0,second=0;

ucharAscore=0,Bscore=0,temp=0;

ucharflage1=0;

ucharflage=0;

uintcount,z;

sbitbizz=P1^7;

//定义按键对应的端口

sbitadd1=P1^0;

sbitadd2=P1^1;

sbitminus1=P1^2;

sbitbstop=P1^4;

sbitstart=P1^5;

sbitstopagain=P1^6;

sbitturn=P1^3;

sbittimeadd1=P3^2;

sbittimeadd10=P3^3;

voidininterrupt()interrupt1//定时器T0计时函数

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

count++;

if(count==20)

{

count=0;

if(second==0&

&

minute==0)

{

ET0=0;

}

elseif(second==0&

minute!

=0)

second=59;

minute--;

elseif(second!

=0)

second--;

}

}

voiddelay()//显示延时函数

uintx,y;

for(x=10;

x>

0;

x--)

for(y=10;

y>

y--);

voiddelay1()//延时消抖函数16ms

for(y=360;

y--)

;

}

voiddisplay1()

uchari,j;

uchartemp;

disbuffer[3]=second%10;

disbuffer[2]=second/10;

disbuffer[1]=minute%10;

disbuffer[0]=minute/10;

disbuffer[5]=Ascore%10;

disbuffer[4]=Ascore/10;

disbuffer[7]=Bscore%10;

disbuffer[6]=Bscore/10;

temp=0xfe;

//采用动态扫描

P2=temp;

for(i=0;

i<

8;

i++)

j=disbuffer[i];

P0=table1[j];

delay();

temp=_crol_(temp,1);

//temp的最低位0左移,依次选通各个数码管

P2=temp;

}

voiddisplay()//显示函数

P0=table[j];

}

voidbizzer()//报警函数

while(minute==0&

second==0)

bizz=0;

delay1();

display1();

if(!

bstop==1)

{

delay1();

if(!

while(!

bstop==1);

while

(1)

{

bizz=1;

display();

}

}

}

voidexinterrupt()interrupt0//外部中断0,增加1分钟计时

timeadd1)

while(!

timeadd1);

minute++;

voidexinterrupt1()interrupt2//外部中断1,增加10分钟计时

timeadd10)

timeadd10);

minute+=10;

voidbutton()//按键控制函数

if(!

turn)

turn);

flage+=1;

if(flage%2==0)

add1)//分数加1分

add1)

add1);

Ascore+=1;

add2)//分数加2分

add2)

add2);

Ascore+=2;

minus1)//减分

minus1)

minus1);

Ascore-=1;

else

Bscore+=1;

Bscore+=2;

delay1();

if(!

while(!

Bscore-=1;

stopagain)//时间暂停

stopagain)

stopagain);

flage1+=1;

if(flage1%2==1)

TR0=0;

else

TR0=1;

voidmain()

while

(1)

TH0=(65536-

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

当前位置:首页 > IT计算机 > 计算机硬件及网络

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

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