在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

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

            用51單片機(jī)制作4路搶答器

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

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

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

            呵呵,面包板上插一下,由于之前在Proteus中仿真過(guò),所以直接就正常運(yùn)行了~上一張實(shí)物圖

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

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

            #include
            #defineuintunsignedchar

            //計(jì)時(shí)變量
            uints= 0,ms= 0;

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

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

            //重置時(shí)鐘
            voidResetTimer()
            {
            EA= 1;//允許CPU中斷
            ET0= 1;//定時(shí)器中斷打開(kāi)
            TMOD= 1;//設(shè)定時(shí)器為方式
            TR0= 0;//關(guān)定時(shí)器
            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;//對(duì)應(yīng)P1口,指示燈
            uintdisp= 15;//對(duì)應(yīng)P2口,數(shù)碼管
            uintbutton;//對(duì)應(yīng)P3口,按鍵
            uintisFoul= 0;//是否犯規(guī)(或超時(shí))
            constuinttimeout= 5;//超時(shí)時(shí)間
            ResetTimer();
            while(1)
            {
            //設(shè)置狀態(tài)指示燈,用于調(diào)試,實(shí)際應(yīng)用中可以去掉
            if(stat==Idle)P0= (~1);
            elseif(stat==Ready)P0= (~2);
            elseif(stat==Respond)P0= (~4);
            elsestat= 0;

            //超時(shí)判斷
            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開(kāi)始鍵按下
            if((button& 16) == 0)
            {
            stat=Ready;
            P1= 0;//所有選手的燈閃爍,提示可以開(kāi)始搶答
            TR0= 1;//開(kāi)始計(jì)時(shí)
            }

            //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ī)則點(diǎn)亮
            if(stat==Ready)disp=timeout-s;
            P1=led;
            P2=disp;
            }
            }



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

            評(píng)論


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

            關(guān)閉