如何运用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(); //结束子程序
}
}
}
希望以上的知识能够给大家提供帮助,这期我们先分享到这里,觉得有用的可以给个三连!想要学习资料的可以私信我。
51单片机实现篮球计分器程序,按键加减分 计数器减分
/** .两个七段数码管动态显示 **/
//==声明区====================================
#include<reg52.h> // 定义头文件
#define delay_time 1000
#define seg_data P1
#define delay_display 1000
unsigned char jifen;
unsigned char TAB[10]={0x3f, 0x06, 0x5b, 0x4f, 0x66,// 数字0-4
0x6d, 0x7d, 0x07, 0x7f, 0x6f };// 数字5-9
sbit ADD1=P2^1; //定义硬件的接口
sbit ADD2=P2^3;
sbit ADD3=P2^5;
sbit SUB=P3^5;
sbit MP1=P3^0;
sbit MP2=P3^1;
void delay (unsigned int a) // 声明延迟函数
{
while(a--);
}
void yifen() //分数加 子函数
{
if(ADD1==0)
{
delay(delay_time);
if(ADD1==0)
{
if(jifen>=99) jifen=99;
else jifen++;
}
while(ADD1==0);
}
if(ADD2==0)
{
delay(delay_time);
if(ADD2==0)
{
if(jifen>=99) jifen=99;
else jifen++; jifen++;
}
while(ADD2==0);
}
if(ADD3==0)
{
delay(delay_time);
if(ADD3==0)
{
if(jifen>=99) jifen=99;
else jifen++; jifen++;jifen++;
}
while(ADD3==0);
}
/*if(SUB==0) //按键减分
{
delay(delay_time);
if(SUB==0)
{
if(jifen>=99) jifen=99;
else jifen--;
}
while(SUB==0);
}
****/////
}
void display() //显示子函数
{
seg_data=TAB[jifen/10];
MP1=0;MP2=1;
delay(delay_display);
MP1=1;MP2=1;
seg_data=TAB[jifen%10];
MP1=1;MP2=0;
delay(delay_display);
MP1=1;MP2=1;
}
void INIT()
{
TMOD=0x50;
TH1=(65536-3)/256;
TL1=(65536-3)%256;
TR1=1; //启动定时计数器
EA=1; //中断总开关
ET1=1; //使能定时计数器中断
}
//==主程序====================================
main() // 主程序开始
{ INIT(); //条调用INIT函数,初始化中断
P1=0x3f;MP1=0;MP2=0; //启动时数码管显示“00”
while(1)
{
yifen(); //包调用
display();
}
}
void Timer0() interrupt 3 //计数器的中断服务函数
{
jifen--;
TH1=(65536-3)/256; //重装初值
TL1=(65536-3)%256;
}
相关问答
学中鸣机器人以后可以参加比赛吗?体制内的比赛大概我分成三类,1中鸣超轨,乐高fll能力风暴wer这些是定器材,有c基础就可以,2机器人足球,篮球,人形,综合技能,这些是烧器材的,3创意赛,需要...体...
北京63中和北京66中哪个好?应该是六十六中略胜一筹吧以下为详细比对:66中:北京六十六中学建校于1954年,是北京市重点对外开放学校和宣武区重点中学。建有教学楼、实验楼、综合楼和篮球...
广东工业大学的电气工程及其自动化专业怎么样? 申请方[回答]既来之,则安之,关于广东工业的这个专业,我来给各位刚来这里的宝宝们说说。一、总体建议本校本专业设备好、专业老师总会提醒学习、非专业老师一点也...
报兴趣班还是亲近自然,如何安排孩子的课外时间?这两者之间完全不冲突,只不过报兴趣班孩子的闲暇时间会少一些,不可能整个休息天父母都给孩子报兴趣,不给孩子留个喘气的机会吧。玩的好才能学的好,在我印象...
中考特长都有什么?中考特长生的项目包括体育、艺术和科技三个方面。其中体育特长生的项目包括田径、足球、篮球、排球、棒球、垒球、游泳、乒乓球、跆拳道、武术、冰雪、冰壶、...
小孩刚上初一,学习一落千丈,心思一直沉迷手机,作为家长如何是好?说道理他又听不进?学习只能占用他一部分时间,剩下的时间你不帮他规划,那他就只有自由支配。你可以带他打篮球,可以跑步,可以一块儿看电影,方式多种多样,总之,剥削掉他一切可...
帮个忙在座的大侠!可不可以告诉我,有哪些产品煤仓衬板耐磨...[回答]下面以PIC16F72单片机控制器为例,当常见问题时如何分析,及如何排除故障。1.控制器静态电流正常应在50MA内,电机空载最高转速时电流一般在1.4A左右,...
初中升高中特长生有哪些科目- 汇财吧专业问答[回答]初中升高中特长生科目有:声乐,器乐,舞蹈,绘画,书法,体育等等。1、声乐声乐,是指用人声演唱的音乐形式。声乐是以人的声带为主,配合口腔、舌头、鼻腔...
急需了解!浙江假发项目招商加盟哪里好,假发项目招商加盟服...[回答]还任务呢!没有人会要你一个新手做实用项目的,越是不要钱,越不会让你做。不要以为会单片机就了不起了。路长着呢。为什么非要接项目,你自己找个东西...