單片機源程序如下:
/****************************************************************************************
八路搶答器系統
活動規則:
>>>初始狀態:上電時,臺號顯示“00”,倒計時顯示“00”,紅燈和綠燈熄滅。
>>>當主持人按下“開始/清除”鍵時(選手才能搶答),蜂鳴器響一下,臺號顯示“00”,倒計時數碼管顯示“05”,
>>>這時開始準備倒計時5秒,當準備倒計時顯示回到“00”時,然后顯示倒計時30秒開始搶答。
>>>如果倒計時未回到“00”就搶答,這時紅燈閃亮,倒計時數碼管顯示“--",這時禁止任何操作。
>>>這時只有主持人按下“開始/清除”鍵,才能恢復初始狀態。
>>>5秒結束后,等待搶答,綠燈亮起,倒計時顯示“30”后,即開始倒計時,而倒計時最后5S,蜂鳴器會發出滴滴鳴叫聲,
>>>如果30秒內沒人搶答,則此次搶答失敗,重新回到初始狀態。
>>>如果30秒內有人成功搶答,則顯示選手的臺號并亮起對應的燈,蜂鳴器響一下,倒計時顯示“00”,綠燈熄滅。
>>>主持人按下“開始/清除”鍵后,系統回到初始狀態且蜂鳴器響一下,然后重新按一下“開始/清除”鍵進入下一輪搶答。
*****************************************************************************************/
#include
#include "smg.h"
#include "interrupt.h"
#define uchar unsigned char //宏定義
#define uint unsigned int
/************************************引腳定義********************************************/
sbit key_sc=P2^6; //開始/清除鍵(start/clear---sc)
sbit key_1=P1^0; //八位選手按鍵定義
sbit key_2=P1^1;
sbit key_3=P1^2;
sbit key_4=P1^3;
sbit key_5=P1^4;
sbit key_6=P1^5;
sbit key_7=P1^6;
sbit key_8=P1^7;
sbit led_1=P3^0; //八位LED燈按鍵定義
sbit led_2=P3^1;
sbit led_3=P3^2;
sbit led_4=P3^3;
sbit led_5=P3^4;
sbit led_6=P3^5;
sbit led_7=P3^6;
sbit led_8=P3^7;
/************************************變量定義********************************************/
uchar sc_f=0; //比賽進行階段標記位,=0表示沒有按。=1表示準備倒計時階段,=2表示倒計時階段。
uchar qiang_f=0; //搶答犯規標記,=0沒有犯規。=1表示有人犯規
uchar wan_f=0; //搶答完成標記,=0搶答沒完成后還沒有開始。=1表示搶答完成
uchar time; //時間標記
uchar T0_num; //定時器0計數
uchar number; //搶答成功選手的編號,或犯規選手的編號。=0的時候表示沒有
uchar count=0; //計時標記
/********************************************************
函數名稱:void baojing()
函數作用:搶答犯規報警提示
********************************************************/
void baojing()
{
buzz=0; //開蜂鳴器
delayms(10);
buzz=1; //關蜂鳴器
delayms(10);
}
/********************************************************
函數名稱:uchar qianda()
函數作用:搶答按鍵檢測,返回搶答編號
參數說明:
********************************************************/
uchar qianda()
{
uchar temp=0;
if(key_1==0) //一號犯規,下同
temp=1; //記錄1號
else
if(key_2==0)
temp=2;
else
if(key_3==0)
temp=3;
else
if(key_4==0)
temp=4;
else
if(key_5==0)
temp=5;
else
if(key_6==0)
temp=6;
else
if(key_7==0)
temp=7;
else
if(key_8==0)
temp=8;
return temp;
}
/********************************************************
函數名稱:void led_kongzhi(uchar num,bit k,bit mode)
函數作用:LED燈控制
參數說明:num控制哪一個燈,k=1,點亮,=0關閉。mode=0全滅后在控制這個燈,=1單獨控制這個燈
********************************************************/
void led_kongzhi(uchar num,bit k,bit mode)
{
if(mode==0)
{
led_1=1; //八位LED燈全滅
led_2=1;
led_3=1;
led_4=1;
led_5=1;
led_6=1;
led_7=1;
led_8=1;
}
if(k==1)
{
switch (num) //控制對應LED燈亮
{
case 1:led_1=0;
break;
case 2:led_2=0;
break;
case 3:led_3=0;
break;
case 4:led_4=0;
break;
case 5:led_5=0;
break;
case 6:led_6=0;
break;
case 7:led_7=0;
break;
case 8:led_8=0;
break;
}
}
else
{
switch (num) //控制對應LED燈滅
{
case 1:led_1=1;
break;
case 2:led_2=1;
break;
case 3:led_3=1;
break;
case 4:led_4=1;
break;
case 5:led_5=1;
break;
case 6:led_6=1;
break;
case 7:led_7=1;
break;
case 8:led_8=1;
break;
}
}
}
/********************************************************
函數名稱:void scan(void)
函數作用:按鍵檢測函數
********************************************************/
void scan(void)
{
uchar qiangda_num=0;
//開始/清除鍵
if(key_sc==0) //按鍵按下
{
delayms(7); //顯示消抖
if(key_sc==0&&sc_f!=2&&qiang_f==0&&wan_f==0)//判斷是否有人犯規或者搶答是否開始或者搶答是否完成
{
sc_f++; //比賽階段標記+1
if(sc_f==1) //比賽準備開始
{
time=5; //準備倒計時時間設為5s
TR0=1; //開啟定時
wan_f=0; //清除比賽完成標志
baojing(); //提示比賽開始
}
}
else
if(key_sc==0&&qiang_f==1) //判斷是否有人犯規
{
buzz=1; //清除報警
qiang_f=0; //清除搶答標志
number=0; //清除選手編號
led_kongzhi(0,0,0); //關閉選手指示燈
}
else
if(key_sc==0&&wan_f==1) //判斷是否有人完成
{
buzz=1; //清除報警
wan_f=0; //清除完成標志
number=0; //清除選手編號
led_kongzhi(0,0,0); //關閉選手指示燈
}
if(key_sc==0&&wan_f==0) //停止比賽
{
TR0=0; //關閉定時
sc_f=0; //重新回到設置比賽時間階段
count=0; //重置計時標記參數
led_red=1; //紅燈熄滅
led_green=1; //綠燈熄滅
baojing(); //提示停止比賽
}
while(!key_sc);//檢測按鍵松開
}
//選手按鍵
qiangda_num=qianda();
if(qiangda_num!=0&&sc_f!=0) //判斷是否有選手按下按鍵且是否開始搶答
{
if(sc_f!=2&&count<5&&qiang_f==0&&wan_f==0)//如果還沒有開始搶答時按下
{
TR0=0; //比賽進行標記復位
count=0; //重置計時標記參數
buzz=0; //蜂鳴器報警
qiang_f=1; //搶答犯規標記
number=qiangda_num; //記錄是哪一個燈
led_kongzhi(number,1,0); //顯示選手按下后對應的燈
led_red=~led_red; //點亮紅燈
}
else
if(sc_f==2&&count>=5&&wan_f==0) //在開始搶答時按下
{
wan_f=1; //標記搶答完成
sc_f=0; //比賽進行標記復位
TR0=0; //關閉倒計時定時器
count=0; //重置計時標記參數
number=qiangda_num; //記錄是哪一個燈
led_kongzhi(number,1,0); //顯示選手按下后對應的燈
led_green=1; //綠燈熄滅
baojing(); //提示有人搶答完成
}
}
}
/*********************************************************
函數名稱:void main()
函數作用:主函數
*********************************************************/
void main()
{
uchar i=0;
T0_init(); //定時器初始化
for(i=0;i<9;i++)
{
led_kongzhi(i,1,1);
delayms(10);
}
for(i=9;i>0;i--)
{
led_kongzhi(i-1,0,1);
delayms(10);
}
led_kongzhi(0,0,0);
while(1) //死循環
{
scan(); //按鍵檢測處理
if(sc_f==0&&wan_f==0) //判斷是否還沒進入比賽階段
{
display(0,0,0,0); //未進入,顯示"0000"
}
else
{
if(sc_f==0&&wan_f==1) //進入比賽階段,并且處于準備比賽時間
display(0,number,time/10,time%10);//顯示比賽時間
else
{
if(qiang_f==1) //設有人犯規
display(0,number,10,10); //顯示犯規臺號和“--”
else
display(0,number,time/10,time%10);//顯示搶答者臺號和比賽剩余時間,未搶答顯示0
}
}
}
}
上一篇:單片機T0方式2實現簡單時鐘
下一篇:單片機控制直流電機程序
推薦閱讀
史海拾趣
在5G浪潮的推動下,國博電子憑借其在射頻集成電路領域的深厚技術積累,成功研制出5G毫米波段Massive MIMO毫米波有源相控陣組件等一系列典型產品。這些產品不僅在國內市場得到了廣泛應用,還贏得了國際市場的認可。國博電子的技術領先不僅推動了國內5G通信產業的發展,也為全球5G通信技術的進步做出了重要貢獻。
隨著公司實力的不斷增強,Ecera Comtek Corp公司開始尋求更廣闊的發展空間。公司決定進軍國際市場,拓展海外業務。然而,國際市場的競爭更加激烈,Ecera Comtek Corp公司面臨著來自全球各地的強大競爭對手。為了應對這一挑戰,Ecera Comtek Corp公司加強了與國際合作伙伴的聯系,共同研發新產品,開拓新市場。同時,公司還加大了對海外市場的宣傳力度,提高了品牌的知名度和美譽度。經過幾年的努力,Ecera Comtek Corp公司的產品逐漸在國際市場上獲得了認可,海外業務也取得了顯著的進展。
在快速發展的過程中,Ecera Comtek Corp公司始終關注企業社會責任的踐行。公司積極參與各種公益活動,為社會做出積極貢獻。例如,在自然災害發生時,Ecera Comtek Corp公司積極捐贈通信設備,幫助災區恢復通信聯系;在偏遠地區,公司還捐建了多所希望小學,為當地的孩子們提供了良好的學習環境。這些公益活動不僅提升了Ecera Comtek Corp公司的品牌形象,也增強了員工的凝聚力和歸屬感。
在競爭激烈的電子行業中,Ecera Comtek Corp公司意識到只有不斷創新才能在市場中立足。于是,公司加大了研發投入,引進了一批高端技術人才。經過長時間的研發,Ecera Comtek Corp公司成功研發出了一種新型的信號處理技術,大大提高了無線通信設備的傳輸速度和穩定性。這一技術突破迅速引起了市場的關注,Ecera Comtek Corp公司的產品在市場上受到了熱烈的歡迎,公司的銷售額也實現了快速增長。
在電子行業中,技術更新換代迅速,DECON公司深知技術創新的重要性。因此,公司不斷投入研發資金,引進高端技術人才,加強自主創新,推出了多款具有領先技術的連接器產品。這些產品不僅滿足了市場需求,還提高了公司的市場競爭力。同時,公司還積極與國內外知名企業合作,共同研發新產品,推動了電子連接器行業的發展。
背景: 彩電遙控器是使用比較頻繁的,且容易損壞,彩電的遙控器也是更換量比率大的備件。為了準確判定遙控器是否損壞,降低上門量和遙控器的不必要退換。1、接到用戶信息,先讓用戶按照下面的措施自行檢查遙控器。2、幫助服務人員確定遙控器上是哪個鍵 ...… 查看全部問答∨ |
摘要:介紹了CC2430芯片的基本特性和ZigBee2006協議棧的基本內容。論述了以CC22430芯片為核心的無線通信模塊的硬件設計,和以ZigB-ee2006協議棧為基礎的軟件設計。在實現短距離多網絡節點間的無線通信的同時,使用串口實現無線通信模塊與終端采集部 ...… 查看全部問答∨ |
小弟剛剛開始學ucos,看了一下書,想看看實際程序,誠心求一個ucos2程序例子,我已經看過zlg的例子了,希望能有大俠提供一個用除了OSTimeDly之外其他方法調度任務的例子程序,不勝感激,我的郵箱是wanglei198661@163.com 在此提前謝過各位啦!… 查看全部問答∨ |
error: RTL8019AS chip not found { 0x50(0x50), 0x3d(0x70)}! 關鍵源碼如下: static void eth_reset (void) { unsigned char ucTemp; /* reset NIC */ ucTemp = get_reg (RTL8019_RESET); &n ...… 查看全部問答∨ |
#include <reg51.h> #include <stdlib.h> #define LEN sizeof(struct node) typedef void (*FUNC)(); struct node { FUNC address; }; void yemian_1(void) { printf("1111"); } void yemian_2(void) { pr ...… 查看全部問答∨ |
做過wince下USB驅動請進,我現在做的是關于USB協議層驅動的編寫,現在可以讀出:設備描述符、配置描述符、接口描述符、字符串描述符。 但是卻都不到端點描述符。 如何設置斷點屬性呢?比如說:那個端點配置輸入,那個端點配置輸出,還有配置成中 ...… 查看全部問答∨ |
大家好,我是初學者,我按書上的方法做出來的555線路沒有脈沖,當S1開關按下時,LED發光管D1會亮,但手一松,D1馬上會滅,并按要求亮5秒鐘,我反復檢查了很多遍都不知錯在哪里。元器件方面47uF(C4)的電容檢查過,也換過100uF的電容,還是一樣。電 ...… 查看全部問答∨ |
|
幫忙看看,本人菜鳥!現在正在做一個電能質量表需要測出兩個正弦信號轉化為方波后的相位差,不知道如何處理。希望幫忙解決最后提供一些參考程序便于我更好的理解 謝謝!… 查看全部問答∨ |
最近在搞STM8,,卡在硬件IIC一個多星期了,網上也搜不到相關的資料,庫里有個雙機通信的例程,看了一天也沒看明白,下到單片機里運行也不對,直接在while (I2C_GetFlagStatus(I2C_FLAG_BUSBUSY)); //等待總線空閑 這里就 ...… 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- 迅為IMX6開發板Android應用-AndroidStudio-calculator測試
- 玩轉 ESP32 + Arduino (二十) SIM800L上傳數據到OneNet(新版Mqtts)
- 玩轉 ESP32 + Arduino (二十一) SPIFFS文件系統 (已棄用)
- 玩轉 ESP32 + Arduino (二十二) SIM800L上傳數據到阿里IOT(溫濕度和LBS)(NTP對時)
- 玩轉 ESP32 + Arduino (二十三) 多文件系統及全局變量
- 玩轉 ESP32 + Arduino (二十四) SD卡讀寫
- 玩轉 ESP32 + Arduino (二十五) SSD1306庫驅動OLED
- 玩轉 ESP32 + Arduino(二十六) 按鍵控制庫 OneButton
- 玩轉 ESP32 + Arduino(二十七) ESP對象