久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4174|回復: 3
打印 上一主題 下一主題
收起左側

80c51單片機八路搶答器的編寫程序。!跪求~~~

[復制鏈接]
跳轉到指定樓層
樓主
ID:260468 發表于 2017-12-12 08:26 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
80c51單片機八路搶答器的編寫程序!!跪求~~~
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:447820 發表于 2018-12-17 14:05 | 只看該作者
(1)        搶答器同時供8名選手或8個代表隊比賽,分別用8個按鈕K1~K8;
(2)        設置一個系統清除和搶答控制開關K0,該開關由主持人控制。
(3)        搶答器具有鎖存與顯示功能。即選手按動開關,鎖存相應的編號,并在優先搶答選手的編號一直保持到主持人將系統清除為止。
(4)        主持人按下搶答“開始”按鈕,搶答開始。
(5)        當某一路搶答成功時,在數碼管上顯示成功信息和該路的號數。
(6)        當某一路搶答違規時,能在數碼管上顯示違規信息和該路的號數。
回復

使用道具 舉報

板凳
ID:447820 發表于 2018-12-17 14:05 | 只看該作者
#include<reg51.h>
typedef unsigned char uchar;
typedef unsigned int uint;
sbit K0=P3^0;//        開始搶答按鍵
sbit beep=P3^7;//        蜂鳴器
sbit D0=P3^1;//        指示燈
sbit K1=P1^0;//1 號選手搶答按鍵
sbit K2=P1^1;//2 號選手搶答按鍵
sbit K3=P1^2;//3 號選手搶答按鍵
sbit K4=P1^3;//4 號選手搶答按鍵
sbit K5=P1^4;//5 號選手搶答按鍵
sbit K6=P1^5;//6 號選手搶答按鍵
sbit K7=P1^6;//7 號選手搶答按鍵
sbit K8=P1^7;//8 號選手搶答按鍵
sbit S1=P3^2;// 答 題 計 時 鍵
sbit S2=P3^3;//        開始搶答時間調整鍵
sbit S3=P3^4;//        答題計時時間調整鍵
char s;
uchar num=0;
char time1;//        搶答時間
char time2;//        答題限時時間
uint m,n;//T0,T1        定時器定一秒時
bit flag1,flag2,flag3,flag4;        // 標志位
bit aa,bb;//        時間調整標志位
// 延時子函數
void delay(uint z)
{
uint x,y; for(x=z;x>0;x--)
for(y=120;y>0;y--);
}

uchar code table1[]={
          // 共陰數碼管段碼值
       0x3f,0x06,0x5b,0x4f,
       0x66,0x6d,0x7d,0x07,
       0x7f,0x6f,0x77,0x7c,
           0x39,0x5e,0x79,0x71
           };
uchar code table2[]={
                                  // 共陰數碼管位碼值
                  0xfe,0xfd, 0xfb,0xf7
                                  };
// 初始化子函數
void init()
{
TMOD=0x11;
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
TH1=(65536-2000)/256;
TL1=(65536-2000)%256;
ET0=1;
ET1=1;
EA=1;
P0=0x00;
time1=10;
time2=10;
flag2=1;
}
// 開始鍵掃描子函數
void key1()
{
   uchar i=100;
   if(K0==0)
   {
     delay(10);
         if(K0==0)
     {
      while(K0==0&&i)
      {
       i--;
       delay(10);
      }
       TR0=1;
           s=time1;
           m=0;
       flag1=1;
           flag2=1;
           flag3=1;
           num=0;
           beep=1;
           D0=1;
       flag4=0;        // 清除違規標志位
       aa=0;
           bb=0;
          }
   }
}
// 選手搶答按鍵掃描子函數
void key()
{
  uchar i=100;
  if(K1==0)
  {
   delay(10);
   if(K1==0)
   {
    while(K1==0&&i)
    {
     i--;
     delay(10);
    }
    num=1;        // 數碼管顯示        1 號 "1"
TR0=0;        // 關閉定時器        0, 時間停止
    TR1=1;        // 打開定時器        1, 使揚聲器響一聲
    flag2=0;        // 關閉開始鍵標志位        , 使再按其他七個鍵不會響應
   }
  }
  if(K2==0)        // 下面七個鍵的處理同上
  {
    delay(10);
        if(K2==0)
        {
     while(K2==0&&i)
     {
      i--;
      delay(10);
     }
     num=2;
         TR0=0;
         TR1=1;
     flag2=0; // 重 要
    }
  }
   if(K3==0)
   {
    delay(10);
        if(K3==0)
    {
     while(K3==0&&i)
     {
      i--;
      delay(10);
     }
     num=3;
         TR0=0;
         TR1=1;
     flag2=0;
    }
   }
   if(K4==0)
   {
    delay(10);
        if(K4==0)
    {
     while(K4==0&&i)
     {
      i--;
      delay(10);
     }
         num=4;
         TR0=0;
         TR1=1;
     flag2=0;
    }
   }
   if(K5==0)
   {
    delay(10);
        if(K5==0)
    {
     while(K5==0&&i)
     {
      i--;
      delay(10);
     }
     num=5;
         TR0=0;
         TR1=1;
     flag2=0;
    }
   }
   if(K6==0)
   {
    delay(10);
        if(K6==0)
    {
     while(K6==0&&i)
     {
      i--;
      delay(10);
     }
     num=6;
         TR0=0;
         TR1=1;
     flag2=0;
    }
   }
   if(K7==0)
   {
    delay(10);
        if(K7==0)
    {
     while(K7==0&&i)
     {
      i--;
      delay(10);
     }
     num=7;
         TR0=0;
         TR1=1;
     flag2=0;
    }
   }
   if(K8==0)
   {
    delay(10);
        if(K8==0)
    {
     while(K8==0&&i)
     {
      i--;
      delay(10);
     }
     num=8;
         TR0=0;
         TR1=1;
     flag2=0;
    }
   }
}
// 數碼管顯示子函數
void display()
{
if(flag1==1)        // 開始鍵按下 , 開始計時搶答
{
if(num!=0)        // 如果有人搶答 , 則顯示相應的幾號
{
  P0=table1[num];        // 顯示幾號搶到了
  P2=table2[0]; delay(2); P0=0;
  P2=0xff;
}
else        // 否則沒人搶答 , 則前面不顯示幾號
{
  P0=0x00;
  P2=0xff;
}
  P0=table1[s/10];        // 下面為顯示搶答倒計時
  P2=table2[2];
  delay(2);
  P0=0;
  P2=0xff;
  P0=table1[s%10];
  P2=table2[3];
  delay(2);
  P2=0xff;
  P0=0x00;
}
else        // 如果開始鍵沒有按下        , 則顯示 F FF( 若有違規者 , 則顯示違規號碼及FF)或時間調整
{
  if(flag4==1)        // 違規顯示
  {
   if(num!=0)
   {
    P0=table1[num];        // 顯示幾號違規了
    P2=table2[0];
        delay(2);
        P0=0x00;
    P2=0xff;
    P0=table1[15];        // 下面顯示        FF, 表示違規了
    P2=table2[2];
        delay(2);
    P0=0x00;        // 消 隱
    P2=0xff;
        P0=table1[15];
        P2=table2[3];
        delay(2);
        P0=0x00;
    P2=0xff;
   }
   else
        {
         P0=0x00;
     P2=0xff;
        }
  }
  else        // 沒有人違規才顯示調整時間
  {
   if(aa==1)
   {
    P0=0x76;        // 第一位數碼管顯示  "5(S)"(        表示搶答時間調整 )
    P2=table2[0];
        delay(2);
        P0=0x00;
    P2=0xff;
    P0=table1[time1/10]; //        下面顯示調整的搶答時間
    P2=table2[2];
        delay(2);
        P0=0x00;
    P2=0xff;
        P0=table1[time1%10];
        P2=table2[3];
        delay(2);
    P0=0x00;
    P2=0xff;
   }
   else if(bb==1)
   {
    P0=0x38;        // 第一位與第二位數碼管合起來顯示        "T",        表示答題時間調整
    P2=table2[0];
        delay(2);
        P0=0x00;
    P2=0xff;

    P0=table1[time2/10];
        P2=table2[2];
        delay(2);
    P0=0x00;
    P2=0xff;

    P0=table1[time2%10];
        P2=table2[3];
        delay(2);
    P0=0x00;
    P2=0xff;
   }
   else        // 否則顯示 F FF
   {
    P0=table1[15];
        P2=table2[0];
        delay(2);
        P0=0x00;
    P0=table1[15];
        P2=table2[2];
        delay(2);
    P0=0x00;        // 消 隱
    P2=0xff;
        P0=table1[15];
        P2=table2[3];
        delay(2);
        P0=0x00;
    P2=0xff;
   }
  }
}
}
// 調整時間鍵掃描子函數
void key2()
{
  uchar i=100;
  if(S2==0)        // 搶答時間調整
  {
   delay(10);
   if(S2==0)
   {
    while(S2==0&&i)
    {
     i--;
     delay(10);
    }
    time1++;
        if(time1==61)
    {
     time1=10;
    }
    aa=1;        // 將搶答時間標志位置        1 bb=0;        // 同時關閉答題時間標志位
   }
  }
  if(S3==0)        // 答題時間調整
  {
   delay(10);
   if(S3==0)
   {
    while(S3==0&&i)
    {
     i--;
     delay(10);
    }   
    time2++;
        if(time2==61)
    {
     time2=10;
         }
     bb=1;
         aa=0;
   }
  }
}
// 主函數
void main()
{
  uchar i=100;
  init();//        調用初始化子函數
  while(1)
  {
   key1();//        調用開始鍵掃描子函數
   if((flag1==0)&(flag2==1))        // 當開始鍵沒按下及沒有人違規時才可進行時間調整
   {
    key2();
   }
   if((flag1==1)&(flag2==0))        // 當開始鍵按下及有人搶答才進行開始回答計時倒計時
   {
    if(S1==0)
    {
     delay(10); if(S1==0)
     {
      while(S1==0&&i)
      {
       i--;
       delay(10);
      }
      s=time2;
          TR0=1;
          m=0;
          TR1=1;
     }
    }
   }
   if((flag1==0)&(flag2==1))        // 違 規
   {
    key();
    if(num!=0)        //        開始鍵沒有按下時        , 有人按下了搶答器        , 則置違規標志位
    {
     flag4=1;
     D0=0;
    }
   }
   if((flag1==1)&(flag2==1))        //        如果開始鍵按下且搶答鍵沒有人按下        , 則進行八路搶答鍵掃描
   {
    key();
   }
   display();//        顯示到數碼管上
  }
}
// 定時器 0 中斷子函數
void t0() interrupt 1
{
  TH0=(65536-2000)/256;        //2ms TL0=(65536-2000)%256;
  if(flag3)        // 開始(START)鍵按下 , 嘟一聲 ( 長 1 秒), 表示開始搶答
  {
   beep=~beep;
  }
  else
      beep=1;
  if(s<5)        // 搶答時間快到報警  , 隔 1 秒響一聲且紅燈閃爍        , 響三聲
  {
   if(s%2==0)
   {
    flag3=1;
    D0=0;
   }
   else
       {
            flag3=0;
            D0=1;
           }
  }
  m++;
  if(m==500)        //1        秒
  {
   m=0; s--;
   flag3=0;        // 關閉開始鍵按下響一秒的嘟聲
   if(s==-1)
   {
    s=20;
    TR0=0;
    flag1=0;        // 顯 示 F FF
    flag2=1;
        num=0;
        D0=1;
   }
  }
}
// 定時器 1 中斷子函數
void t1() interrupt 3        // 定時器  1 處理有人按下搶答器嘟一聲        ( 長 1 秒)
{
  TH1=(65536-2000)/256;
  TL1=(65536-2000)%256;
  beep=~beep;
  n++;
  if(n==500)
  {
   n=0;
   TR1=0;
  }
}
回復

使用道具 舉報

地板
ID:671357 發表于 2019-12-23 15:57 | 只看該作者
你這是完整的嗎?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 韩国久久 | 国产亚洲久 | 99精品在线 | 99久久婷婷国产综合精品电影 | 91久久国产综合久久91精品网站 | 巨大荫蒂视频欧美另类大 | 午夜精品一区二区三区三上悠亚 | av网站免费 | 亚洲精品久久国产高清情趣图文 | 亚洲三区在线 | 操久久久 | 国产一级淫片免费视频 | 欧美一区二区在线观看 | 亚洲h在线观看 | 欧美一区二区三区电影 | 久久狠狠| 伊人伊人 | 激情欧美一区二区三区中文字幕 | 亚洲v日韩v综合v精品v | 综合二区 | av在线免费观看网站 | 91精品一区二区三区久久久久 | 日本成人三级电影 | 久久久久无码国产精品一区 | 国产伦精品一区二区三区照片91 | 一级毛片免费完整视频 | 欧美九九九 | 国产在线精品一区 | av黄色在线| 欧美亚洲视频在线观看 | 成人免费看黄网站在线观看 | 欧美11一13sex性hd | 午夜专区 | 国产成人精品在线播放 | 久久艹av| 久久亚洲欧美日韩精品专区 | 日韩精品久久久久 | 国产精品永久久久久久久www | 日韩网| 免费成人高清在线视频 | 国产精品自拍视频网站 |