篮球记分牌

问题描述

西建大单片机课设记录

我本人做的单片机课设是篮球记分牌,根据课设内容要求作出的仿真图和C语言程序。如有问题,请联系我。

课设要求

  1. 设计内容
    (1)选择51单片机,晶振采用12MHz。
    (2)按下启动按钮时K0双方显示的初始分数复位为00(四位数码管双方各用两位显示分数)。
    (3)按下红、蓝两个按钮实现为各方分数加1、加2、加3的功能,按钮(K1和K2)。
    (4)计分范围为00~99。
    (5)按键按下时有提示音,当有键按下时蜂鸣器发出声音,按键释放时停止发音。

Proteus仿真图

篮球记分牌仿真图

最小系统

单片机最小系统

显示系统

显示系统

分别显示蓝红两队的分数,前两位是蓝队分数,后两位是红队分数
本作品采用的是共阴数码管,如果要采用共阳数码管,请自己改变相应引脚连接及代码部分。

加分系统

加分系统

不同的按键对应不同的分数,为了美观及提示作用在按键前添加了LED灯,增加的电阻是为了防止电流过大,LED灯损坏。按键按下时,灯亮,蜂鸣器响,按键释放时,灯灭,蜂鸣器停。

提醒系统

提醒系统


当有按键按下时,P3^7输出高电平,经放大电路放大,蜂鸣器响,如蜂鸣器不响,先检查电路,电路正确的话,可能是蜂鸣器默认值的问题,双击蜂鸣器,改变默认值(12V改为5V)

蜂鸣器默认属性

Keil程序(C语言)

#include <reg51.h>

#define BLUEDUAN  P0	 //定义P0口为段选位
#define WEI   P1	 //定义P1口为位选位
#define REDDUAN  P0	 //

#define uchar unsigned char
#define uint  unsigned int
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,};//共阴数码管cc
						  //  0    1    2    3    4    5    6    7    8    9    a    b    c    d    e   f
sbit K1=P3^0;   //BLUE+1
sbit K2=P3^1;	  //RED+1
sbit K3=P3^2;	  //B+2
sbit K4=P3^3;//R+2
sbit K5=P3^4;//B+3
sbit K6=P3^5;//R+3
sbit K7=P3^6;//00
sbit BUZZ=P3^7;	  //buzz

uchar BLUEnum,REDnum,a;//BLUE队分数   RED队分数
//*****延时函数*****//
void delay(unsigned int a)     //12.00MHz
{
	unsigned i,j;
	for(i=a;i>0;i--)
	for(j=120;j>0;j--);
}
//*****主函数部分*****//
void main()
{BUZZ=0;//关闭蜂鸣器
 if(BLUEnum>99)
 {BLUEnum=99;}
 if(REDnum>99)
 {REDnum=99;}//当某队分数达到99时,分数归零,即0~99
while(1)
 {
/显示/
	WEI=0xff;  //数码管显示位控制
	WEI=0xfe;  //1
	BLUEDUAN=table[BLUEnum/10]; //BLUEnum十位
	delay(5);  //延时5ms
	WEI=0xff;  //全灭
	WEI=0xfc;  //2
	BLUEDUAN=table[BLUEnum%10]; //BLUEnum个位
	delay(5);  //延时5ms
    WEI=0xff;  //全灭   
	WEI=0xfb;  //3
	REDDUAN=table[REDnum/10]; //REDnum十位
	delay(5); //延时5ms
	WEI=0xff; //全灭
	WEI=0xf7; //4
	REDDUAN=table[REDnum%10]; //REDnum个位
	delay(5);// 延时5ms
	
	 
	
/00///

if(!K7)
{delay(10);//按键消抖
	if(!K7)
	{BUZZ=1;
	 
		REDnum=0;//RED==0
		BLUEnum=0;//BLUE==0
		while(!K7);//等待按键释放
	
	}
}
/BLUE+1/
if(!K1)	   
{
 delay(10);		  //按键消抖
 if(!K1)
 {BUZZ=1;        //蜂鸣器响
	
	BLUEnum++;		  //BLUE+1  
	while(!K1); //等待按键释放
 }
}
/RED+1/
if(!K2)	   
{
 delay(10);		  //按键消抖
 if(!K2)
 {BUZZ=1;
	
	REDnum++;		  //RED+1
	while(!K2); //等待按键释放
  }
}
/BLUE+2/
if(!K3)	   
{
 delay(10);		  //按键消抖
 if(!K3)
 {BUZZ=1;
	 
	BLUEnum+=2;		  //BLUE+2 
	while(!K3); //等待按键释放
  }
}
/RED+2/
if(!K4)	   
{
 delay(10);		  //按键消抖
 if(!K4)
 {BUZZ=1;
	 
	REDnum+=2;		  //RED+2
	while(!K4); //等待按键释放
 }
}
/BLUE+3/
if(!K5)	   
{
 delay(10);		  //按键消抖
 if(!K5)
 {BUZZ=1;
	 
	BLUEnum+=3;		  //BLUE+3  
	while(!K5); //等待按键释放
  
 }
}
/RED+3/
if(!K6)	   
{
 delay(10);		  //按键消抖
 if(!K6)
 {BUZZ=1;
	 
	REDnum+=3;		  //RED+1
	while(!K6); //等待按键释放
  }
}
}
} 

以上为我的简单介绍,如有问题请评论或私信留言。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)