设计与开发

篮球单片机 microbit基础教程-篮球计分器

小编 2024-10-09 设计与开发 23 0

microbit基础教程-篮球计分器

篮球得分计数器

这一期我们来学习通过 micro:bit 开发板来设计一个篮球得分计数器。本期涉及到的扩展有:基本,变量,输入,非常简单,赶快一起学起来吧。

分析

篮球得分有三种类型,分别是:1 分,2 分,3 分。因此我们可以利用我们开发板上的 A,B 两个按钮来进行对应,因此我们可以得到如下表格:

A 1 分B 2 分A+B 3 分

这个得分我们需要保存起来,因此我们需要使用到变量扩展。首先我们来了解一下什么是变量。

举个例子,你在跳蹦蹦床的时候,需要一个人帮你记着你跳了多少个,那么这个计数的人就相当于是一个变量,他记的次数就是内容,因为内容是不断的变化的,所以就叫变量。

接下来我们看一下变量模块,当我们创建一个变量之后,编辑器自动给我们创建了三个积木。

变量的名字,这个是为了方便我们记忆起的名字将变量设置为某个值,就好像篮球比赛一开始的时候,需要把双方的得分设置为:0,一般我们把这个叫做初始值。以特定的幅度更改变量的值,这里可以联想到我们前面说的得分,有 1 分,2 分,那么他的幅度对应的就是:1,2

接下来我们就需要编写程序,实现我们上面的功能,在这里我们需要使用到输入扩展里面的当[A]被按下时积木,

这个积木用来标识我们按下按钮这个操作,这个积木有三种状态,分别是A,B,A+B正好对应我们之前的分数。因此我们就得到了以下结果。

然后我们的分数需要显示数来,因此我们再添加一个显示分数的积木,分数是一个数字,因此这里我们使用基本中的显示数字积木。

对于分数的话,一开始的时候,我们最好是给他一个初始值,因此我们在当开机时初始化我们的分数

,因此我们就得到了我们今天的程序,

还等什么,赶快运行起来试一下吧。我们还配套了对应的视频教程,点击下面的视频号,直接观看。

micro:bit基础教程-篮球计分器

如何运用51单片机制作篮球计时计分器

大家好我是小火,想学习单片机的同学可以关注、私信我。篮球我们平时看的还是比较多的,如果我们要做这类的计分器,里面的系统大概包括包括延时子函数、蜂鸣器子函数、初始化子函数、调节比赛时间数码管显示子函数、比赛开始数码管显示子函数、甲队得分数码管显示子函数、乙队得分数码管显示子函数、按键扫描子函数、定时器0中断子函数、主函数和数据定义这几部分组成。

要做一个小项目首先我们要确认好组成的部分,我们以ST89C51RC单片机为核心,它主要起着控制作用。系统部分包括数码管显示电路、复位电路、时钟电路、按键调整电路和蜂鸣器电路。我们需要用到的模块分为六个部分它们分别是:复位电路、晶振电路、STC89C51RC、数码管显示电路、按键调整电路和蜂鸣器电路六个模块。

流程图

代码部分

#include<reg51.h>

typedef unsigned char uchar;

typedef unsigned int uint;

uchar code seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

//对应数码管显示数字0-9

int m=1,n=0,x=0,y=0,i=0,h=0,k;

//定义全局变量并初始化,m,n表示分钟与秒,x,y表示甲乙两队分数

sbit P1_0=P1^0;

sbit P1_1=P1^1;

sbit P1_2=P1^2;

sbit P1_3=P1^3;

sbit P1_4=P1^4;

sbit P1_5=P1^5;

sbit P1_6=P1^6;

sbit P1_7=P1^7;

sbit P3_0=P3^0;

sbit P3_1=P3^1;

sbit P3_2=P3^2;

sbit P3_3=P3^3;

sbit P3_6=P3^6;

sbit P3_7=P3^7;

void delay(uint x)//定义延时程序,通过设置参数x,改变延时时间长度

{

while(x--)

{

uint y;

for(y=0;y<200;y++);

}

}

void display(int i,int j,int x,int y)//显示子程序 变量i,j分别是分秒,变量x,y是甲乙两队的分数

{

P2=~0xfe;

//数码管刷新显示时间的分钟十位,调用延时程序

P0=~seg[i%100/10];

delay(1); //延时数码管点亮

P2=0x00;

P0=0xff;

P2=~0xfd; //同上,刷新数码管的分钟位的个位

P0=~seg[i%10];

delay(1);

P2=0x00;

P0=0xff;

P2=~0xfb; //同上。刷新数码管秒位的十位

P0=~seg[j%100/10];

delay(1);

P2=0x00;

P0=0xff;

P2=~0xf7; //同上,刷新数码管秒位的个位

P0=~seg[j%10];

delay(1);

P2=0x00;

P0=0xff;

P2=~0xef; //同上。刷新数码管甲队分数的十位

P0=~seg[x%100/10];

delay(1);

P2=0x00;

P0=0xff;

P2=~0xdf; //同上。刷新数码管甲队分数的个位

P0=~seg[x%10];

delay(1);

P2=0x00;

P0=0xff;

P2=~0xbf; //同上。刷新数码管乙队分数的十位

P0=~seg[y%100/10];

delay(1);

P2=0x00;

P0=0xff;

P2=~0x7f; //同上。刷新数码管乙队分数的个位

P0=~seg[y%10];

delay(1);

P2=0x00;

P0=0xff;

}

void t0() interrupt 1 //定义中断程序,调用定时器TO

{

TH0=0xb1; //对定时器T0送入初值,THO=0xb1

TL0=0x10; //TL0=0X10 故定时器定时为20毫秒,

if(n==0) //即每20毫秒调用一次

{

n=60;

m--;

}

i++;

if(i==50) //定义i的值为50,即50*20毫秒=1秒

{

n--;

i=0;

}

display(m,n,x,y);//调用数码管显示程序,即每20毫秒刷

}

void jiafen() //定义加分程序

{

if(P1_1==0)//当按下P1_1的时候

{

delay(1);//延时去抖

while(P1_1==0);

x++;//甲队加一分

}

if(P1_2==0)//当按下P1_2的时候

{

delay(1);

while(P1_2==0);

x+=2;//甲队加两分

}

if(P1_3==0) //当按下P1_3的时候

{

delay(1);

while(P1_3==0);

x+=3;//甲队加三分

}

if(P1_4==0) //当按下P1_4的时候

{

delay(1); //延时去抖

while(P1_4==0);

y++; //乙队加一分

}

if(P1_5==0) //当按下P1_5的时候

{

delay(1);

while(P1_5==0);

y+=2; //乙队加两分

}

if(P1_6==0) //当按下P1_6的时候

{

delay(1);

while(P1_6==0);

y+=3; //乙队加三分

}

}

void jianfen() //定义减分程序

{

if(P3_0==0&&x>0) //当按下P3_0并且甲队分数大于0的时候

{

delay(1); //延时去抖

while(P3_0==0);

x--; //甲队减1分

}

if(P3_1==0&&x>0) //当按下P3_1并且乙队分数大于0的时候

{

delay(1);

while(P3_1==0);

y--; //乙队减1分

}

}

void tiaoshi() //定义调时程序

{

if(P3_2==0) //当按下P3_2的时候

{

delay(1); //延时去抖

if(P3_2==0)

{

n++; //秒位加1

if(n==60)//当秒位到60的时候

{

m++;//分位加1,并且秒位变1

n=1;

}

}

}

if(P3_3==0) //当按下P3_3的时候

{

delay(1);

if(P3_3==0)

{

n--;//秒位减一

if(n==0)

//当秒位减到0的时候,分位减一,并且秒位变59

{

m--;

n=59;

}

}

}

}

void jiaohuan() //定义比分交换程序

{

int t; //定义中间变量t

if(P1_7==0) //当P1_7按下的时候

{

delay(1); //延时去抖

while(P1_7==0);

t=x; //利用中间变量t,将甲乙两队比分交换

x=y;

y=t;

display(m,n,x,y); //刷新数码管

}

}

void zanting() //定义暂停程序

{

if(P1_0==0) //当P1_0按下的时候

{

delay(1); //延时去抖

while(P1_0==0);

EA=0; //关中断,进入死循环

while(1)

{

display(m,n,x,y);

if(P1_0==0) //当P1_0再次按下的时候,跳出死循环

{

delay(1);

while(P1_0==0)

EA=1;

break;

}

}

}

}

void baojing() //定义报警程序

{

if((m==0)&&(n<=10)&&(n>1)) //判断当倒计时只剩下10秒的时候

{

P3_7=1;

//使P3_7和P3_6同时间隔输出高低电平,点亮发光二极管和使蜂鸣器蜂鸣

P3_6=1;

delay(20);

P3_7=0;

P3_6=0;

delay(20);

}

}

void jieshu() //定义结束子程序

{

M: if(h==1)

//当时间条件满足时,关闭中断,使数码管保持状态显示

{

EA=0;

delay(20);

m=0;

n=0;

P3_6=1;

P3_7=1;

delay(200);

P3_7=0;

P3_6=0;

while(1)

{

display(m,n,x,y);

jiafen();

jianfen();

jiaohuan();

if(P1_0==0) //当P1_0再次按下的时候,跳出循环

{

delay(1);

while(P1_0==0)

{

EA=1;

m=10; //重新赋予时间初始值开始下半场比赛

n=0;

h=0;

goto M ;

}

}

}

}

}

void main() //定义主程序

{

TMOD=0x01; //初始化程序

EA=1;

ET0=1;

P3_7=0;

P0=0xff;

P2=0x00;

if(P1_0==0) //第一次按下P1_0,单片机启动,并显示初始值

{ //由于调用了一次暂停功能,会显示初始值

TH0=0xb1;

TL0=0x10;

TR0=1; //启动定时器

P3=0xff;

P1=0x7f;

P3_7=0;

P1_7=1;

while(1)

{

jiafen(); //加分子程序

jianfen(); //减分子程序

tiaoshi(); //调时子程序

jiaohuan(); //比分交换子程序

zanting(); //暂停子程序

baojing(); //报警子程序

if((m==0)&&(n==1)) //判断结束子程序的调用条件

{

h=1;

}

jieshu(); //结束子程序

}

}

}

希望以上的知识能够给大家提供帮助,这期我们先分享到这里,觉得有用的可以给个三连!想要学习资料的可以私信我。

相关问答

简捡明了生平评价?

个人兴趣爱好比较广泛,喜欢运动,打篮球,乒乓,羽毛球,踢足球等等。自己为人开朗热情,乐于奉献,积极向上,性坚韧、善耐压、勤思考、求创新;丰富...自己为...

麻烦在座的行家!有人知道么!泸州专业的plc培训班哪家好,pl...

[回答]一对一补习一个小时的价格在200到400之间不等。06泸州高考补习哪家好,有没有谁知道哪家比较好!19西昌金丝鸟集训,西昌那里篮球和乒乓球培训班?06青...

英语翻译GK:forkeepersFB:forfullbacksWB:forwingbacksDC:for...

[回答]这是一段讲球类的东西,我不知是足球还是篮球吧,就是后面的词是前面的词的缩写,译的或许不够准,不过如果你有看球赛应该自己能理解了,不要把for解释...

学习c语言之前,可以学哪些相关的基础?买书的话,有没有什么好的推荐?

之前回答这个问题,提问很扯!但是内容很适合这个问题如何在十分钟之内学完C语言?-知乎C语言可以零基础入门,它的语法是很多高级编程语言的基础,比如说J...

什么是平衡车平衡车是干什么用的平衡车?

平衡车,又叫体感车、思维车、摄位车等。市场上主要有独轮和双轮两类。其运作原理主要是建立在一种被称为“动态稳定”(DynamicStabilization)的基本原理上。...

学软件开发需要什么基础吗?

欲知需要什么?最好先知道包含什么?从概念上来说,软件开发就是根据用户要求建造出软件系统或者系统中的某个软件部分的过程。也是一项包括需求捕捉、需求分析...

朋友们,急需赐教!15岁学技术单招,学技术什么品牌服务质量...

[回答]江西万通汽车学校还举行各种有趣的活动,像篮球比赛、班歌比赛、拔河比赛和乒乓球比赛等活动。江西万通汽车技工学校城市轨道交通管理与高端车商务,...

中考体育特长生标准- 汇财吧专业问答

[回答]中考体育特长生成绩到底是多少才录取的标准是因地区不同,成绩也不会一样的;中考只是考100米么?我不是很清楚的。我只知道是按人数录取的,即你所报考...

盆友们,你们谁明白!!浙江餐饮连锁加盟项目加盟费多少,餐...

[回答]这个与校级还是什么行政级别没有关系,与单片机项目所完成的具体功能有关。是个大品牌,怎么买从2014年仁川亚运会开始,亚运会的规模将缩减至35个大...

2017年对初中体育艺术特长生招生有什么规定- 汇财吧专业问答test

[回答]体育特长生体育特长生测试的项目包括:田径、足球、篮球、排球、棒球、垒球、游泳、乒乓球、跆拳道、武术、手球、羽毛球、健美操、艺术体操、射击、...

猜你喜欢