课题任务
本课题任务
(联机乒乓球游戏)如下图所示:
同步显示
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

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部