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