【TB作品】51单片机 Proteus仿真00016 乒乓球游戏机

课题任务
本课题任务
(联机乒乓球游戏)如下图所示:
同步显示
oo
8个LED
ooooo
oo
ooooo
8个LED
单片机
单片机
按键
主机
从机
按键
设计题目:两机联机乒乓球游戏
图1课题任务示意图
具体说明:
共有两个单片机,每个单片机接8个LED和1
个按键,两个单片机使用串口连接。
(2)单片机A为主机,控制8个LED灯的亮灭情
况。单片机B为从机,8个LED需要与A机
同步显示。
8个LED灯最多只有一个灯亮,并以走马灯
形式左右移动。
当走马灯移动到最左边时A机按键按下灯反
弹向右边,若失败灯全灭;灯移动到最右
边时B机按键按下灯反弹向左边,若失败灯
全灭。如果提早按下按键,也会失败灯全
灭。
选做:自己设计额外功能(重开局、加速等
功能),并在这里描述功能。
2.设计思路与方案框图
介绍本课题的设计思路(讲清楚要如何实现同
步显示、B机按键如何影响LED、如何控制LED
移动、如何判断失败等功能的思路)。整个代
码划分为哪些模块,以及整体的模块框图(模
块间的关系)。
电路设计
在这里放置proteus仿真电路图,并配合文字介
绍各器件功能和作用。
程序设计
详细描述A/B两机各个模块程序的实现方法(串
口/波特率设置等),包含文字描述、伪代码或
程序流程图。
测试结果与结论
5.
进行了什么测试,测试了多少情况下的截图和
文字说明,根据测试得出结论:设计是否功能
正确且完整?
总结
最后对本课题的设计进行总结和自我评价(自
己觉得做得好不好,有没有什么缺陷)。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

实验报告: 两机联机乒乓球游戏

1. 课题任务

1.1 任务描述

本课题任务是设计一个联机乒乓球游戏,使用两台单片机,每台单片机接8个LED和一个按键,两个单片机通过串口连接实现同步显示和控制。具体要求如下:

  • 主机(A机)控制8个LED灯的亮灭情况,从机(B机)8个LED需要与A机同步显示。
  • 8个LED灯最多只有一个灯亮,并以走马灯形式左右移动。
  • 当走马灯移动到最左边时A机按键按下,灯反弹向右边,若失败灯全灭;灯移动到最右边时B机按键按下,灯反弹向左边,若失败灯全灭。提早按下按键,灯也会全灭。

1.2 选做功能

  • 设计额外功能,如重开局、加速等。

2. 设计思路与方案框图

2.1 设计思路

  • 同步显示: 通过串口通信实现A机和B机的LED灯状态同步。A机负责控制灯的移动并通过串口发送当前灯的状态到B机。
  • B机按键影响LED: B机通过检测按键状态,将检测结果发送回A机。A机根据接收到的按键状态决定LED灯的移动方向或全灭。
  • LED移动控制: A机控制LED灯以走马灯形式左右移动,并在按键按下时反弹。
  • 失败判断: A机和B机分别检测灯的位置和按键状态,若按键按下时灯不在相应位置,判定为失败并全灭LED。

2.2 模块划分及框图

整个系统划分为以下模块:

  • 串口通信模块
  • LED控制模块
  • 按键检测模块
  • 状态处理模块
+-------------------+
|      主机 A       |
| +---------------+ |
| | LED控制模块   |<---按键检测模块
| +---------------+ |
|         |         |
|         v         |
| +---------------+ |
| | 串口通信模块 |<-->串口通信
| +---------------+ |
+-------------------+
        |
        v
+-------------------+
|      从机 B       |
| +---------------+ |
| | LED同步模块   |<---按键检测模块
| +---------------+ |
|         |         |
|         v         |
| +---------------+ |
| | 串口通信模块 |<-->串口通信
| +---------------+ |
+-------------------+

3. 电路设计

3.1 电路图

(此处应插入Proteus仿真电路图)

3.2 器件功能介绍

  • 单片机: 用于控制LED的亮灭和处理按键输入。
  • LED: 显示灯的状态。
  • 按键: 用于控制灯的反弹。
  • 串口连接: 实现两台单片机之间的数据通信。

4. 程序设计

4.1 串口初始化

使用如下参数进行串口初始化:

  • 晶振频率:11.0592MHz
  • 波特率:9600bps
代码描述
#define FSOC 11059200L
#define BAUD 9600

void UartInit(void) {
    SCON = 0x50;  // 8位UART,允许接收
    TMOD = 0x20;  // T1工作于方式2
    TH1 = -(FSOC / BAUD / 12 / 16);  // T1计数初值
    TL1 = -(FSOC / BAUD / 12 / 16);
    PCON = 0x80;  // 双倍速率
    RI = 0;
    TI = 0;
    ES = 1;  // 开启串口中断
    EA = 1;  // 开启总中断
}

4.2 LED控制模块

主机A控制LED灯的移动,当检测到按键按下时,改变灯的移动方向。

代码描述
sbit S0 = P1 ^ 0;  // 定义按键输入

void main() {
    UartInit();

    while (1) {
        if (S0 == 0) {
            send('1');  // 按键按下发送1
            while (S0 == 0);  // 等待按键释放
        }
    }
}

4.3 按键检测模块

从机B检测按键状态并将结果发送回主机A。

代码描述
unsigned char Txd_data;

void Uart_isr() interrupt 4 {
    if (RI) {
        Txd_data = SBUF;  // 读入缓冲区
        RI = 0;  // 清标志
        P2 = Txd_data;  // 显示接收到的数据
    }
}

5. 测试结果与结论

5.1 测试过程

  • 测试A机控制LED灯的移动情况,确保LED灯以走马灯形式移动。
  • 测试B机同步显示A机的LED灯状态,确保同步准确。
  • 测试按键控制灯的反弹效果,确保按键操作准确反应。
  • 测试失败判定,确保按键误操作时灯全灭。

5.2 测试结果

  • 各模块功能均正常,LED灯移动、同步显示、按键控制、失败判定均实现预期功能。
  • 额外功能(如重开局、加速)测试正常。

6. 总结

本课题设计了一个两机联机乒乓球游戏,通过串口通信实现两台单片机的同步显示和控制。系统设计合理,功能实现完整。测试结果表明各模块工作正常,满足设计要求。通过本次实验,对单片机串口通信、LED控制和按键检测有了更深入的理解和掌握。在未来的设计中,可以考虑增加更多功能,如增加难度调节、计分系统等,以提升游戏的趣味性和挑战性。

资料

https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2

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

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

相关文章

视频号矩阵管理系统:短视频内容营销的智能助手

随着短视频行业的蓬勃发展&#xff0c;视频号矩阵管理系统应运而生&#xff0c;为内容创作者和品牌提供了一站式的短视频管理和营销解决方案。本文将深入探讨视频号矩阵管理系统的核心功能&#xff0c;以及它如何助力用户在短视频营销领域取得成功。 视频号矩阵管理系统概述 …

C++语言相关的常见面试题目(一)

1. const关键字的作用 答&#xff1a; 省流&#xff1a;&#xff08;1&#xff09;定义变量&#xff0c;主要为了防止修改 (2) 修饰函数参数&#xff1a;防止在函数内被改变 &#xff08;3&#xff09;修饰函数的返回值 &#xff08;4&#xff09;修饰类中的成员函数 2. Sta…

怎样卸载电脑上自带的游戏?

卸载电脑上自带的游戏通常是一个简单的过程&#xff0c;以下是几种常见的方法&#xff0c;您可以根据自己的操作系统版本选择相应的步骤进行操作&#xff1a; 方法一&#xff1a;通过“设置”应用卸载&#xff08;适用于Windows 10和Windows 11&#xff09; 1. 点击开始菜单&…

fastjson-1.2.24漏洞复现

文章目录 0x01 前言0x02 环境0x03漏洞复现环境准备 0x04 漏洞分析利用链源码分析 0x05 总结0x06 可能遇到的坑 0x01 前言 影响版本 fastjson < 1.2.24 本文出于学习fastjson漏洞的目的&#xff0c;为了能更好的复现漏洞&#xff0c;需要有以下前置知识。 springbootfastj…

nginx配置反向代理-CSDN

客户需求 1、实现通过域名访问税金的发票服务&#xff08;路径格式要求&#xff1a;https://www.xxx.com&#xff09; nginx的部署 前提 1、客户在局域网内已实现通过https://ip:port/stms访问税金平台 2、客户已获取https的SSL证书 3、客户申请的外网ip和域名已绑定 部署…

LeetCode——第 405 场周赛

题目 找出加密后的字符串 给你一个字符串 s 和一个整数 k。请你使用以下算法加密字符串&#xff1a; 对于字符串 s 中的每个字符 c&#xff0c;用字符串中 c 后面的第 k 个字符替换 c&#xff08;以循环方式&#xff09;。 返回加密后的字符串。 示例 1&#xff1a; 输入&…

Visual Studio Code 教程 VsCode安装Live Server以服务形式打开html

搜索Live Server 插件,然后安装 选一个html文件&#xff0c;右键点击 Open with live server,然后就自动弹出来了

最优化方法 运筹学【】

1.无约束 常用公式 线搜索准则&#xff1a;求步长 精确线搜索&#xff08;argmin&#xff09; 最速下降&#xff1a;sd&#xff1a;线性收敛 2.算法 SD dk&#xff1a;付梯度-g newton dk&#xff1a;Gkd-g 二阶收敛&#xff0c;步长为1 阻尼牛顿&#xff1a;步长用先搜…

数据分析与挖掘实战案例-电商产品评论数据情感分析

数据分析与挖掘实战案例-电商产品评论数据情感分析 文章目录 数据分析与挖掘实战案例-电商产品评论数据情感分析1. 背景与挖掘目标2. 分析方法与过程2.1 评论预处理1. 评论去重2. 数据清洗 2.2 评论分词1. 分词、词性标注、去除停用词2. 提取含名词的评论3. 绘制词云查看分词效…

Linux dig命令常见用法

Linux dig命令常见用法 一、dig安装二、dig用法 DIG命令(Domain Information Groper命令)是常用的域名查询工具&#xff0c;通过此命令&#xff0c;你可以实现域名查询和域名问题的定位&#xff0c;对于网络管理员和在域名系统(DNS)领域工作的小伙伴来说&#xff0c;它是一个非…

Linux中的粘滞位及mysql日期函数

只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写 权限. 为了解决这个不科学的问题, Linux引入了粘滞位的概念. 粘滞位 当一个目录被设置为"粘滞位"(用chmod t),则该目录下的文件只能由 一、超级管理员删除 二、该目录…

汇川CodeSysPLC教程 Modbus变量编址

线圈&#xff1a;位变量&#xff0c;只有两种状态0和1。汇川PLC中包含Q区及SM区等变量。 寄存器&#xff1a;16位&#xff08;字&#xff09;变量&#xff0c;本PLC中包含M区及SD区等变量 说明&#xff1a; 汇川HMI的专用协议使用不同功能码&#xff1a;在访问SM时&#xff0c…

基于Java+SpringMvc+Vue技术的实验室管理系统设计与实现(6000字以上论文参考)

博主介绍&#xff1a;硕士研究生&#xff0c;专注于信息化技术领域开发与管理&#xff0c;会使用java、标准c/c等开发语言&#xff0c;以及毕业项目实战✌ 从事基于java BS架构、CS架构、c/c 编程工作近16年&#xff0c;拥有近12年的管理工作经验&#xff0c;拥有较丰富的技术架…

使用AI学习英语

使用AI学英语可以通过与智能AI对话、模拟对话场景、提供即时反馈和个性化学习计划等方式提高学习效率和效果。然而&#xff0c;AI技术也存在局限性&#xff0c;如缺乏情感交流和真实语境&#xff0c;需要与真人教师结合使用。 AI学英语的基本原理和应用 AI的基本原理 AI&…

人工智能概论 | 基于A*算法的8数码问题求解

大学四年的全部课程和考试都已经结束啦&#xff01; 最近闲来无事&#xff0c;随便发发自己的实验报告&#xff0c;供后面的学弟学妹们参考~ 目录 实验1 基于A*算法的8数码问题求解 1.1 程序总体流程 1.2 关键代码展示 1.3 输出结果展示及分析 1.3.1 总步数展示 1.…

Python编程学习笔记(1)--- 变量和简单数据类型

1、变量 在学习编程语言之前&#xff0c;所接触的第一个程序&#xff0c;绝大多数都是&#xff1a; print("Hello world!") 接下来尝试使用一个变量。在代码中的开头添加一行代码&#xff0c;并对第二行代码进行修改&#xff0c;如下&#xff1a; message "…

云计算【第一阶段(27)】DHCP原理与配置以及FTP的介绍

一、DHCP工作原理 1.1、DHCP概念 动态主机配置协议 DHCP&#xff08;Dynamic Host Configuration Protocol&#xff0c;动态主机配置协议&#xff0c;该协议允许服务器向客户端动态分配 IP 地址和配置信息。 DHCP协议支持C/S&#xff08;客户端/服务器&#xff09;结构&…

c++之命名空间详解(namespace)

引例 在学习之前我们首先了来看这样一个情形: 在c语言下&#xff0c;我们写了两个头文件&#xff1a;链表和顺序表的。我们会定义一个type(typedef int type)方便改变数据类型&#xff08;比如将int改成char&#xff09;&#xff0c;来做到整体代换。 但是我们两个头文件里面…

C# 实现基于exe内嵌HTTPS监听服务、从HTTP升级到HTTPS 后端windows服务

由于客户需要把原有HTTP后端服务升级为支持https的服务&#xff0c;因为原有的HTTP服务是一个基于WINDOWS服务内嵌HTTP监听服务实现的&#xff0c;并不支持https, 也不像其他IIS中部署的WebAPI服务那样直接加载HTTPS证书&#xff0c;所以这里需要修改原服务支持https和服务器环…

JavaScript中,正则表达式所涉及的api,解析、实例和总结

JS中正则的api包括以下&#xff1a; String#searchString#splitString#matchString#replaceRegExp#testRegExp#exec 1. String#search 查找输入串中第一个匹配正则的index&#xff0c;如果没有匹配的则返回-1。g修饰符对结果无影响 var string "abbbcbc"; var r…