51单片机四路抢答器(LED灯,数码管显示,蜂鸣器提示音)C语言源程序.
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
51单片机四路抢答器(LED灯,数码管显示,蜂鸣器提示音)C语言源程序2009-10-31 10:53
其实就是在原有的基础上,加入数码管显示及蜂鸣器,当然根据自己的要求,适当使用单片机I/O口
接线为:
P0 P2 来控制数码管显示,其中P0为数码管显字控制,P2用来选择位(第几个数码管)
P1用来控制8个LED灯
P3,独立按键(可以根据需要修改)
P3^5(找了一个没有用到的I/O口,当然,可以用键盘扫描的方式来实现,这样的话,可以实现4*4=16路的抢答器,了解原理,做相应修改即可。
#include
sbit key1=P3^0; //这里采用独立按键(4路)
sbit key2=P3^1;
sbit key3=P3^2;
sbit key4=P3^3;
sbit SPK=P3^5; //蜂鸣器,最好在ISP编程时先不接入,(我用的是杜邦线,可以设置跳线控制)
void delay(unsigned int cnt)
{
while(--cnt);
}
void speak(unsigned int j)
{
unsigned int i;
for(i=0;i { delay(180);//参数决定发声的频率,估算值,自行修改到不刺耳的声调 SPK=!SPK; } SPK=1; //喇叭蜂鸣器停止工作,叫一声即 可。 } void main() { bit Flag; while(!Flag) { if(!key1){P1=0xFE;Flag=1;speak(300);P2=0;P0=0x06;} // LED1,数码管1显示1,蜂鸣器叫 else if(!key2){P1=0xFD;Flag=1;speak(300);P2=1;P0=0x5b;}//LED2,数码管2显示2,蜂鸣器叫 else if(!key3){P1=0xFB;Flag=1;speak(300);P2=2;P0=0x4f;}//LED3,数码管3显示3,蜂鸣器叫 else if(!key4){P1=0xF7;Flag=1;speak(300);P2=3;P0=0x66;}LED4,数码管4显示4,蜂鸣器叫 } while(Flag); } 测试完,手动复位即可,当然可设置相应的按键来控制标志:Flag,进行继续抢答。。