基于51单片机的多功能八路抢答器设计

描述

1.功能介绍

多功能八路抢答器是基于51单片机来设计的,除了可以实现最基本功能——8路抢答外,还具有自动处理犯规选手,抢答时间调整,还可以进行答题,计分,并且可以查询或修改分数。

2.硬件设计

(1)硬件框图

该抢答器的硬件由五个部分组成,包括单片机、按键电路、数码管显示电路、指示灯电路和声音提示电路。硬件框图如下

抢答器

(2)硬件原理图

由于每个部分的硬件电路都比较简单,就不做介绍了,大家直接看图。

抢答器

抢答器

3.软件设计

(1)软件流程图

抢答器

(2)程序源码

由于本例程代码比较多,这里就只贴出部分代码,有兴趣的小伙伴可以下载源码去看看

void main()
{ uint j;//用来构成循环
  TMOD=0x11;//T0设置为16位定时方式
  TH0=0x3c;  
  TL0=0xb0;//50ms
  IE= 0x82;  //允许T0中断
  TR0=0;     //关闭定时开关
while(1)
  {     while(1) 
          { LED01=1;LED02=1;LED03=1;LED04=1;LED05=1;LED06=1;LED07=1;LED08=1;//监视灯初始化为灭
        if(KS1==0)  {ks1=1;break;}//开始抢答倒计时
        if(KS2==0)   {ks2=1;break;}//开始答题倒计时
        if(ADD1==0)  {delaynms(20);  if(ADD1==0)  dtime++;if(dtime>=1000) dtime=0;}//答题时间调整
      if(MIN1==0)  {delaynms(20);  if(MIN1==0)  dtime--;if(dtime<0) dtime=999;}
      if(ADD10==0) {delaynms(20);   if(ADD10==0) dtime=dtime+10;if(dtime>=1000) dtime=0;}
      if(MIN10==0) {delaynms(20);   if(MIN10==0) dtime=dtime-10;if(dtime<0) dtime=999;}
        shumasm(LED[qdtime_2],dtime);//数码管动态扫描4位  
      if(B_score==0)
         {   delaynms(20);
            if(B_score==0)
            while(1)
              { if(B_score==0)
             { delaynms(20);if(B_score==0) break;}//再次按下B_score退出分数调节   
             shumasm(LED_num[num],score[num]);        //数码管动态扫描4位,显示选手编号和对应分数
             if(next==0)
               { delaynms(20);if(next==0) num++; if(num==9) num=0;}//显示下一位选手编号和对应分数
             if(last==0)
               { delaynms(20);if(last==0)  num--; if(num<0) num=8;}//显示上一位选手编号和对应分数
             if(REST==0)  {delaynms(20); if(REST==0) score[num]=0; }//将当前选手分数清零
                 if(ADD1==0)  {delaynms(20);  if(ADD1==0)  score[num]++;if(score[num]>=1000) score[num]=0;}//调节数码管上对应选手分数,分数范围0-999
                 if(MIN1==0)  {delaynms(20);  if(MIN1==0)  score[num]--;if(score[num]<0) score[num]=999;}
                 if(ADD10==0) {delaynms(20);   if(ADD10==0) score[num]=score[num]+10;if(score[num]>=1000) score[num]=0;}
                 if(MIN10==0) {delaynms(20);   if(MIN10==0) score[num]=score[num]-10;if(score[num]<0) score[num]=999;}   
             }
         }

       }
       ....
    }
    .....
  }
}
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分