新聞中心

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

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

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

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

本文引用地址:http://butianyuan.cn/article/201611/315978.htm

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

左邊的是STC89C52的最小系統(tǒng)版,P1口上接了8個(gè)LED,當(dāng)時(shí)做流水燈的。直接拿來用了。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í)器中斷打開
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;//對應(yīng)P1口,指示燈
uintdisp= 15;//對應(yīng)P2口,數(shù)碼管
uintbutton;//對應(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開始鍵按下
if((button& 16) == 0)
{
stat=Ready;
P1= 0;//所有選手的燈閃爍,提示可以開始搶答
TR0= 1;//開始計(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路搶答

評論


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

關(guān)閉