标题: 新手求助八位抢答器 [打印本页]

作者: ccccllxx    时间: 2024-11-6 20:11
标题: 新手求助八位抢答器
有没有大佬做过八位抢答器,有什么需要注意的吗,如果从零开始我们需要如何去做。

作者: 飞云居士    时间: 2024-11-7 11:15
八位抢答器带锁定功能。一旦有选手按下按钮,我们将锁定其他按钮,直到主持人清除锁定状态。以下是C51代码:

```c
#include <reg51.h>

#define uchar unsigned char
#define uint unsigned int

// 假设P1是输入端口,连接抢答按钮,P0是输出端口,连接显示
sbit Buzzer = P3^7; // 假设P3.7连接蜂鸣器
bit isLocked = 0;   // 锁定状态标志

uchar code LED_Code[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; // 8位LED显示代码

// 延时函数
void Delay(uint z) {
    uint i, j;
    for (i = z; i > 0; i--)
        for (j = 120; j > 0; j--);
}

// 检测是否有人抢答并返回抢答的选手编号,如果没有返回0xFF
uchar CheckAnswer() {
    uchar i;
    if (!isLocked && P1 != 0xFF) { // 检测是否锁定状态,以及是否有按键按下
        Delay(10000); // 延时去抖
        if (P1 != 0xFF) { // 再次检测确保按键确实被按下
            for (i = 0; i < 8; i++) {
                if (P1 & LED_Code[i] == 0) { // 检测具体哪个按键被按下
                    isLocked = 1; // 设置锁定状态
                    P0 = LED_Code[i]; // 显示对应的LED
                    Buzzer = 1; // 蜂鸣器响
                    Delay(20000); // 延时
                    Buzzer = 0; // 蜂鸣器停
                    return i; // 返回抢答的选手编号
                }
            }
        }
    }
    return 0xFF; // 没有选手抢答或系统已锁定
}

// 主函数
void main() {
    P0 = 0xFF; // 初始化P0端口,关闭所有LED
    isLocked = 0; // 初始化锁定状态为未锁定
    while (1) {
        uchar answer = CheckAnswer(); // 检测是否有人抢答
        if (answer != 0xFF) { // 如果有人抢答
            // 这里可以添加主持人清除锁定状态的逻辑
            // 例如,当P3.6被按下时,清除锁定状态
            if (P3^6 == 0) { // 假设P3.6连接主持人的清除按钮
                Delay(10000); // 延时去抖
                if (P3^6 == 0) { // 再次检测确保按钮确实被按下
                    isLocked = 0; // 清除锁定状态
                    while (P3^6 == 0); // 等待按钮释放
                }
            }
        }
    }
}
```

在这个代码中,全局变量`isLocked`来表示锁定状态。当有选手抢答成功后,`isLocked`被设置为1,这样其他按钮的输入将被忽略,直到主持人通过按下P3.6按钮来清除锁定状态。

作者: cy009    时间: 2024-11-7 11:21
1.单片机:入门级就行,如STC89系列及以上,构建最小系统。
2.按键:至少9位(8位选手+1位复位)。
3.显示:入门级建议用数码管,1位即可。
4.程序中注意按键优先及约束,可以使用按键状态标志变量。
作者: wzg_90    时间: 2024-11-7 15:47
从硬件(仿真)和软件两个方面进行考虑,先学习别人做好的,进行参考,然后学会使用,在进行优化和提升
作者: 花少广    时间: 2024-11-7 17:38
单片机还是数字电路,其实很简单,提前做好仿真,按照仿真来做实物就行
作者: 花少广    时间: 2024-11-7 17:39
单片机还是数字电路,其实很简单,提前做好仿真,按照仿真搭建实物即可




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1