51单片机4路抢答器的原理及C语言源程序
单片机,当然不只是51,51单片机是一种稍通用型的单片机,通过I/O口的定义,可以实现多种控制功能。
抢答器,原理:如果为四路,当其中任一路控下后,其他几路即失效,结果为第一次按下的,可以用数码管或是LED灯来显示,当然这里只是讲原理与编程,具体可以根据抢答器路数及显示方式更改程序即可。 源程序如下:
/*用的是AT89S52开发板,独立按键接口如下,就用这四路。先按下的用LED灯来显示,对应第一个到第四个LED灯,其他再按无效,如果想再次实现,可手动复位单片机*/ #include sbit key1=P3^0; //定义按键,根据需要连接线路,如独立按键(4路) sbit key2=P3^1; sbit key3=P3^2; sbit key4=P3^3; /*void delay(unsigned int cnt) //如果有抖动或是干扰,可以用个小延时去抖 { while(--cnt); } */ void main() { bit Flag; while(!Flag) { if(!key1){P1=0xFE;Flag=1;} /*LED灯来显示按下的键,第一个灯,我这里是8位LED灯,即:0111 1111,反过来读数为:1111 1110 即:0xFE *,P1口对应LED灯,给P1赋值/
else if(!key2){P1=0xFD;Flag=1;} //第二个灯亮 else if(!key3){P1=0xFB;Flag=1;} //第三个灯亮
else if(!key4){P1=0xF7;Flag=1;} //第四个灯亮,意味着第四路首先按下 } while(Flag); //可以再加个I/O,控制Flag,这样初始化,继续抢答,还可以设计按下时的声音
} 以上程序测试只能测试一次,如再想测试,只能手动复位单片机。 当然,可以根据此原理,设计出功能强大的抢答器。如加入声音提示,数码管或是LCD液晶显示,裁判确定后可复位继续抢答等。
当然,用51单片机,是浪费,可根据I/O口(抢答路数)来用其他的单片机实现。