【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两机各个模块程序的实现方法(串

口/波特率设置等),包含文字描述、伪代码或

程序流程图。

测试结果与结论

进行了什么测试,测试了多少情况下的截图和

文字说明,根据测试得出结论:设计是否功能

正确且完整?

总结

最后对本课题的设计进行总结和自我评价(自

己觉得做得好不好,有没有什么缺陷)。


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

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控制模块
  • 按键检测模块
  • 状态处理模块
plaintext 复制代码
+-------------------+
|      主机 A       |
| +---------------+ |
| | LED控制模块   |<---按键检测模块
| +---------------+ |
|         |         |
|         v         |
| +---------------+ |
| | 串口通信模块 |<-->串口通信
| +---------------+ |
+-------------------+
        |
        v
+-------------------+
|      从机 B       |
| +---------------+ |
| | LED同步模块   |<---按键检测模块
| +---------------+ |
|         |         |
|         v         |
| +---------------+ |
| | 串口通信模块 |<-->串口通信
| +---------------+ |
+-------------------+

3. 电路设计

3.1 电路图

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

3.2 器件功能介绍

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

4. 程序设计

4.1 串口初始化

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

  • 晶振频率:11.0592MHz
  • 波特率:9600bps
代码描述
c 复制代码
#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灯的移动,当检测到按键按下时,改变灯的移动方向。

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

void main() {
    UartInit();

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

4.3 按键检测模块

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

代码描述
c 复制代码
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
相关推荐
IT B业生10 小时前
51单片机教程(六)- LED流水灯
单片机·嵌入式硬件·51单片机
一枝小雨10 小时前
51单片机学习心得2(基于STC89C52):串口通信(UART)
单片机·嵌入式硬件·51单片机
IT B业生11 小时前
51单片机教程(一)- 开发环境搭建
单片机·嵌入式硬件·51单片机
好想有猫猫13 小时前
【51单片机】串口通信原理 + 使用
c语言·单片机·嵌入式硬件·51单片机·1024程序员节
IT B业生1 天前
51单片机教程(三)- 了解开发板
单片机·嵌入式硬件·51单片机
腾飞的信仰1 天前
51单片机 定时器详解
单片机·嵌入式硬件·51单片机
IT B业生2 天前
51单片机教程(五)- LED灯闪烁
51单片机
好想有猫猫3 天前
【51单片机】矩阵键盘
单片机·嵌入式硬件·矩阵·计算机外设·51单片机·学习方法
IT B业生5 天前
51单片机教程(二)- 创建项目
单片机·嵌入式硬件·51单片机
IT B业生5 天前
51单片机教程(四)- 点亮LED灯
单片机·嵌入式硬件·51单片机