文章目录
- 一、篮球计时器
- 1.题目要求
- 2.思路
- 3.仿真图
- 3.1 未仿真时
- 3.2 仿真开始
- 3.3 A队进分
- 3.4 B队进分
- 3.5 比赛结束
- 4.仿真程序
- 4.1 主函数
- 4.2 时间显示
- 4.3 比分显示
- 4.4 按键扫描
- 二、总结
一、篮球计时器
1.题目要求
以51单片机为核心,设计并制作篮球计时器
基本功能如下:
设有比赛总时长(如10min)和24秒进攻时限的倒计时,允许在倒计时内进行投篮加分,分别有一分球、两分球、三分球三种进球方式。每次得分之后要有一个积分栏,要记录两队的比分。篮球比赛开始和结束要有标识,可以用led效果来表示。
2.思路
首先,画个51单片机,粗略计算了一下好像引脚不是很够用,所以这里想用74HC138来扩展IO口。
74HC138B 译码器可接受三位二进制加权地址输入(A0,A1,A2)并在使能时,提供8 位低电平有效、互斥的输出(Y0 到 Y7)。至于具体输出高还是低,要根据下面的真值表来看(请注意实物中的E3其实是仿真图中的E1,要看引脚编号。)不懂的小伙伴可以看下这个74HC138译码器
报警方式依旧选用蜂鸣器
显示方式,这里选用6位数码管和4位数码管分开显示。一个是显示比赛时间和进攻时间。一个是显示A队和B对的比分。
最后是一个LED来表示比赛开始和比赛结束,打算开始就长亮,一直到比赛结束使其闪烁或者熄灭。用开关或者按键来切换是A队还是B队,4个按键来刷新进攻时间和增加比分(一分、两分、三分)
3.仿真图
3.1 未仿真时
3.2 仿真开始
比赛总时间为10分钟,每次进攻时间为24s。24s倒计时为0,蜂鸣器会响进行提示,需要手动按下进攻时间来重置24s。
3.3 A队进分
A队投进3分球,记3分,当前比分3比0。
3.4 B队进分
B队投进2分球,记2分,当前比分3比2。
3.5 比赛结束
比赛时间归零,蜂鸣器长鸣,灯光熄灭。这时候比分为39比34,A队获得此次比赛的胜利。
4.仿真程序
4.1 主函数
//主函数
void main()
{Time0_init();//定时器初始化LED=1;//比赛开始while(1){time_display();//总时间显示和倒计时显示score_display();//比分显示keyscan();//按键扫描speak();//警报}
}
4.2 时间显示
//总时间显示和倒计时显示(六位数码管)
void time_display()
{uchar secshi,secge,minshi,minge,attge,attshi;secge=sec%10;//秒钟个位secshi=sec/10;//秒钟个位minge=min%10;//分钟个位minshi=min/10;//分钟十位attge=att%10;//倒计时个位attshi=att/10;//倒计时十位HLA=0;HLB=0;HLC=0; //第1位P0=table0[minshi];delayms(1);HLA=1;HLB=0;HLC=0; //第2位P0=table0[minge];delayms(1);HLA=0;HLB=1;HLC=0; //第3位P0=table0[secshi];delayms(1);HLA=1;HLB=1;HLC=0; //第4位P0=table0[secge];delayms(1);HLA=0;HLB=0;HLC=1; //第5位P0=table0[attshi];delayms(1);HLA=1;HLB=0;HLC=1; //第6位P0=table0[attge];delayms(1);P0=0x00; //消影
}
4.3 比分显示
//比分显示(4位数码管)
void score_display()
{uchar A_scorege,A_scoreshi,B_scorege,B_scoreshi;A_scorege=A_score%10;A_scoreshi=A_score/10;B_scorege=B_score%10;B_scoreshi=B_score/10;HHA=0;HHB=0;HHC=0; //第1位P3=table0[A_scoreshi];delayms(1);HHA=1;HHB=0;HHC=0; //第2位P3=table0[A_scorege];delayms(1);HHA=0;HHB=1;HHC=0; //第3位P3=table0[B_scoreshi];delayms(1);HHA=1;HHB=1;HHC=0; //第4位P3=table0[B_scorege];delayms(1);P0=0x00;
}
4.4 按键扫描
//按键扫描
void keyscan()
{if (key_att==0){delayms(1);if(key_att==0)att=24;//重置倒计时24swhile(!key_att);}if (Change==1)//A队{if (score_1==0)//比分加1{delayms(1);if (score_1==0)A_score+=1;while(!score_1);}if (score_2==0)//比分加2{delayms(1);if (score_2==0)A_score+=2;while(!score_2);}if (score_3==0)//比分加3{delayms(1);if (score_3==0)A_score+=3;while(!score_3);}}else//B队{if (score_1==0)//比分加1{delayms(5);if (score_1==0)B_score+=1;while(!score_1);}if (score_2==0)//比分加2{delayms(5);if (score_2==0)B_score+=2;while(!score_2);}if (score_3==0)//比分加3{delayms(5);if (score_3==0)B_score+=3;while(!score_3);}}
}
二、总结
今天主要讲了基于51单片机的篮球计时器Proteus仿真。
感谢你的观看!