一、设计要求

1、电路使用 9 个发光二极管表示拔河的“电子绳”,开机后只有中间一个发亮,此即拔河的中心点。游戏甲乙双方各持一个按钮,迅速地、不断地按动产生脉冲,谁按得快,亮点向谁方向移动,每按一次,亮点移动一次。亮点移到任一方终端二极管,这一方就获胜,此时双方按钮均无作用,输出保持,只有复位后才使亮点恢复到中心

2、由裁判下达比赛开始命令后,甲乙双方才能输入信号,否则,输入信号无效

3、用数码管显示获胜者的盘数,每次比赛结束自动给获胜方加分

4、创新内容

1)添加一个指示灯。裁判按下按钮,指示灯闪亮三次后甲乙按下按钮才有效。当一方到达任一方的终端二极管,指示灯长亮。

2)添加预设按钮,可以对比赛的分数进行预设,当任意一方达到预设分数后,灯闪烁。

点按按钮,预设值加1;长按按钮预设值减一

二、整体模块

2.1单片机系统模块

图2-1

2.2按钮模块

   比分预设按钮(YUSEH)、玩家1(PLAYER1)、复位和开始按钮(RES-START)、玩家2(PLAYER2)

图2-2

2.3数码显示模块

   第一个数码管和第二个数码管(显示玩家1玩家2的得分);第三个数码管显示预设分数

图2-3

2.4二极管模块

图2-4

   2.5指示灯模块

图2-5

三、元件选择 

元件名称

元件个数

LED-YELLOW

×1

LED-BLUE

×5

LED-RED

×5

LED-GREEN

×1

7SEG-MPX4-CA

×1

PNP

×1

RES-300Ω

×9

RES-2000Ω

×1

RES-1000Ω

×2

RESPACK-8

×1

BUTTON

×5

80C52

×1

CRYSTAL

×1

CAP

×2

CAP-POL

×2

四、代码程序

 main.c

#include <reg52.h>
#include <intrins.h>
#include <demo.h>
#define uchar unsigned char
#define uint unsigned int
void main()
{init();disp();while(1){disp();key_init();}
}

demo.h

#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
void key_init();//控制灯左移右移
void delay(uchar z);//延时
void di(void);//蜂鸣器响应
void disp();//显示比分
void init();//初始化
void buzzer();//指示灯
void yushe();//预设比分制
void shanliang();//灯光闪亮

demo.c

#include <reg52.h>
#include <intrins.h>
#include <demo.h>
#define uchar unsigned char
#define uint unsigned int
sbit player1=P3^0;//玩家1计数
sbit player2=P3^1;//玩家2计数
sbit button1=P3^4;//复位--开始按钮
sbit button2=P3^2;//玩家1
sbit button3=P3^3;//玩家2
sbit button4=P3^7;//预设按键
sbit bee=P3^5;//指示灯
sbit numer=P3^6;//预设值
uchar temp1,temp2,a,b,num;
uchar n,m,c;//c=预设值
uchar y;//标志位 y
uint n1,n2;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//段码表段位,共阳数码管显示0到9
/*********************************************/
void delay(uchar z)//延时
{uchar i;while(z--)for(i=0;i<120;i++);
}
void disp()//控制数码管
{if(n>9){n=9;}if(m>9){m=9;}if(c>9){c=9;}if(c<0){c=0;}player1=1;P1=table[n];delay(10);player1=0;player2=1;P1=table[m];delay(10);player2=0;numer=1;P1=table[c];delay(10);numer=0;
}
void key_init()
{yushe();//预设if(button1==0)//按下开始按钮;端口P0,P2赋初值{buzzer();while(!button1);//类似于消除抖动,保证按下按钮只执行一次temp1=0xef;temp2=0xff; P0=temp1;P2=temp2;y=1;}if(button2==0&&y==1)//玩家1按下{while(!button2);delay(5);if(temp1!=0xef&&temp2==0xfe)//重新赋值{temp2=0xff;P2=temp2;temp1=0x7f;P0=temp1;}else{temp1=_cror_(temp1,1);P0=temp1;}}if(button3==0&&y==1)//玩家2{while(!button3);delay(5);if(temp2==0xff&&P0==0x7f)//判断是否在初始位置{temp1=0xff;P0=temp1;temp2=0xfe;P2=temp2;}else{temp1=_crol_(temp1,1);P0=temp1;}}            if(P0==0xfe&&y==1)//判断是否到最左{bee=0;y=0;n++;while(button1!=0&&n==c){shanliang();}}if(P2==0xfe&&y==1)//判断是否到最右{bee=0;y=0;m++;while(button1!=0&&m==c){shanliang();}}
}
void init()
{P0=0xef;n1=0;n2=0;num=0;n=0;m=0;bee=1;numer=0;c=0;}
void buzzer()
{bee=0;delay(2000);bee=1;delay(2000);bee=0;delay(2000);bee=1;delay(2000);bee=0;delay(2000);bee=1;
}
void yushe()
{if(button4==0){delay(1000);if(button4==0){while(!button4);c--;}else{while(!button4);c++;}}
}
void shanliang()
{P0=0xaa;P2=0xf1;delay(100);P0=0x55;P2=0x00;delay(100);
}

基于单片机的拔河游戏相关推荐

  1. c语言打地鼠窗口设计,基于单片机的打地鼠游戏设计

    覃丽姗 李宁 王恬灏 摘 要:打地鼠游戏是人们生活中常见的一种休闲小游戏,尤其受儿童的喜爱.打地鼠游戏玩法简单,考验人们的反应速度,能够充分的锻炼孩子的手眼协调能力.本文设计一种基于单片机的打地鼠游戏 ...

  2. 基于单片机模拟打地鼠游戏设计-protues仿真毕业

    资料下载地址-1056(百度网盘):点击下载 #include<reg52.h> #include<stdlib.h> sbit RS=P2^0; sbit EN=P2^1; ...

  3. 基于单片机的贪吃蛇游戏

    绪论 1.1 研究背景与意义 随着社会的发展,人们生活的步调日益加快,越来越多的人加入了全球化的世界. 人们不再拘泥于--,J,块天地,加班,出差成了现代人不可避免的公务.而此时一款可以 随时随地娱乐 ...

  4. 基于stm32单片机俄罗斯方块小游戏Proteus仿真

     资料编号:150​​​​​​​ 视频讲解: 150-基于stm32单片机俄罗斯方块小游戏Proteus仿真(源码+仿真+全套资料) 功能介绍: 通过stm32单片机作为主控,在LCD点阵屏上做出俄罗 ...

  5. ​基于STM32F407的五子棋游戏设计​

    本博客为资源:基于STM32F407的五子棋游戏设计内的说明文档. 目录 一.设计目标 三.设计方案 1.游戏模式 2.游戏过程 3.游戏设计 四.硬件配置 1.TFT-LCD液晶屏模块 (1)工作原 ...

  6. 怎样用cocos2d-x做一个基于地图块的游戏(Part One)

    怎样用cocos2d-X做一个基于地图块的游戏 (Part One) 在这个分为上下两部分的教程中,我们将介绍如何使用Cocos2D-X和地图编辑器做一款基于地图块的游戏.在这个简单的地图块游戏里,一 ...

  7. 大数据文字游戏_基于大数据的游戏化教学系统研究.docx

    基于大数据的游戏化教学系统研究 ―.引言 目前,我国高校在线开放课程的建设已经取得了较大的发展,在线课程的使用已经使高 校教学发生了巨大的变化.课程的网络资源可以作为延伸课堂教学的工具,有效减轻了课堂 ...

  8. 单片机声光电子琴程序流程图_基于单片机的智能家居控制系统毕业设计

    次毕业设计主要包括硬件端和软件端,硬件端功能如下: 使用 DS1302 模块产生时钟数据并实现时间和日历实时显示: 使用 DS18B20 模块检测周围环境温度并实时显示: 使用烟雾和光敏传感器模块对房 ...

  9. c语言五子棋开题报告,基于VC的五子棋游戏的设计与实现(附答辩记录)

    基于VC的五子棋游戏的设计与实现(附答辩记录)(包含选题审批表,任务书,开题报告,中期检查报告,毕业论文12300字,程序) 摘 要:以计算机技术和网络技术为核心的现代网络技术已在现实生活和生产中得以 ...

最新文章

  1. 数据挖掘-matplotlib、numpy、pandas
  2. Ubuntu .deb包安装方法
  3. 智能车竞赛技术报告 | 单车拉力组 - 沈阳航空航天大学 - 青梅绿茶队
  4. thinkphp中data方法
  5. 集合之四:List接口
  6. java 进入catch,JAVA + try catch(FileNotFoundException e)进入catch(Exception e)?
  7. 二进制、八进制、十六进制和十进制的相互转换,原码反码补码计算以及Java中数字的存储
  8. ‘复杂变简单‘的代码例子
  9. Codeigniter 3 拓展HMVC
  10. [css] 清除浮动的方式有哪些及优缺点?
  11. 那一种笔记软件更好用_制作更好的面向用户软件的7种方法
  12. SQL:having和where的区别
  13. Android轩辕剑之ActionBar之二
  14. 逆向四、JEB的使用
  15. MYSQL简单题目和知识点
  16. java 调用gephi_Gephi可视化(一)——使用Gephi Toolkit创建Gephi应用
  17. 伦敦银现的交易时间特点
  18. 正态性检验的R语言实现
  19. 自定义json格式-解析为对象
  20. 产品开发中的经验教训

热门文章

  1. Linux创建用户并赋予Root权限
  2. oracle 表单重命名,Oracle重命名表
  3. 小程序源码:全新圣诞节头像框制作生成-多玩法安装简单
  4. Android路由方案ARouter分析
  5. 从0到1实现一个Android路由(1)——初探路由
  6. Silverlight C# 游戏开发:无尽的夜空
  7. SAP-MM 移动平均价和标准价
  8. 微信可以改微信号了,你要改吗?
  9. LINUX UBUNTU 通过共享文件夹在UBUNTU VIM 下打开的乱码问题
  10. 大数据审计的发展_科技赋能下大数据审计的实施路径与发展趋势