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

Python015

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

这个代码没有问题,我仿真过:

#include<reg51.h>

#define uchar unsigned char

uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f}

sbit rstkey=P2^2

sbit speaker=P2^0

void delay()//延时约400毫秒

{

uchar i,j

for(i=0i<200i++)

for(j=0j<250j++)

}

main()

{

uchar i,key

P2=0xff

while(1)

{

i=0

P1=table[i]

while(1)

{

key=P3

if(key!=0)break

}

switch(key)

{

case 0x01:i=1break

case 0x02:i=2break

case 0x04:i=3break

case 0x08:i=4break

case 0x10:i=5break

case 0x20:i=6break

case 0x40:i=7break

case 0x80:i=8break

default:break

}

P1=table[i]//显示按下抢答器的号

P0=key//显示按下键号的LED

while(1)

{

if(rstkey==0)break//主持人按下复位键则重新开始

speaker=~speaker//否则蜂鸣器报警

delay()

}

}

}

你的描述不详:下面我给出方法,自已参考:

1:主持人端有一个单片机设备 且设备有一个或多个按键,单个按键,那么就做成按键复用,如果是多个按键,那就可以按要求设置按键功能和数量。参赛队每队一个设备,如果不方便能过连线来通讯,就采用无线通讯,抢答端只需一个按键按键,同时在按键里或边上用指示灯来指示状诚。

2:逻辑,当主持人按下抢答键时,主持人端设备向8个参赛队发送抢答开始信号数据,参赛队8个设备向主持端应答,判断收到应答后,开始计时10秒,某一队按下按键时,这队会向主持端发送本队的编号即可,说到这里,后面的基本上都是一样的原理,就是收发数据,应答,判断数据类型和功能。即可达到你的要求。