写51单片机的四路抢答器程序
时间: 2023-05-24 12:07:05 浏览: 1228
基于51单片机的4路智能抢答器
5星 · 资源好评率100%
抢答器是一种常见的竞技游戏,可以通过51单片机来实现。下面是基于51单片机的四路抢答器程序:
程序思路:
1. 初始化程序,设置端口状态。
2. 当抢答器的按钮被按下时,相应的LED灯亮起表示抢答成功,其余LED灯熄灭。同时,其他抢答按钮禁止使用。
3. 等待用户按下reset按钮,清空标志位,重置程序。
代码实现:
#include <reg51.h>
sbit LED1 = P1^0; //LED1所在的端口
sbit LED2 = P1^1; //LED2所在的端口
sbit LED3 = P1^2; //LED3所在的端口
sbit LED4 = P1^3; //LED4所在的端口
sbit BTN1 = P0^0; //抢答器按钮1所在的端口
sbit BTN2 = P0^1; //抢答器按钮2所在的端口
sbit BTN3 = P0^2; //抢答器按钮3所在的端口
sbit BTN4 = P0^3; //抢答器按钮4所在的端口
bit flag1 = 0; //标志变量1,用于判断是否已经有抢答成功
bit flag2 = 0; //标志变量2,用于判断是否已经有抢答成功
bit flag3 = 0; //标志变量3,用于判断是否已经有抢答成功
bit flag4 = 0; //标志变量4,用于判断是否已经有抢答成功
void Delay(int n)
{
int i, j;
for(i=0;i<n;i++)
{
for(j=0;j<1275;j++);
}
}
void main()
{
P1 = 0x0F;
while(1)
{
if(BTN1 == 0)
{
if(flag1 == 0)
{
flag1 = 1;
LED1 = 1;
LED2 = 0;
LED3 = 0;
LED4 = 0;
BTN2 = 1;
BTN3 = 1;
BTN4 = 1;
}
Delay(10);
while(BTN1 == 0); //等待用户放开按钮
}
if(BTN2 == 0)
{
if(flag2 == 0)
{
flag2 = 1;
LED1 = 0;
LED2 = 1;
LED3 = 0;
LED4 = 0;
BTN1 = 1;
BTN3 = 1;
BTN4 = 1;
}
Delay(10);
while(BTN2 == 0); //等待用户放开按钮
}
if(BTN3 == 0)
{
if(flag3 == 0)
{
flag3 = 1;
LED1 = 0;
LED2 = 0;
LED3 = 1;
LED4 = 0;
BTN1 = 1;
BTN2 = 1;
BTN4 = 1;
}
Delay(10);
while(BTN3 == 0); //等待用户放开按钮
}
if(BTN4 == 0)
{
if(flag4 == 0)
{
flag4 = 1;
LED1 = 0;
LED2 = 0;
LED3 = 0;
LED4 = 1;
BTN1 = 1;
BTN2 = 1;
BTN3 = 1;
}
Delay(10);
while(BTN4 == 0); //等待用户放开按钮
}
if(!BTN1 && !BTN2 && !BTN3 && !BTN4) //如果所有按钮都没有按下,清空标志位
{
flag1 = 0;
flag2 = 0;
flag3 = 0;
flag4 = 0;
LED1 = 0;
LED2 = 0;
LED3 = 0;
LED4 = 0;
BTN1 = 1;
BTN2 = 1;
BTN3 = 1;
BTN4 = 1;
}
}
}
阅读全文