课题任务
本课题任务
(联机乒乓球游戏)如下图所示:
同步显示
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两机各个模块程序的实现方法(串
口/波特率设置等),包含文字描述、伪代码或
程序流程图。
测试结果与结论
进行了什么测试,测试了多少情况下的截图和
文字说明,根据测试得出结论:设计是否功能
正确且完整?
总结
最后对本课题的设计进行总结和自我评价(自
己觉得做得好不好,有没有什么缺陷)。
本课题任务是设计一个联机乒乓球游戏,使用两台单片机,每台单片机接8个LED和一个按键,两个单片机通过串口连接实现同步显示和控制。具体要求如下:
主机(A机)控制8个LED灯的亮灭情况,从机(B机)8个LED需要与A机同步显示。
8个LED灯最多只有一个灯亮,并以走马灯形式左右移动。
当走马灯移动到最左边时A机按键按下,灯反弹向右边,若失败灯全灭;灯移动到最右边时B机按键按下,灯反弹向左边,若失败灯全灭。提早按下按键,灯也会全灭。
同步显示: 通过串口通信实现A机和B机的LED灯状态同步。A机负责控制灯的移动并通过串口发送当前灯的状态到B机。
B机按键影响LED: B机通过检测按键状态,将检测结果发送回A机。A机根据接收到的按键状态决定LED灯的移动方向或全灭。
LED移动控制: A机控制LED灯以走马灯形式左右移动,并在按键按下时反弹。
失败判断: A机和B机分别检测灯的位置和按键状态,若按键按下时灯不在相应位置,判定为失败并全灭LED。
整个系统划分为以下模块:
串口通信模块
LED控制模块
按键检测模块
状态处理模块
plaintext+-------------------+ | 主机 A | | +---------------+ | | | LED控制模块 |<---按键检测模块 | +---------------+ | | | | | v | | +---------------+ | | | 串口通信模块 |<-->串口通信 | +---------------+ | +-------------------+ | v +-------------------+ | 从机 B | | +---------------+ | | | LED同步模块 |<---按键检测模块 | +---------------+ | | | | | v | | +---------------+ | | | 串口通信模块 |<-->串口通信 | +---------------+ | +-------------------+
(此处应插入Proteus仿真电路图)
单片机: 用于控制LED的亮灭和处理按键输入。
LED: 显示灯的状态。
按键: 用于控制灯的反弹。
串口连接: 实现两台单片机之间的数据通信。
使用如下参数进行串口初始化:
晶振频率: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; // 开启总中断
}
主机A控制LED灯的移动,当检测到按键按下时,改变灯的移动方向。
csbit S0 = P1 ^ 0; // 定义按键输入
void main() {
UartInit();
while (1) {
if (S0 == 0) {
send('1'); // 按键按下发送1
while (S0 == 0); // 等待按键释放
}
}
}
从机B检测按键状态并将结果发送回主机A。
cunsigned char Txd_data;
void Uart_isr() interrupt 4 {
if (RI) {
Txd_data = SBUF; // 读入缓冲区
RI = 0; // 清标志
P2 = Txd_data; // 显示接收到的数据
}
}
测试A机控制LED灯的移动情况,确保LED灯以走马灯形式移动。
测试B机同步显示A机的LED灯状态,确保同步准确。
测试按键控制灯的反弹效果,确保按键操作准确反应。
测试失败判定,确保按键误操作时灯全灭。
各模块功能均正常,LED灯移动、同步显示、按键控制、失败判定均实现预期功能。
额外功能(如重开局、加速)测试正常。
本课题设计了一个两机联机乒乓球游戏,通过串口通信实现两台单片机的同步显示和控制。系统设计合理,功能实现完整。测试结果表明各模块工作正常,满足设计要求。通过本次实验,对单片机串口通信、LED控制和按键检测有了更深入的理解和掌握。在未来的设计中,可以考虑增加更多功能,如增加难度调节、计分系统等,以提升游戏的趣味性和挑战性。
https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2
本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!