基于51单片机的串口乒乓球小游戏

基于51单片机的乒乓球小游戏

(仿真+程序)

功能介绍

具体功能:

1.用两块单片机串口进行通信;

2.一排LED模拟乒乓球运动(哪里亮表示运动到哪);

3.当最左边LED亮,表示球运动到左边,需要左方击球;

4.当最右边LED亮,表示球运动到右边,需要右方击球;

5.复位按键模拟发球;

​演示视频:

基于51单片机的乒乓球小游戏 

添加图片注释,不超过 140 字(可选)

主机程序

#include<reg51.h>	 
#define uchar unsigned char
#define uint unsigned int
/***公众号:木子单片机****/
uchar led_data=0x80;
uchar flag=0;
uchar send_data=0x80;
uchar send_flag=1;


//************************************
//串口初始化	
//************************************

void Init_Uart()
{
  SCON = 0X50;	//设置串口工作在方式1,允许接收
  TMOD |= 0x20;	//定时器工作在方式2
  TH1   = 0xfd;	//9600波特率
  TL1   = 0xfd;
  EA    = 1;  //总中断
  TR1   = 1;
  REN=1;//允许串口接收
  ES    = 1;  //允许中断
}
//定时器初始化
void Init_Time()
{
  //初始化定时器10ms
  TMOD|=0X01;
  TH0=(65536-10000)/256;
  TL0=(65536-10000)%256;
  EA=1;
  ET0=1;
  TR0=1;
}

//串口输出数据
void TX_data(uchar num)
{
  
  SBUF = num;
  while(!TI);
  TI=0;
  
}

void Ex0_Init()  //外部中断
{
  EX0=1;//打开外部中断
  IT0=1;//下降沿中断
}

//主函数
void main(void)
{
  Ex0_Init();
  Init_Uart(); //串口初始化
  Init_Time();	//定时器初始化
  while(1)
  {		
    P0=~led_data;
	if(send_flag)
	{
	TX_data(send_data);
	send_flag=0;
	}
  }
}
void EX0_INTER() interrupt 0    //外部中断1
{
  if(led_data==0x01)//刚好按下此时反向
  {
     flag=1;
	send_flag=1; 
	send_data=0xff; 
  }
  else
  {
  	flag=2;
	led_data=0;
	send_flag=1; 
	send_data=0; 
  }
}
//串口中断子函数
void Uart_INT(void) interrupt 4     
{
  uchar temp=0;
  if(RI==1)	//如果接收到了数据  
  { 
    RI=0; 
    temp=SBUF;//接收数据
	if(temp==0xff)
	{
	  flag=0;
	  led_data=0x80;
	}
	else
	{
	led_data=temp;
	}
  }
}

//定时中断子程序
void time0(void) interrupt 1 using 1  
{
  static uchar temp_time=0;
  TH0=(65536-10000)/256;//10MS
  TL0=(65536-10000)%256;

    if(++temp_time>=30)//1s
    {
      temp_time=0;
	  if(flag==0) //左移
	  {
		  if(led_data==0x01)//移动到最左边也没有按键那就失败
		  {
		   	led_data=0;
			flag=2;
			send_flag=1; 
		    send_data=0; 
			return;
		  }
		  led_data=led_data>>1;;
		  send_flag=1; 
		  send_data=led_data;
	  }

    }

  
}



硬件设计

使用元器件:

单片机:AT89C51;

(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)

添加图片注释,不超过 140 字(可选)

设计资料

01仿真图

本设计使用proteus7.8版本设计,与其他版本不兼容!具体如图!

添加图片注释,不超过 140 字(可选)

02程序

本设计使用软件keil5版本编程设计!具体如图!

 

03设计资料

        资料获取请关注同名公众号,全部资料包括仿真源文件 、程序(含注释)等。具体内容如下,全网最全! !

 

可以关注下方公众号!

点赞分享一起学习成长。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/692917.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

多种策略提升线上 tensorflow 模型推理速度

前言 本文以最常见的模型 Bi-LSTM-CRF 为例&#xff0c;总结了在实际工作中能有效提升在 CPU/GPU 上的推理速度的若干方法&#xff0c;包括优化模型结构&#xff0c;优化超参数&#xff0c;使用 onnx 框架等。当然如果你有充足的 GPU &#xff0c;结合以上方法提升推理速度的效…

Vue学习笔记_Day02

文章目录 1&#xff0c;指令修饰符2&#xff0c;样式控制3&#xff0c;v-model进阶4&#xff0c;计算属性5&#xff0c;监视器6&#xff0c;生命周期 1&#xff0c;指令修饰符 跟在指令后面&#xff0c;具有特殊的功能。 事件修饰符&#xff1a; .enter&#xff1a;只有enter…

C#异步编程是怎么回事

首先以一个例子开始 我说明一下这个例子。 这是一个演示异步编程的例子。 输入job [name],在一个同步的Main方法中,以一发即忘的方式调用异步方法StartJob()。输入time,调用同步方法PrintCurrentTime()输出时间。输出都带上线程ID,便于观察。 可以看到,主线程不会阻塞。主…

Django框架中Ajax GET与POST请求的实战应用

系列文章目录 以下几篇侧重点为JavaScript内容0.0 JavaScript入门宝典&#xff1a;核心知识全攻略&#xff08;上&#xff09;JavaScript入门宝典&#xff1a;核心知识全攻略&#xff08;下&#xff09;Django框架中Ajax GET与POST请求的实战应用VSCode调试揭秘&#xff1a;L…

@BeforeAll 和 @AfterAll 必须是 static 的原因

BeforeAll 和 AfterAll 必须是 static 的原因 执行时机&#xff1a; BeforeAll 方法在所有测试方法之前运行。AfterAll 方法在所有测试方法之后运行。 实例化前/后的执行&#xff1a; 因为 BeforeAll 是在所有测试方法执行之前运行的&#xff0c;所以它在任何一个测试实例创建…

拉格朗日乘子将不等式约束转化为等式约束例子

拉格朗日乘子将不等式约束转化为等式约束例子 在优化问题中,常常需要将不等式约束转化为等式约束。使用拉格朗日乘子法,可以通过引入松弛变量将不等式约束转换为等式约束,然后构造拉格朗日函数进行求解。 拉格朗日乘子法简介 拉格朗日乘子法是求解带约束优化问题的一种方…

Rust-02-变量与可变性

在Rust中&#xff0c;变量和可变性是两个重要的概念。 变量&#xff1a;变量是用于存储数据的标识符。在Rust中&#xff0c;变量需要声明其类型&#xff0c;例如&#xff1a; let x: i32 5; // 声明一个名为x的变量&#xff0c;类型为i32&#xff08;整数&#xff09;&#…

jasypt配置文件密码加密解码

1. 需求讲解 对配置文件的组件密码加密,比如数据库redis等密码加密 2. 开发 2.1 依赖引入 <!-- jasypt 加解密 --><dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><v…

【C语言】动态内存经典笔试题(下卷)

前言 如果说动态内存是C语言给我们的一个工具&#xff0c;那么只有掌握了工具的特点我们才能更好地使用。 紧随上卷&#xff0c;我们再来看看动态内存另外两道经典的笔试题。 &#xff08;建议没看过上卷的朋友可以先看完上卷再回来&#xff1a;【C语言】动态内存经典笔试题…

Java面试八股之什么是自动装箱和自动拆箱

什么是自动装箱和自动拆箱 在Java中&#xff0c;自动装箱&#xff08;Autoboxing&#xff09;和自动拆箱&#xff08;Auto-unboxing&#xff09;是两个与基本数据类型和它们对应的包装类之间的转换相关的特性。这两个概念自Java 5&#xff08;也称为Java SE 5或JDK 5&#xff…

牛客NC18 顺时针旋转矩阵【中等 数学 Java/Go/PHP/C++】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/2e95333fbdd4451395066957e24909cc https://www.lintcode.com/problem/161/ 思路 Java代码 import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#…

C#操作MySQL从入门到精通(16)——使用子查询

前言: 我们在查询数据的过程中有时候查询的数据不是从数据库中来的,而是从另一个查询的结果来的,这时候就需要使用子查询,本文使用的测试数据如下: 1、子查询 下面的代码就是先查询地址是安徽和广西的学生年龄,然后获取年龄对应的姓名 private void button__SubQuery…

像素蛋糕Photoshop颜色导出不一致问题分析与解决

问题点&#xff1a;发现用像素蛋糕修完图明天应该为最右边图片显示 模特应该是白皙的&#xff0c;但是导出图片无论是否勾选SRGB都表现的为种间图片颜色一样 饱和度巨高。 问题分析&#xff1a;那这一定是颜色配置文件出现问题&#xff0c;找到客服表示可以去PS打开看是否与预…

彼长技以助己(5)量级思维

彼长技以助己&#xff08;5&#xff09;量级思维 数字感性与理性测试 我先讲一个可能发生在我们身边的故事&#xff1a;一个程序员在一个项目开发中使用了考虑到目前业务量少&#xff0c;快速写了一个冒泡排序&#xff0c;结果被经理批评了&#xff0c;然后他跑来找你诉苦&am…

Application Load Balancer-ALB

Application Load Balancer-ALB 什么是ALB开通ALB服务实现IPv4服务的负载均衡创建ALB实例创建服务器组添加后端服务器配置监听设置域名解析&#xff08;可选&#xff09;释放ALB实例 什么是ALB 在介绍ALB之前首先介绍一下负载均衡SLB&#xff0c;可以说SLB是负载均衡家族之首 …

CentOS7 配置Nginx域名HTTPS

Configuring Nginx with HTTPS on CentOS 7 involves similar steps to the ones for Ubuntu, but with some variations in package management and service control. Here’s a step-by-step guide for CentOS 7: Prerequisites Domain Name: “www.xxx.com”Nginx Install…

目录穿越漏洞CVE-2018-7171复现 又学到一招小技巧!!!!

还是半夜睡不着&#xff0c;打开靶机开始操作。今天看了文件下载和目录穿越漏洞想结合以及防御方法。半夜来进行操作一波。复现一下漏洞&#xff0c;这个网上的文章页比较的少&#xff01;&#xff01;&#xff01; 开始操作起来&#xff01;&#xff01;&#xff01; 进入到页…

【初识Objective-C】

Objective-C学习 什么是OCOC的特性OC跑的第一个程序helloworld OC的一些基础知识标识符OC关键字数据类型字符型c字符串为什么NSString类型定义时前面要加和普通的c对象有什么区别 一些基础知识if语句switch语句三种循坏语句for循环&#xff1a;用于固定次数的循环while循环&…

小成代码路的错误2

文章目录 1.继承中子类和父类之间的隐藏&#xff1b;只要函数名字相同就会出现隐藏&#xff1b;这里和函数的参数无关&#xff1b;继承的析构函数会自动先调用子类的析构函数再调用父类的析构函数&#xff1b;不需要写仍和的父类的析构函数&#xff1b;继承中的静态成员在父类中…

SpringBoot3学习总结

一.SpringBoot3介绍 (一)主要目标 SpringBoot的主要目标是&#xff1a; 为所有 Spring 开发提供更快速、可广泛访问的入门体验。 开箱即用&#xff0c;设置合理的默认值&#xff0c;但是也可以根据需求进行适当的调整 提供一系列大型项目通用的非功能性程序&#xff08;如…