找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4361|回复: 5
收起左侧

51单片机设计电子拔河比赛

[复制链接]
ID:525872 发表于 2019-5-2 20:54 | 显示全部楼层 |阅读模式

设计要求:
1、电路使用7个发光二极管表示拔河的“电子绳”,开机后只有中间一个发亮,此即拔河的中心点。游戏甲乙双方各持一个按钮,迅速地、不断地按动产生脉冲,谁按得快,亮点向谁方向移动,每按一次,亮点移动一次。亮点移到任一方终端二极管,这一方就获胜,此时双方按钮均无作用,输出保持,只有复位后才使亮点恢复到中心。
2、用数码管显示获胜者的盘数,每次比赛结束自动给获胜方加分。
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit K1=P1^0;  //主持操作按键人显示开始
sbit K2=P1^1;  //参赛者1按键
sbit K3=P1^2;  //参赛者2按键
uchar count=3; //两人按键处理该参数作为自加或者自减运算                0   1   2《==自减3==》自加 4  5  6
uchar k=0,M=0;  //分别记录两人胜的次数
uchar flag;                   //每局胜出标志位

//uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//单个共地数码管段码0到9

uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //段码表段位,共阳数码管显示0到9
uchar code DSY_IDX[]={0x01,0x02,0x04,0x08,0x10,0x20}; //位码表         第6位为控制LED位码
uchar code DSY_IDC[]={0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
void delayms(uchar n)          //延时ms函数
{
uchar i;
while(n--)
for(i=0;i<120;i++);
}  

void delay(uchar t)         //延时函数
{
  uchar i,p,j;
   for(i=0;i<t;i++)
   {
            for(p=13;j>0;j--);
         { ;
         }
   }
}
void main()
{

while(1)
{
P2=DSY_IDX[0];P0=DSY_CODE[k];delay(50);
P2=DSY_IDX[1];P0=DSY_CODE[M];delay(50);       
flag=1;       


if(!K1) //主持人按键开始后参赛者按键才有效
{
delayms(20);//延时20ms按键消抖
if(!K1)//再次确认按键是否真的被按下
{
while(!K1);       
while(flag)
{
if(!K2)
{
delayms(20);//延时20ms按键消抖
if(!K2)//再次确认按键是否真的被按下
{
count--;
while(!K2);       

}
}

if(!K3)
{
delayms(20);//延时20ms按键消抖
if(!K3)//再次确认按键是否真的被按下
{
count++;
while(!K3);               
}
}

switch(count)       
{
case 0:k=k+1;P2=DSY_IDX[5]; P0=DSY_IDC[0];delayms(10); flag=0;  count=3;  
break;

case 1:P2=DSY_IDX[5]; P0=DSY_IDC[1];delayms(10);
break;

case 2:P2=DSY_IDX[5]; P0=DSY_IDC[2];         delayms(10);
break;

case 3: P2=DSY_IDX[5]; P0=DSY_IDC[3];delayms(10);
break;

case 4:P2=DSY_IDX[5]; P0=DSY_IDC[4];        delayms(10);
break;

case 5:P2=DSY_IDX[5]; P0=DSY_IDC[5];         delayms(10);
break;

case 6:M=M+1;P2=DSY_IDX[5]; P0=DSY_IDC[6];delayms(10);flag=0; count=3;  
break;
}

if(!K1) //主持人按键开始后参赛者按键才有效
{
delayms(20);//延时20ms按键消抖
if(!K1)//再次确认按键是否真的被按下
{
flag=0;
count=3;
P2=DSY_IDX[5];
P0=DSY_IDC[3];//中间那盏灯亮对应P13口
while(!K1);          //确认按键松开
}
}

}
}
}
}
}

设计者吴柱俊,微信:wu-zhu-jun ,贴吧号:wife101

单片机设计的电子拔河比赛.rar

147.58 KB, 下载次数: 74, 下载积分: 黑币 -5

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:328014 发表于 2019-5-5 22:09 | 显示全部楼层
好资料,51黑有你更精彩!!!
回复

使用道具 举报

ID:563319 发表于 2019-6-16 15:57 来自手机 | 显示全部楼层
你好请问有电路图吗?
回复

使用道具 举报

ID:571368 发表于 2019-6-25 10:32 | 显示全部楼层
有开发板的原理图吗?
回复

使用道具 举报

ID:789410 发表于 2020-6-29 14:25 | 显示全部楼层
有没有proteus仿真图啊
回复

使用道具 举报

ID:336895 发表于 2020-12-28 10:39 | 显示全部楼层
仿真没有任何变化,一直显示00
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表