<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 用51單片機制作4路搶答器

          用51單片機制作4路搶答器

          作者: 時間:2016-11-18 來源:網(wǎng)絡(luò) 收藏
          此搶答器具有限時搶答,超時無效的特點,并可以對主持人未喊開始而提前搶答的犯規(guī)情況作出判斷。

          由于用了單片機,所以電路很簡單。懶得寫譯碼程序,也不想做驅(qū)動電路。干脆直接用了一片74LS48譯碼驅(qū)動器來驅(qū)動數(shù)碼管。

          本文引用地址:http://www.ex-cimer.com/article/201611/315978.htm

          呵呵,面包板上插一下,由于之前在Proteus中仿真過,所以直接就正常運行了~上一張實物圖

          左邊的是STC89C52的最小系統(tǒng)版,P1口上接了8個LED,當時做流水燈的。直接拿來用了。P2口是顯示輸出,P3口接受按鍵。那個小的芯片就是74LS48啦~下方的是編程器+電源,STC的芯片就是編程方便,支持在線燒寫,這么小巧的編程器~

          當然最重要的是程序,附上代碼清單。寫的比較爛,竟然上了100行,希望不要被大蝦們罵得太慘>_<

          #include
          #defineuintunsignedchar

          //計時變量
          uints= 0,ms= 0;

          //枚舉類型:記錄搶答器工作狀態(tài)
          enumStat
          {
          Idle= 0,//空閑狀態(tài),比如正在讀題
          Ready= 1,//就緒狀態(tài),可以搶答
          Respond= 2,//響應(yīng)狀態(tài),有人搶到了
          }stat;

          //時鐘中斷服務(wù)程序
          voidTimer()interrupt1using1
          {
          TH0=0x3C;
          TL0=0xBD;
          ms++;
          s+=ms/20;
          ms%= 20;
          s%= 60;
          }

          //重置時鐘
          voidResetTimer()
          {
          EA= 1;//允許CPU中斷
          ET0= 1;//定時器中斷打開
          TMOD= 1;//設(shè)定時器為方式
          TR0= 0;//關(guān)定時器
          ms= 0;
          s= 0;
          }

          //優(yōu)先編碼(反向輸入)
          uintEncode(uintc)
          {
          uinti,mask= 1;
          if(c== 0)return0;
          for(i= 0;i< 8;i++)
          {
          if((c& (mask< }
          }

          voidmain()
          {
          uintled= 0xff;//對應(yīng)P1口,指示燈
          uintdisp= 15;//對應(yīng)P2口,數(shù)碼管
          uintbutton;//對應(yīng)P3口,按鍵
          uintisFoul= 0;//是否犯規(guī)(或超時)
          constuinttimeout= 5;//超時時間
          ResetTimer();
          while(1)
          {
          //設(shè)置狀態(tài)指示燈,用于調(diào)試,實際應(yīng)用中可以去掉
          if(stat==Idle)P0= (~1);
          elseif(stat==Ready)P0= (~2);
          elseif(stat==Respond)P0= (~4);
          elsestat= 0;

          //超時判斷
          if(timeout-s== 0)
          {
          isFoul= 1;
          disp= 15;
          stat=Idle;
          ResetTimer();
          }

          //讀按鍵
          button=P3;

          //P3.5復(fù)位鍵按下
          if((button& 32) == 0)
          {
          disp= 15;
          led= 0xff;
          stat=Idle;
          isFoul= 0;
          ResetTimer();
          }

          //P3.4開始鍵按下
          if((button& 16) == 0)
          {
          stat=Ready;
          P1= 0;//所有選手的燈閃爍,提示可以開始搶答
          TR0= 1;//開始計時
          }

          //P3.0-P3.3搶答鍵按下
          if((button& 15) != 15)
          {
          if(stat==Idle)isFoul= 1;//提前搶,犯規(guī)
          if(stat!=Respond)//正常搶答
          {
          led= (button& 15) + 240;
          disp=Encode(button& 15);
          stat=Respond;
          }
          ResetTimer();
          }

          //顯示
          if(isFoul)led&= 127;//犯規(guī)則點亮
          if(stat==Ready)disp=timeout-s;
          P1=led;
          P2=disp;
          }
          }



          關(guān)鍵詞: 51單片機4路搶答

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();