篮球记分牌

西建大单片机课设记录

我本人做的单片机课设是篮球记分牌,根据课设内容要求作出的仿真图和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); //等待按键释放
  }
}
}
} 

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

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个简单的uniapp篮球记分牌的实现方法: 1. 在uniapp项目中创建一个新页面,例如Scoreboard.vue。 2. 在Scoreboard.vue中添加以下代码: ```html <template> <view class="container"> <view class="team"> <view class="name">{{ team1Name }}</view> <view class="score">{{ team1Score }}</view> </view> <view class="team"> <view class="name">{{ team2Name }}</view> <view class="score">{{ team2Score }}</view> </view> <view class="buttons"> <button class="button" @click="addScore(1, 1)">+1</button> <button class="button" @click="addScore(1, 2)">+2</button> <button class="button" @click="addScore(1, 3)">+3</button> <button class="button" @click="addScore(2, 1)">+1</button> <button class="button" @click="addScore(2, 2)">+2</button> <button class="button" @click="addScore(2, 3)">+3</button> <button class="button" @click="resetScore">Reset</button> </view> </view> </template> <script> export default { data() { return { team1Name: 'Team 1', team2Name: 'Team 2', team1Score: 0, team2Score: 0 } }, methods: { addScore(team, score) { if (team === 1) { this.team1Score += score } else if (team === 2) { this.team2Score += score } }, resetScore() { this.team1Score = 0 this.team2Score = 0 } } } </script> <style> .container { display: flex; flex-direction: column; align-items: center; justify-content: center; height: 100vh; } .team { display: flex; flex-direction: column; align-items: center; margin-bottom: 20px; } .name { font-size: 24px; font-weight: bold; } .score { font-size: 48px; font-weight: bold; } .buttons { display: flex; flex-direction: row; align-items: center; justify-content: center; } .button { margin: 10px; padding: 10px 20px; font-size: 24px; font-weight: bold; border-radius: 10px; background-color: #007aff; color: #fff; } </style> ``` 3. 在Scoreboard.vue中,我们定义了两个队伍的名称和得分,以及加分和重置按钮的功能。当用户点击加分按钮时,我们将根据所选的队伍和分数来更新得分。当用户点击重置按钮时,我们将重置得分为零。 4. 在样式中,我们定义了一个简单的布局,包括两个队伍的名称和得分,以及加分和重置按钮。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值