1054-基于51单片机的比赛评分器原理图、流程图、物料清单、仿真图、源代码

1054-基于51单片机的比赛评分器原理图、流程图、物料清单、仿真图、源代码

功能介绍:

比赛打分器
1、共有9位选手,4个评委
2、通过按键切换选手和评委,数字键用来打分。每个选手的分数是4个评委打分总和
3、计算前三名并显示选手编号
4、分数大于6分算及格,统计及格人数并显示

有哪些资料:

1、仿真工程文件
2、源代码工程文件
3、原理图工程文件
4、流程图
5、功能介绍
6、元件清单

请添加图片描述

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
uchar code smgduan0[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示0~9,无小数点
uchar code smgduan1[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//显示0~9,有小数点
uchar people=1;//选手
uchar pan=1;//裁判
uchar fen1[]={0,0,0,0,0,0,0,0,0};//分数
uchar fen2[]={0,0,0,0};	//打分
uchar a=0,b=0,c=0;//排名
uchar sum=0;//平均
uchar num=0;//通过人数

uchar key_scan()//按键检测
{
uchar i,j;
i=0;
j=0;
P1=0x0f;
if(P1!=0x0f) //检测有无按下
{
 switch(P1)//检测行
 {
  case 0x0e:i=1;break;
  case 0x0d:i=5;break;
  case 0x0b:i=9;break;
  case 0x07:i=13;
 }
 P1=0xf0;
 switch(P1)//检测列
 {
  case 0xe0:j=0;break;
  case 0xd0:j=1;break;
  case 0xb0:j=2;break;
  case 0x70:j=3;
 }
 while(P1!=0xf0);//等待按键松开
}
return i+j;
}

void delay(uint i)//延时
{
	while(i--);
}
//主函数
void main()
{
	uchar i,j,k;
	while(1)
	{
		i=key_scan();
		if(i==13)//下一个评委
		{
			if(pan<4)
				pan++;
		}
		if(i==15)//复位
		{
			a=0;b=0;c=0;
			people=1;
			pan=1;
			fen2[0]=0;
			fen2[1]=0;
			fen2[2]=0;
			fen2[3]=0;
			for(j=0;j<10;j++)
			{
				fen1[j]=0;
			}
			num=0;
		}
		if(i==14)//下一个选手
		{
			fen1[people-1]=sum;
			if(people<9)
				people++;
			pan=1;
			fen2[0]=0;
			fen2[1]=0;
			fen2[2]=0;
			fen2[3]=0;
		}
		//计算排名,OK
		if(i==16)
		{	
			fen1[people-1]=sum;
			a=0;b=0;c=0;k=0;
			for(j=0;j<people;j++)
			{
				if(fen1[j]>k)//第一名
				{
					k=fen1[j];
					a=j+1;					
				}
				if(fen1[j]==k)
				{
					a=j+1;
				}				
			}
			k=0;
			for(j=0;j<people;j++)
			{
				if((fen1[j]>k)&&(j!=(a-1)))//第二名
				{
					k=fen1[j];
					b=j+1;
				}
				if((fen1[j]==k)&&(j!=(a-1)))
				{
					b=j+1;
				}				
			}
			k=0;
			for(j=0;j<people;j++)
			{
				if((fen1[j]>k)&&(j!=(a-1))&&(j!=(b-1)))//第三名
				{
					k=fen1[j];
					c=j+1;
				}
				if((fen1[j]==k)&&(j!=(a-1))&&(j!=(b-1)))
				{
					c=j+1;
				}				
			}
			if(sum>6)//通过人数
				num++;
			fen2[0]=0;
			fen2[1]=0;
			fen2[2]=0;
			fen2[3]=0;
			sum=0;
		}
		//打分
		if((i>0)&&(i<12))
		{
			fen2[pan-1]=i-1;//记录分数
		}
		//计算平均分
		sum=(fen2[0]+fen2[1]+fen2[2]+fen2[3])/4;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叫我Eric

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值