4位抢答器C语言程序
时间: 2025-06-30 21:22:38 浏览: 9
### 4位抢答器C语言实现
以下是基于单片机的四位抢答器程序,采用C语言编写。此程序通过中断检测按键输入并锁定第一个按下的按键信号。
#### 主要功能描述
1. 使用四个独立按键作为抢答按钮。
2. 当任意一个按键被按下时,对应的编号会在数码管上显示。
3. 锁定机制:一旦某个按键被按下,则其他按键无效,直到复位操作完成。
#### 完整代码示例
```c
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
// 数码管显示字符表
uchar code table[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};
sbit start = P3^6; // 开始按钮
sbit reset = P3^7; // 复位按钮
sbit key1 = P1^0; // 抢答键1
sbit key2 = P1^1; // 抢答键2
sbit key3 = P1^2; // 抢答键3
sbit key4 = P1^3; // 抢答键4
uint flag = 0; // 标志变量,用于判断是否有按键按下
uchar winner = 0; // 获胜者编号
void delay(uint z) {
uint x, y;
for (x = 0; x < z; x++)
for (y = 0; y < 120; y++);
}
void display(uchar num) {
P0 = table[num]; // 显示对应数字到数码管
}
void init() {
TMOD = 0x01; // 设置定时器模式
TH0 = (65536 - 1000) / 256; // 初始化定时初值
TL0 = (65536 - 1000) % 256;
EA = 1; // 打开总中断
ET0 = 1; // 打开T0中断
}
void timer_interrupt() interrupt 1 {
static uint count = 0;
TH0 = (65536 - 1000) / 256; // 重载定时初值
TL0 = (65536 - 1000) % 256;
if (!flag && !key1) {
flag = 1;
winner = 1;
} else if (!flag && !key2) {
flag = 1;
winner = 2;
} else if (!flag && !key3) {
flag = 1;
winner = 3;
} else if (!flag && !key4) {
flag = 1;
winner = 4;
}
}
void main() {
init();
while (1) {
if (reset == 0) { // 如果按下复位按钮
delay(10);
if (reset == 0) {
flag = 0; // 清除标志
winner = 0; // 清除获胜者编号
P0 = 0xFF; // 关闭数码管显示
while(reset == 0); // 等待释放复位按钮
}
}
if (start == 0) { // 如果按下开始按钮
delay(10);
if (start == 0) {
TR0 = 1; // 启动定时器
while(start == 0); // 等待释放开始按钮
}
}
if (flag) { // 如果有按键按下
display(winner - 1); // 显示获胜者的编号
} else {
P0 = 0xFF; // 默认关闭数码管
}
}
}
```
#### 功能说明
- **初始化部分**
配置定时器和外部中断,设置数码管显示函数以及延时函数[^1]。
- **主循环逻辑**
检测复位按钮和开始按钮的状态,在进入抢答阶段后启动定时器,并通过中断处理按键事件[^2]。
- **中断服务程序**
中断优先级较高,能够快速响应按键动作。当某一按键首次触发时,记录其编号并通过数码管显示,同时阻止后续按键的影响[^3]。
---
###
阅读全文
相关推荐



















