当前位置:首页 » 编程语言 » 51单片机抢答器c语言
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

51单片机抢答器c语言

发布时间: 2023-05-23 13:52:53

❶ 跪求大神给我用c语言编程,用51单片机控制3个按键和3个发光二极管,设置一个3人抢答器,要求当有某

最容易理解的写法:
设置b1、b2、b3、reset四个按钮(谨洞按下为0)和对应的LED1、LED2、LED3三个灯(点亮为0)祥宏枯
intreset,b1,b2,b3,LED1,LED2,LED3;
while(1)
{
(读取reset)
if(reset==0)
{
LED1=LED2=LED3=1;
read=1;
}
if(read==1)
{
绝仿(读取b1,b2,b3);
if(b1==0)
{
LED1=0;
read=0;
}
elseif(b2==0)
{
LED2=0;
read=0;
}
elseif(b3==0)
{
LED3=0;
read=0
}
elseLED1=LED2=LED3=1;
}
}

❷ AT89C51单片机8路抢答器C语言代码怎么写,急用,谢谢了

这个代码没有问题,我仿真过:
#include<reg51.h>
#defineucharunsignedchar
uchartable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};
sbitrstkey=P2^2;
sbitspeaker=P2^0;
voiddelay()//延时约400毫秒
{
uchari,j;
for(i=0;i<200;i++)
for(j=0;j<250;j++);
}
main()
{
uchari,key;
P2=0xff;
while(1)
{
i=0;
P1=table[i];
while(1)
{
key=P3;
if(key!=0)break;
}
switch(key)
{
case0x01:i=1;break;
case0x02:i=2;break;
case0x04:i=3;break;
case0x08:i=4;break;
case0x10:i=5;break;
case0x20:i=6;break;
case0x40:i=7;break;
case0x80:i=8;break;
default:break;
}
P1=table[i];//显示按下抢答器的号
P0=key;//显示按下键号的LED
while(1)
{
if(rstkey==0)break;//主持人按下复位键则重新开始
speaker=~speaker;//否则蜂鸣器报警
delay();
}
}
}

❸ 怎么设计基于51单片机的八位抢答器课程设计用c语言

你的描述不详:下面我给出方法,自已参考:
1:主持人端有一个单片机设备 且设备有一个或多个按键,单个按键,那么就做成按键复用,如果是多个按键,那就可以按要求设置按键功能和数量。参赛队每队一个设备,如果不方便能过连线来通讯,就采用无线通讯,抢答端只需一个按键按键,同时在按键里或边上用指示灯来指示状诚。
2:逻辑,当主持人按下抢答键时,主持人端设备向8个参赛队发送抢答开始信号数据,参赛队8个设备向主持端应答,判断收到应答后,开始计时10秒,某一队按下按键时,这队会向主持端发送本队的编号即可,说到这里,后面的基本上都是一样的原理,就是收发数据,应答,判断数据类型和功能。即可达到你的要求。

❹ 求51单片机的8路抢答器,在普中开发板上实现

单片机源程序如下:

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define WHO P0
sbit player1=P1^0;
sbit player2=P1^1;
sbit player3=P1^2;
sbit player4=P1^3;
sbit Ensure=P3^7;
sbit beep=P1^6;
sbit LSA=P3^2;
sbit LSB=P3^3;
sbit LSC=P3^4;
uchar state=0;
uchar ssec=0;
uchar table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar OUT[]={0x71,0x77,0x38,0x38};
void delay(uint time)
{
uint x,y ;
for(x=time;x>0;x--)
for(y=130;y>0;y--);
}
void Delay2(uint i)
{
while(i--);
}
void Show(uchar content[])
{
uchar i;
for(i=0;i<4;i++)
{
switch(i) //位选,选择点亮的数码管,
{
case(0):
LSA=0;LSB=0;LSC=0; break;//显示第0位
case(1):
LSA=1;LSB=0;LSC=0; break;//显示第1位
case(2):
LSA=0;LSB=1;LSC=0; break;//显示第2位
case(3):
LSA=1;LSB=1;LSC=0; break;//显示第3位
}
P2=content[i];//发送段码
Delay2(100); //间隔一段时间扫描
P2=0x00;//消隐
}
}
void InitTimer0(void)
{
TMOD = 0x01;
TH0 = 0x0D8;
TL0 = 0x0F0;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void main()
{
Ensure=1;
while(1)
{
if(player1==0) //玩家1进入抢答状态
{
delay(10); /汪运/延时,按键消抖
if(player1==0) //山陵雀再逗早次判断是否进入抢答状态
{
if(state==0) //前方无人抢答状态
{
InitTimer0();
state=1; //将抢答状态置为1,防止其他玩家抢答
while(!player1) //抢答成功,蜂鸣器发声
{
beep=~beep;
delay(1);
}
WHO=table[1]; //数码管显示抢答成功的玩家编号
}
}
}
if(player2==0) //以下结构类似于玩家1
{
delay(10);
if(player2==0)
{
if(state==0)
{
InitTimer0();
state=1;
while(!player2)
{
beep=~beep;
delay(1);
}
WHO=table[2];
}
}
}
if(player3==0)
{
delay(10);
if(player3==0)
{
if(state==0)
{
InitTimer0();
state=1;
while(!player3)
{
beep=~beep;
delay(1);
}
WHO=table[3];
}
}
}
if(player4==0)
{
delay(10);
if(player4==0)
{
if(state==0)
{
InitTimer0();
state=1;
while(!player4)
{
beep=~beep;
delay(1);
}
WHO=table[4];
}
}
}
}
}
void Timer0() interrupt 1
{
TH0=(65536-45872)/255; //给定时器赋初值,定时50ms
TL0=(65536-45872)%255;
ssec++;
if(Ensure)
{
if(ssec>=100) //5s
{
EA=0;
while(1)
Show(OUT);
}
}
else
{
delay(10);
if(Ensure==0)
{
while(!Ensure);
Ensure=0;
if(ssec>=100)
{
EA=0;
}
}
}
}

❺ 求MCS-51单片机四路抢答器的c语言程序设计

#include<reg51.h>
#defineuint unsigned int
#defineuchar unsigned char
sbitspeaker = P2^7;
sbit key0 =P1^0;
sbit key1 =P1^1;
sbit key2 =P1^2;
sbit key3 =P1^3;
sbit key4 =P1^4;
sbit key5 =P1^5;
sbit key6 =P1^6;
sbit key7 =P1^7;
ucharled[8]={0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80};

voiddelay_1ms(uint t)
{
uchar m,n;
for(m=t;m>0;m--)
for(n=330;n>0;n--);
}
bitiskeyinput() //判断是否有按键闭合
{
if((P1 & 0xff) ==0xff ) //屏蔽高4位(列线),只检测低4位(行线)
return 0; //没有键闭合野早谈,返回0
else
return 1; //有键闭合颂碰,返回1
}
ucharkey_identify() //识别键号
{
uchar key;
if( key0==0 )key=0;
if(key1==0 )key=1;
if( key2==0 )key=2;
if( key3==0 )key=3;
if( key4==0 )key=4;
if( key5==0 )key=5;
if( key6==0 )key=6;
if( key7==0 )key=7;
return key; //输出键号
}

voidkeyprocess(uchar keynum)
{
uint i;
P0 = led[keynum];
i=500;
while(i--)
{
speaker = 0;
delay_1ms(10);
speaker = 1;
}
}
void main()
{
uchar keynum;
P0 = 0xFF;
while(1)
{
while (!iskeyinput() ); //如果睁悔没有键,则等待
delay_1ms(10); //去除键抖动
if(iskeyinput() ) //当前有按键,需要识别按键并且等待键盘松开
{
keynum= key_identify(); //识别键号
keyprocess(keynum);
while(1); //等待复位
}
}
}

❻ 51单片机做四路抢答器,要求如下,求C语言程序(做了两天了,心累)

先来个汇编的程序,高则物P1接一个共阳极数码管,P0低4位接盯唯4个戚液抢答按键,主持人复位采用单片机复位按钮实现。 ORG 0000HSTART: MOV A,P0 ORL A,#0F0H CJNE A,#0FFH,PL0 SJMP STARTPL0: LCALL DELAY MOV A,P0 ORL A,#0F0H CJNE A,#0FFH,PL1 SJMP STARTPL1: JNB ACC.0,K1 JNB ACC.1,K2 JNB ACC.2,K3 JNB ACC.3,K4 LJMP STARTK1: MOV P1,#0F9H SJMP $K2: MOV P1,#0A4H SJMP $K3: MOV P1,#0B0H SJMP $K4: MOV P1,#99H SJMP $DELAY: MOV R6,#15DEL2: MOV R7,#200 DJNZ R7,$ DJNZ R6,DEL2 RET END