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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 8051單片機搶答器C程序

          8051單片機搶答器C程序

          作者: 時間:2016-11-13 來源:網(wǎng)絡(luò) 收藏
          #include

          /******************************************************************

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

          * 自定義Macro

          *******************************************************************/

          //編碼的均為反向編碼

          #define CLEAR 0x7f //定義清空的反碼

          #define LED_BEGIN 0x01 // 定義開始時數(shù)碼管的顯示

          #define LED_FOUL 0x38 // 犯規(guī)后顯示字母"F",數(shù)碼管編碼

          #define LED_C 0x31 // 字母"C"的編碼

          #define LED_L 0x71 // 字母"L"的編碼,兩個用來在主持人取消之后顯示"CL"--cancel

          #define GET 1 // 這個是作為一個函數(shù)的參數(shù)來混的,就是成功搶答的意思

          #define FOUL 0 // 和上面的參數(shù)一起混的,犯規(guī)---這兩個的用法在后面體現(xiàn)

          #define READY 0x7e

          /******************************************************************

          * 自定義數(shù)據(jù)類型

          *******************************************************************/

          typedef unsigned char Byte; // 一個字節(jié)

          typedef unsigned int Word; // 一個字,兩個字節(jié)

          typedef bit Bool; // 模仿布爾型變量

          //typedef sbit Port; // 本想用自定義一個端口類型的變量,比較方便,但是這句話步知道為何通不過編譯

          /******************************************************************

          * 定義MAX7219寄存器

          *******************************************************************/

          #define REG_NO_OP 0x00 // 定義空操作 register

          #define DIG_1 0x01 // 定義數(shù)碼管1 register

          #define DIG_2 0x02 // 定義數(shù)碼管2 register

          #define DIG_3 0x03 // 定義數(shù)碼管3 register

          #define DIG_4 0x04 // 定義數(shù)碼管4 register

          #define DIG_5 0x05 // 定義數(shù)碼管5 register

          #define DIG_6 0x06 // 定義數(shù)碼管6 register

          #define DIG_7 0x07 // 定義數(shù)碼管7 register

          #define DIG_8 0x08 // 定義數(shù)碼管8 register

          #define REG_DECODE 0x09 // 定義解碼控制 register

          #define REG_INTENSITY 0x0a // 定義顯示亮度 register

          #define REG_SCAN_LIMIT 0x0b // 定義掃描限制 register

          #define REG_SHUTDOWN 0x0c // 定義"shutdown"模式 register

          #define REG_DISPLAY_TEST 0x0f // 定義"display test"模式 register

          #define INTENSITY_MIN 0x00 // 定義最低顯示亮度

          #define INTENSITY_MAX 0x0f // 定義最高顯示亮度

          /*********************************************************************

          * 定義硬件引腳連接

          **********************************************************************/

          sbit DATA=P2^0; // MAX7219的數(shù)據(jù)口

          sbit LOAD=P2^1; // MAX7219的鎖存端口

          sbit CLK=P2^2; // MAX7219的時鐘端口

          //sbit HOST_SWITCH=P0^0; // 主持人開關(guān)的接口

          sbit HOST_START=P0^0; //主持人按鍵,用來重新開始的按鍵 start

          sbit HOST_CANCEL=P0^1; //主持人用來取消搶答的按鍵 clear

          sbit SWITCH1_3=P1^4; // 調(diào)節(jié)倒計時時間的撥碼開關(guān),下劃線前面的號代表開關(guān)的序號,下劃線后面的號代表該開關(guān)的數(shù)值

          sbit SWITCH2_2=P1^5; // 同上

          sbit SWITCH3_2=P1^6; // 同上

          sbit SWITCH4_1=P1^7; // 同上

          sbit BEEP=P0^7; //定義蜂鳴器端口

          sbit LS138_C=P2^4; //定義譯碼器輸入端

          sbit LS138_B=P2^5; //同上

          sbit LS138_A=P2^6; //同上

          sbit LS138_E1=P2^7; //定義譯碼器使能端

          /*********************************************************************

          * 定義全局變量

          **********************************************************************/

          Byte data intrCounter; // 計時器中斷次數(shù)

          Byte data beginNum; // 開始倒計時的時間

          Byte data counterBack; // 將中斷次數(shù)放在里面以備后用

          Byte data showNum; // 數(shù)碼管正在顯示的時間

          Bool data isStart; // 是否開始搶答

          Bool data isFoul; // 是否犯規(guī)

          Bool data isPressed; // 是否有搶答的鍵按下

          Byte data number_temp; // 用來記錄P1口上次狀態(tài)的一個變量

          code unsigned char C51BOX2[3] _at_ 0x43;

          /***********************************************************************

          * 共陰極七段數(shù)碼管顯示對應(yīng)段查詢表(數(shù)字0-9分別對應(yīng)code_table[0]-[9])

          ***********************************************************************/

          Byte code code_table_zheng[10]=

          {0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b};

          Byte code code_table[10]=

          {0x01,0x4f,0x12,0x06,0x4c,0x24,0x20,0x0f,0x00,0x04};

          /***********************************************************************

          * 函數(shù)聲明

          ***********************************************************************/

          void MAX7219_SendByte (Byte dataout);

          void MAX7219_Write (Byte reg_number, Byte dataout);

          void MAX7219_DisplayChar(Byte digit, Byte character);

          void MAX7219_Clear (void);

          void MAX7219_SetBrightness (Byte brightness);

          void MAX7219_DisplayTestStart (void);

          void MAX7219_DisplayTestStop (void);

          void MAX7219_ShutdownStart (void);

          void MAX7219_ShutdownStop (void);

          void MAX7219_Init (void);

          void Delay10ms(void);

          Bool GetHostStartKey (void);

          Bool GetHostCancelKey (void);

          void GetCounter(void);

          Byte GetPressed(Byte KeyState);

          void IT0_Init(void);

          void Timer0_Overflow();

          void PressedHandle(Byte keyPressed);

          void GetOrFoulHandle(Bool state);

          void CancelHandle();

          void SPEAKER_count (void); //聲明倒計時聲音函數(shù)

          void SPEAKER_start(void); //聲明開始搶答聲音函數(shù)

          void SPEAKER_get(void); //聲明搶到聲音函數(shù)

          void SPEAKER_foul(void); // 聲明犯規(guī)聲音函數(shù)

          /***********************************************************************

          * MAX7219_SendByte()

          *

          * 描述: 向MAX7219傳送一個字節(jié)的數(shù)據(jù)

          * Arguments : dataout = data to send

          * Returns : none

          *************************************************************************/

          void MAX7219_SendByte (Byte dataout)

          {

          Byte i;

          for (i=8;i>0;i--)

          {

          Byte mask=1<<(i-1);//mask是個掩碼,取位使用

          CLK=0;//MAX7219的位傳入是在時鐘的上升沿之前,所以在每發(fā)一位之前都要變?yōu)榈碗娖?/p>

          if (dataout&mask)

          DATA=1;

          else

          DATA=0;

          CLK=1;//八個bit都傳遞完成后變?yōu)楦唠娖?鎖存

          }

          }

          /***********************************************************************

          * MAX7219_Write()

          *

          * 描述: 向 MAX7219 寫命令

          * Arguments : reg_number = register to write to

          * dataout = data to write to MAX7219

          * Returns : none

          未完~

          ***************************************************************************/

          void MAX7219_Write (Byte reg_number, Byte dataout)

          {

          LOAD=0;//也是鎖存上升沿之前的,發(fā)這兩個字節(jié)之前要變?yōu)榈碗娖?/p>

          MAX7219_SendByte(reg_number);//發(fā)送寄存器地址

          MAX7219_SendByte(dataout);//發(fā)送數(shù)據(jù)

          LOAD=1;//變?yōu)楦唠娖?鎖存

          }

          /**************************************************************************

          * MAX7219_DisplayChar()

          *

          * 描述: 使某一位顯示一個數(shù)字

          * Arguments : digit = digit number (0-7)

          * character = character to display (0-9, A-Z)

          * Returns : none

          **************************************************************************/

          void MAX7219_DisplayChar(Byte digit, Byte character)

          {

          MAX7219_Write(digit, character);

          }

          /**************************************************************************

          * MAX7219_Clear()

          *

          * 描述: 清除所有位的顯示

          * Arguments : none

          * Returns : none

          ***************************************************************************/

          void MAX7219_Clear (void)

          {

          Byte i;

          for (i=1; i<=2; i++)

          MAX7219_Write(i, CLEAR);//把八個數(shù)碼管全都清零了,已經(jīng)寫反了^_^

          }

          /**************************************************************************

          * MAX7219_SetBrightness()

          *

          * 描述: 設(shè)置數(shù)碼管顯示亮度

          * Arguments : brightness (0-15)

          * Returns : none

          ***************************************************************************/

          void MAX7219_SetBrightness (Byte brightness)

          {

          brightness &= 0x0f;

          MAX7219_Write(REG_INTENSITY, brightness);

          }

          /**************************************************************************

          * MAX7219_DisplayTestStart()

          *

          * 描述: 進(jìn)入 test 模式

          * Arguments : none

          * Returns : none

          ***************************************************************************/

          void MAX7219_DisplayTestStart (void)

          {

          MAX7219_Write(REG_DISPLAY_TEST, 1);

          }

          /**************************************************************************

          * MAX7219_DisplayTestStop()

          *

          * 描述: 退出 test 模式

          * Arguments : none

          * Returns : none

          ***************************************************************************/

          void MAX7219_DisplayTestStop (void)

          {

          MAX7219_Write(REG_DISPLAY_TEST, 0);

          }

          /**************************************************************************

          * MAX7219_ShutdownStart()

          *

          * 描述: 進(jìn)入 shutdown 模式

          * Arguments : none

          * Returns : none

          ***************************************************************************/

          void MAX7219_ShutdownStart (void)

          {

          MAX7219_Write(REG_SHUTDOWN, 0);

          }

          /**************************************************************************

          * MAX7219_ShutdownStop()

          *

          * 描述: 退出 shutdown 模式

          * Arguments : none

          * Returns : none

          ***************************************************************************/

          void MAX7219_ShutdownStop (void)

          {

          MAX7219_Write(REG_SHUTDOWN, 1);

          }

          /**************************************************************************

          * MAX7219_Init()

          *

          * Description: MAX7219初始化模塊; 應(yīng)該先于其他MAX7219函數(shù)而被調(diào)用

          * Arguments : none

          * Returns : none

          ***************************************************************************/

          void MAX7219_Init (void)

          {

          DATA=1;

          CLK=1;

          LOAD=1;

          MAX7219_Write(REG_SCAN_LIMIT,1);//這里設(shè)置的是掃描兩個數(shù)碼管

          MAX7219_Write(REG_DECODE, 0x00);

          MAX7219_SetBrightness(INTENSITY_MAX);//設(shè)置最大亮度顯示

          MAX7219_DisplayTestStart();

          MAX7219_DisplayTestStop();

          MAX7219_ShutdownStop();

          MAX7219_Clear();

          }

          /**************************************************************************

          * Delay_100us()

          *

          * 描述: 延時100us,主要用在消除開關(guān)抖動

          * Arguments : none

          * Returns : none

          ***************************************************************************/

          void Delay10ms(void)

          {

          unsigned char i,j;

          for(i=20;i>0;i--)

          for(j=248;j>0;j--);

          }

          /**************************************************************************

          * GetHostStartKey()

          *

          * Description: 取得主持人開始按鍵的鍵值

          * Arguments : none

          * Returns : 1-->主持人按鍵; 0-->主持人未按鍵

          ***************************************************************************/

          Bool GetHostStartKey (void)

          {

          if (HOST_START ==1)

          return 0;

          else

          Delay10ms ();//如果發(fā)現(xiàn)主持人按鍵接通,要先延時100us,防止抖動

          if (HOST_START==1)

          return 0;

          else

          return 1;//延時時候還是接通,則判斷為該鍵確實按下

          }

          /**************************************************************************

          * GetHostCancelKey()

          *

          * Description: 取得主持人取消按鍵的鍵值

          * Arguments : none

          * Returns : 1-->主持人按鍵; 0-->主持人未按鍵

          ***************************************************************************/

          Bool GetHostCancelKey (void)

          {

          if (HOST_CANCEL ==1)

          return 0;

          else

          Delay10ms ();//如果發(fā)現(xiàn)主持人按鍵接通,要先延時100us,防止抖動

          if (HOST_CANCEL ==1)

          return 0;

          else

          return 1;//延時時候還是接通,則判斷為該鍵確實按下

          }

          /**************************************************************************

          * GetCounter

          *

          * Description: 取得預(yù)先設(shè)置的倒計時時間

          * Arguments : none

          * Returns : none

          ***************************************************************************/

          void GetCounter(void)

          {

          beginNum=1;//在所有開關(guān)都沒有撥動的時候倒計時為1秒,比設(shè)置為0秒要好

          intrCounter=20;//每一秒對應(yīng)的中斷次數(shù)為20次

          if (SWITCH1_3==1)

          {

          beginNum+=3;

          }

          if (SWITCH2_2==1)

          {

          beginNum+=2;

          }

          if (SWITCH3_2==1)

          {

          beginNum+=2;

          }

          if (SWITCH4_1==1)

          {

          beginNum+=1;

          }//以上判斷語句為判斷撥碼開關(guān)狀態(tài)

          intrCounter=20*beginNum;//計算總掃描次數(shù)

          }

          /**************************************************************************

          * GetPressed

          *

          * Description: 從P1口連接搶答端的四位來判斷搶答情況

          * Arguments : Byte KeyState-->P1 state

          * Returns : 搶答端的號碼 ; 0-->沒人搶答

          ***************************************************************************/

          Byte GetPressed(Byte KeyState)

          {

          Byte key;//記錄搶答端的號碼

          KeyState&=0x0f;//取P1口的低四位

          switch (KeyState)

          {

          case 0x0f: key=0;break;//全高,無人搶答

          case 0x0e: key=1;break;//只有P1.1,key1搶答

          case 0x0d: key=2;break;//只有P1.2,key2搶答

          case 0x0b: key=3;break;//只有P1.3,key3搶答

          case 0x07: key=4;break;//只有P1.4,key4搶答

          }

          /*

          switch (KeyState)

          {

          case 0x00: key=0;break;//全高,無人搶答

          case 0x01: key=1;break;//只有P1.0,key1搶答

          case 0x02: key=2;break;//只有P1.1,key2搶答

          case 0x04: key=3;break;//只有P1.2,key3搶答

          case 0x08: key=4;break;//只有P1.3,key4搶答

          }

          */

          //上面是在用高電平來判斷搶答狀態(tài)時的程序,經(jīng)證明不知道為何無效

          return key;

          }

          /**************************************************************************

          * IT0_Init

          *

          * Description: 初始化計時器T0的狀態(tài)

          * Arguments : none

          * Returns : none

          ***************************************************************************/

          void IT0_Init(void)

          {

          TMOD=0x01;//設(shè)置T0在方式1下工作

          TH0=0x3C;

          TL0=0xAF;//這兩個寄存器存的是計數(shù)器的計數(shù)開始的值,計算發(fā)現(xiàn)這兩個值累加至溢出后正好是50ms

          ET0=1;//使T0中斷可以溢出

          EA=1;//開啟總中斷

          TF0=0;//溢出位清零

          TR0=1;//開啟T0

          }

          /**************************************************************************

          * Timer0_Overflow() interrupt 1

          *

          * Description: 中斷溢出服務(wù)程序, 采用的是中斷方式1, 后面最好不加using選擇寄存器組以免與系統(tǒng)用在主程序的寄存器沖突

          * Arguments : none

          * Returns : none

          ***************************************************************************/

          void Timer0_Overflow() interrupt 1

          {

          static Byte second=20;//用20次中斷來判斷1秒

          TH0=0x3C;

          TL0=0xAF;

          second--;

          intrCounter--;

          /*

          if (second==0)//每隔一秒的操作

          {

          MAX7219_DisplayChar(DIG_2,code_table[--showNum]); //要避免用上面的會造成顯示"0"后面一秒鐘,才進(jìn)入開始

          second=20;//重新賦值每秒計數(shù)器

          if (intrCounter==0)

          {

          TR0=0;//關(guān)閉T0計數(shù)器

          isStart=1;//計時結(jié)束,進(jìn)入正常搶答

          //SPEAKER_start();//開始搶答的聲音

          }

          //待顯示"0"以后就開始搶答

          else

          {

          //SPEAKER_count();//倒計時聲音

          }

          }

          */

          if (second==0)//每隔一秒的操作

          {

          //if (showNum!=1) SPEAKER_count();//倒計時聲音

          //else SPEAKER_start();//開始搶答的聲音

          MAX7219_DisplayChar(DIG_2,code_table[--showNum]);//顯示數(shù)字

          second=20;//重新賦值每秒計數(shù)器

          }//待顯示"0"以后就開始搶答

          if (intrCounter==0)

          {

          TR0=0;//關(guān)閉T0計數(shù)器

          isStart=1;//計時結(jié)束,進(jìn)入正常搶答

          }

          }

          /**************************************************************************

          * PressedHandle

          *

          * Description: 按鍵處理

          * Arguments : Byte keyPressed-->按下的按鍵

          * Returns : none

          ***************************************************************************/

          void PressedHandle(Byte keyPressed)

          {

          MAX7219_Clear();//LED clear

          MAX7219_DisplayChar(DIG_2,code_table[keyPressed]);//在右側(cè)數(shù)碼管顯示搶答選手號碼,此時沒有去判斷是否犯規(guī)

          }

          /**************************************************************************

          * GetOrFoulHandle(Bool state)

          *

          * Description: 正常搶答或是犯規(guī)處理

          * Arguments : Bool state-->是GET和FOUL兩個宏的取之之一

          * Returns : none

          ***************************************************************************/

          void GetOrFoulHandle(Bool state)

          {

          if (!state)

          {

          MAX7219_DisplayChar(DIG_1,LED_FOUL);//如果是犯規(guī)的話左邊的LED要顯示"F",foul

          }

          }

          /**************************************************************************

          * CancelHandle()

          *

          * Description: 處理主持人取消倒計時

          * Arguments : none

          * Returns : none

          ***************************************************************************/

          void CancelHandle()

          {

          MAX7219_DisplayChar(DIG_1,LED_C);

          MAX7219_DisplayChar(DIG_2,LED_L);//主持人取消倒計時之后,兩個數(shù)碼管顯示"CL"-->cancel

          }

          /**************************************************************************

          * delayus()

          *

          * Description: 延時程序

          * Arguments : t-->us

          * Returns : time delayed

          ***************************************************************************/

          void delayus(unsigned char t )

          {

          unsigned char j;

          for(;t>0;t--)

          for(j=19;j>0;j--);

          }

          /**************************************************************************

          * SPEAKER_count/start/foul/get()

          *

          * Description: speaker發(fā)聲程序->計數(shù)/開始/犯規(guī)/搶答 四種聲音

          * Arguments : none

          * Returns : none

          ***************************************************************************/

          void SPEAKER_count(void)

          {

          unsigned char i;

          for (i=0;i<10;i++)

          {

          BEEP =1; //點亮

          delayus(20);

          BEEP =0; //熄滅

          delayus(20);

          }

          }

          void SPEAKER_start(void)

          {

          unsigned char i;

          for(i=0;i<200;i++)

          {

          BEEP =1; //點亮

          delayus(10);

          BEEP =0; //熄滅

          delayus(10);

          }

          }

          void SPEAKER_foul(void)

          {

          unsigned char i;

          for(i=0;i<250;i++)

          {

          BEEP =1; //點亮

          delayus(15);

          BEEP =0; //熄滅

          delayus(17);

          }

          }

          void SPEAKER_get(void)

          {

          unsigned char i;

          for(i=0;i<250;i++)

          {

          BEEP =1; //點亮

          delayus(10);

          BEEP =0; //熄滅

          delayus(10);

          }

          for(i=0;i<250;i++)

          {

          BEEP =1; //點亮

          delayus(20);

          BEEP =0; //熄滅

          delayus(20);

          }

          }

          /**************************************************************************

          * 主程序

          ***************************************************************************/

          void main()

          {

          Byte keyPressed,i;//選手按鍵號碼,沒有的話為0

          Bool hostPressed;//用來記錄主持人按鍵取消,0為沒有動作,1為取消

          number_temp=P1&0xf0;//P1口上次的狀態(tài),在調(diào)整倒計時時間的時候用到的

          LS138_E1=1; //譯碼器初始化

          MAX7219_Init();//數(shù)碼管初始化

          GetCounter();//獲取開始時候設(shè)置的倒計時時間

          MAX7219_DisplayChar(DIG_1,code_table[beginNum]);//顯示開始時設(shè)置的倒計時時間,在左位設(shè)置

          MAX7219_DisplayChar(DIG_2,READY);//調(diào)時間的時候右位的顯示

          //while(1);

          while(GetHostStartKey()==0)//當(dāng)主持人沒有按鍵的時候進(jìn)入循環(huán)

          {

          if (number_temp!=(P1&0xf0))//若調(diào)整了倒計時時間,則P1口狀態(tài)變了,就要重新設(shè)置和顯示

          {

          GetCounter();//獲取調(diào)整以后的倒計時時間

          MAX7219_DisplayChar(DIG_1,code_table[beginNum]);//顯示調(diào)整以后的倒計時時間

          number_temp=P1&0xf0;//記錄下來現(xiàn)在P1口的狀態(tài),以備后面的比較

          }

          } //當(dāng)主持人按鍵以后就結(jié)束調(diào)整進(jìn)入搶答倒計時

          MAX7219_DisplayChar(DIG_1,READY);

          while(GetHostCancelKey()==0);

          MAX7219_DisplayChar(DIG_1,READY);//清空右邊一位數(shù)碼管

          MAX7219_DisplayChar(DIG_2,code_table[beginNum]);

          for (i=100;i--;i>0)

          Delay10ms();//防止后面出現(xiàn)連讀的情況..

          //調(diào)整好倒計時時間后,按下start顯示"--",再按下cancel則顯示倒計時時間,此時可以開始倒計時了.

          counterBack=intrCounter;

          //這里原來寫的是while(1),寫上后就不行了,不知道為何..

          while(1)//這里要用自己加的循環(huán)來把程序束縛在這里運行

          {

          showNum=beginNum;//設(shè)置要顯示的時間,當(dāng)然時從倒計時時間開始

          intrCounter=counterBack;//設(shè)置總中斷的次數(shù)

          TR0=0;//禁用計時器0

          isPressed=0;//記錄是否有人按鍵

          isStart=0;//沒有開始搶答

          while(GetHostStartKey()==0);

          IT0_Init();//初始化計時器0, 啟用.

          MAX7219_DisplayChar(DIG_1,CLEAR);//清空左邊一位數(shù)碼管

          MAX7219_DisplayChar(DIG_2,code_table[beginNum]);

          while(!isPressed)//如果沒有記錄到有人按鍵就進(jìn)入

          {

          keyPressed=GetPressed(P1);//查詢一下P1口的狀態(tài),即按鍵情況

          hostPressed=GetHostCancelKey();

          if (!keyPressed&&!hostPressed)//如果沒有人按鍵,就進(jìn)入下次循環(huán)

          continue;

          else

          {

          TR0=0;//關(guān)閉定時器

          isPressed=1;//記錄到有人按鍵,提供條件跳出循環(huán)

          }

          }

          if (keyPressed!=0)

          {

          if (isStart)//如果已經(jīng)開始搶答

          {

          PressedHandle(keyPressed);//處理按鍵,即顯示搶答選手號碼

          GetOrFoulHandle(GET);//處理搶答

          LS138_E1=0; //譯碼器準(zhǔn)備工作

          switch (keyPressed)

          {

          case 1: LS138_A=0;LS138_B=0;LS138_C=0;break; //1號成功燈亮

          case 2: LS138_A=0;LS138_B=1;LS138_C=0;break; //2號成功燈亮

          case 3: LS138_A=1;LS138_B=0;LS138_C=0;break; //3號成功燈亮

          case 4: LS138_A=1;LS138_B=1;LS138_C=0;break; //4號成功燈亮

          default : break;

          }

          //SPEAKER_get();//處理搶答

          }

          else//否則,沒有開始搶答

          {

          PressedHandle(keyPressed);//處理按鍵,即顯示搶答選手號碼

          GetOrFoulHandle(FOUL);//處理犯規(guī),必須要放在后面,因為顯示數(shù)字的里面有一個clear

          LS138_E1=0; //譯碼器準(zhǔn)備工作

          switch (keyPressed)

          {

          case 1: LS138_A=0;LS138_B=0;LS138_C=1;break; //1號犯規(guī)燈亮

          case 2: LS138_A=0;LS138_B=1;LS138_C=1;break; //2號犯規(guī)燈亮

          case 3: LS138_A=1;LS138_B=0;LS138_C=1;break; //3號犯規(guī)燈亮

          case 4: LS138_A=1;LS138_B=1;LS138_C=1;break; //4號犯規(guī)燈亮

          default : break;

          }

          //SPEAKER_foul();//犯規(guī)發(fā)聲

          }

          }

          if (hostPressed==1)

          {

          CancelHandle();

          for (i=100;i--;i>0)

          Delay10ms();//防止后面出現(xiàn)連讀的情況..

          }

          while(GetHostCancelKey()==0);//如果主持人沒有按鍵再次開始,則停在次死循環(huán)處

          LS138_E1=1; //關(guān)閉譯碼器

          MAX7219_DisplayChar(DIG_1,READY);//清空右邊一位數(shù)碼管

          MAX7219_DisplayChar(DIG_2,code_table[beginNum]);//左位顯示設(shè)置的倒計時時間

          //到這里一次循環(huán)結(jié)束

          }

          }



          關(guān)鍵詞: 8051單片機搶答

          評論


          技術(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); })();