51单片机抢答器设计

发布时间:2022-12-20  

任务描述

某企业承担了某抢答比赛抢答器系统的设计,要求如下:①可同时供3名选手参加比赛,他们的编号分别是1、2、3,每名选手各用一个抢答按钮,按钮的编号与选手的编号相对应,分别是S1、S2、S3。②给主持人设置两个控制开关“START”和”END”,用来控制系统中抢答的开始和结束。③抢答器具有数据所存、显示和声音提示的功能。抢答开始前,若有选手按动抢答按钮,视为违规,要显示其编号,并长响蜂鸣器;抢答开始后,若有选手按动抢答按钮,编号立即锁存,并在LED数码管上显示出选手的编号,同时蜂鸣器给出音响提示,此外,要封锁输入电路,禁止其他选手抢答。优先抢答选手的编号将一直保存到主持人将系统清零为止。


硬件电路图

元件清单


C语言程序

#include

unsigned char dip[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xfb,0x80,0x90};  //共阳极数码管段码

sbit KEY9=P3^1; //开始键

sbit KEY10=P3^2;    //结束键

sbit BUZZ=P3^0; //蜂鸣器

bit start_key(); //抢答开始键检测函数

bit end_key(); //抢答结束键检测函数

unsigned int number_key();   //选手按键扫描

void delay_20ms();   //延时函数

void buzz_on();   //蜂鸣器开关

void main()    //主函数

{

unsigned char key_number,n;

while(1)

{

P0=0xff;   //关闭数码管显示

BUZZ=1;   // 关闭蜂鸣器

if(start_key()==1)   //抢答允许检测

{   

key_number=number_key();    //抢答开始前检测有无选手违规

if(key_number==0)    //无人违规

 continue; //返回

 else P0=dip[key_number];    // 有人违规,显示违规选手号码

while(end_key()==1)    //主持人结束键没有按下则蜂鸣器长响

buzz_on();

}

if(start_key()==0)    //主持人开始键按下前无人违规抢答

{ //数码管显示“三”允许抢答

  P0=0Xb6;

while (end_key()==1)

{

n=0;

key_number=number_key(); //检测是否有选手抢答

if(key_number==0)

 continue;

while(key_number!=0)

{

 P0=dip[key_number]; //显示第一个选手抢答的号码

    for(;n<150;n++)

 buzz_on();    //蜂鸣器响一会儿

if(end_key()==0)    // 主持人结束键按下,结束本轮抢答

 break;

 }

 }

 }

 }

 }

 bit start_key()

 {

 if(KEY9==1)

 return 1; //返回值1表示主持人没有按开始键

 else

 delay_20ms();   //延时防抖

 if(KEY9==1)

 return 1;

 else

 return 0;

 }

 bit end_key()

 {

 if(KEY10==1)

 return 1;

 else

 return 0;

 }

 unsigned int number_key()

 {

 unsigned char key_state=0;

 key_state=P1;

 if(key_state==0xff)

 return 0;    //返回0无选手抢答

 else

 {

 if(key_state==0xfe)   //1号抢答

 return 1;

 else if(key_state==0xfd) //2号抢答

 return 2;

 else return 3; //3号抢答

 }

 }

 void buzz_on()

 {

 unsigned char i;

 BUZZ=0;

 for(i=0;i<26;i++)

 delay_20ms();

 BUZZ=1;

 }

 void delay_20ms()

 {

 unsigned int j;

 for(j=0;j<10;j++);

 }


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>