基于51单片机的篮球记分牌设计 下载本文

智能仪表综合课程设计

{

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)

{ 当暂停键再次按下时候,EA=1开中断,计时数码管 delay(1); 继续倒计时,同时通过break语句,跳出死循环 if(P1_0==0) {

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

4.2.9 中场指示灯程序 void over() {

if((m==0)&&(n==0)) 当m,n均为0的时候,通过变量jie的值判断比赛是否结束

21

智能仪表综合课程设计

{ if(jie>1)

如果jie>1,说明半场到了,比赛没有结束,

{ 令m=2,n=0,关中断,再次按下暂停键时候继续倒计时

m=2; 同是T1=1;delay(400) ;delay(400);,是蜂鸣器 n=0; 发声报警 EA=0;

T1=1; delay(400); T1=0;

while(1)

if(P1_0==0)

{

display(m,n,x,y); 刷新数码管,等待暂停减再次按下,跳出暂停

{

delay(1); if(P1_0==0) {

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

} jie--;

}

if(jie==1&&bujin==2) 如果jie==1&&bujin==2,说明比赛结束了,

{ 关闭中断,比赛秒表不再走动,同时不短刷新数码管, EA=0;

22

智能仪表综合课程设计

m=0;

n=0;

T1=1; 全场比赛结束蜂鸣器开始报警

delay(400); T1=0;

P1=0x3f; P1=0x3f上下半场指示灯同时点亮,比赛结束 while(1) }

4.2.10 主程序 void main()

display(m,n,x,y); 同时应当不断刷新数码管 } }

{ TMOD=0x01; 首先设置定时器工作方式 EA=1; ET0=1;

TH0=0xb1; 定时器送计数初值,EA=1,开中断,P3口电平拉高 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()执行条件

23

智能仪表综合课程设计

key3(); key3()半场交换场地时自动交换双方 if(n==18&&bujin==0) 比赛分数子程序,所以仅当中场时调用 {

bujin=2; 修改变量bujin的值,目的是设定over() } 中第二个if语句的执行条件

shijian();

key4();

over();

}

} 4.3控制源程序

#include //#include 为头文件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}

//分别对应数码管显示的字形0到9

int m=1,n=60,x=0,y=0,i=0,jie=2,zidong=1,bujin=1,zanting=0,chuzanting=0;

//定义全局变量

jie,zidong,bujin,zanting,chuzanting

//并初始化,其中m,n分别表示分钟与秒计时,x,y分别表示甲乙//两队的分数,其余中间变量

void delay(int t) // 延时子程序 通过参数t,可以调整暂停时间 {

while(t--) {

unsigned int i; for(i=0;i<200;i++);

m,n,x,y,i,

24