求proteus单片机c语言程序代码,四路抢答器

4路抢答器:总控位置配有数码管,显示抢答成功的路号;每一路抢答器上配有按钮+LED灯(红色、绿色);等待状态(或总控复位):每路抢答器都是绿灯常亮;抢答成功的线路,变为红灯急速闪烁。抢答要求:抢答开始后,任何一路按下(指示灯为红色)后,其他线路均无法操作;时间到后,其他线路才有效,但之前抢答过的线路都无效;总控复位后(进入下一题抢答),所有线路恢复正常。急速闪烁周期:2s
void main(void)
{int i;
P0=0x00;
P1=0xff;
P2=0x00;
P3=0x00;
while(1){
if(P1!=0xff){
for(i=0;i<4;i++){
if(button[i]==P1){
P0=ledmod[i+1];
P2=redled[i];
P3=greenled[i];
delay(100);}}}
} }

能把问题描述清楚看来程序实现对你来说不成问题,我用伪代码给你写出来你自己补充完整即可。
void main()
{
unsigned char key,cont;
bit flag = 0;
初始化IO口;\\关闭红灯点亮绿灯,数码管显示0
while(1)
{
key = P1&0xF;
if(key!=0xF)
{
/*按下的按键相应绿灯关闭*/
LED_G1 = (bit)(key&0x1);
LED_G2 = (bit)(key&0x2);
LED_G3 = (bit)(key&0x4);
LED_G4 = (bit)(key&0x8);
/*按下的按键相应红色LED闪烁*/
for(cont=0;cont<5;cont++)
{
LED_R1 = (~LED_G1)|flag;
LED_R2 = (~LED_G2)|flag;
LED_R3= (~LED_G3)|flag;
LED_R4 = (~LED_G4)|flag;
Delay();//延时
flag = ~flag;
}
关闭所有红色LED并开启所有绿色LED;
}
}
}

注意:代码是允许有同时按下的情况,当然也可以改为不允许同时按下的情况发生,即如果发生同时按下则随便选择一个按键,这样觉得有点不公平。追问

我后面那电路图和代码不用看,我自己做的,给你们看一下而已。你只需按照要求,写出代码便可。你上面好像都没有按要求写,第一个人抢答完成,一段时间后还可以另外一个人抢答。当没人抢答,就进入下一题抢答。还有数码管显示似乎没有

温馨提示:答案为网友推荐,仅供参考