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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7466|回復(fù): 9
打印 上一主題 下一主題
收起左側(cè)

自己做的單片機(jī)8路搶答器,里面有電路仿真圖,c程序等

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
這是我畫了好幾天做的搶答器,里面有電路仿真圖,c程序等,希望能夠幫助到大家。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機(jī)源程序如下:
  1.                                    //總源程序
  2. #include<reg51.h>
  3. typedef unsigned char uchar;
  4. typedef unsigned int  uint;
  5. sbit K0=P3^0;                  //開始搶答按鍵
  6. sbit beep=P3^7;                //蜂鳴器
  7. sbit D0=P3^1;                  //指示燈
  8. sbit K1=P1^0;                  //1號選手搶答按鍵
  9. sbit K2=P1^1;                  //2號選手搶答按鍵
  10. sbit K3=P1^2;                  //3號選手搶答按鍵
  11. sbit K4=P1^3;                  //4號選手搶答按鍵
  12. sbit K5=P1^4;                  //5號選手搶答按鍵
  13. sbit K6=P1^5;                  //6號選手搶答按鍵
  14. sbit K7=P1^6;                  //7號選手搶答按鍵
  15. sbit K8=P1^7;                  //8號選手搶答按鍵
  16. sbit S1=P3^2;                  //答題計(jì)時(shí)鍵
  17. sbit S2=P3^3;                  //開始搶答時(shí)間調(diào)整鍵
  18. sbit S3=P3^4;                  //答題計(jì)時(shí)時(shí)間調(diào)整鍵
  19. char s;
  20. uchar num=0;
  21. char  time1;                                           //搶答時(shí)間
  22. char  time2;                                           //答題限時(shí)時(shí)間
  23. uint  m,n;                                             //T0,T1定時(shí)器定一秒時(shí)
  24. bit   flag1,flag2,flag3,flag4;                         //標(biāo)志位
  25. bit   aa,bb;                                           //時(shí)間調(diào)整標(biāo)志位

  26.                          //延時(shí)子函數(shù)
  27. void delay(uint z)
  28. {uint x,y;
  29.    for(x=z;x>0;x--)
  30.   for(y=120;y>0;y--); }
  31. uchar code table1[]={
  32.                                     //共陰數(shù)碼管段碼值
  33.                                       0x3f,0x06,0x5b,0x4f,
  34.                                       0x66,0x6d,0x7d,0x07,
  35.                                       0x7f,0x6f,0x77,0x7c,
  36.                                       0x39,0x5e,0x79,0x71 };
  37. uchar code table2[]={
  38.                                    //共陰數(shù)碼管位碼值
  39.                                               0xfe,0xfd,
  40.                                               0xfb,0xf7 };

  41.                         //初始化子函數(shù)
  42. void init()
  43. {TMOD=0x11;
  44.     TH0=(65536-2000)/256;
  45.     TL0=(65536-2000)%256;
  46.     TH1=(65536-2000)/256;
  47.     TL1=(65536-2000)%256;
  48.     ET0=1;
  49.     ET1=1;
  50.     EA=1;
  51.     P0=0x00;
  52.     time1=10;
  53.     time2=10;
  54.     flag2=1; }

  55.                           //開始鍵掃描子函數(shù)
  56.   void key1()
  57.   {uchar i=100;
  58.     if(K0==0)
  59.    {delay(10);
  60.        if(K0==0)
  61.      {    while(K0==0&&i)
  62.                {i--;
  63.                   delay(10);}
  64.            TR0=1;
  65.            s=time1;
  66.            m=0;
  67.            flag1=1;
  68.            flag2=1;
  69.            flag3=1;
  70.            num=0;
  71.            beep=1;
  72.            D0=1;
  73.            flag4=0;                              //清除違規(guī)標(biāo)志位
  74.            aa=0;
  75.            bb=0;
  76.                   }
  77.           }
  78.      }
  79.          
  80.                            //選手搶答按鍵掃描子函數(shù)
  81. void key()
  82. {uchar i=100;
  83.          if(K1==0)
  84.             {delay(10);
  85.               if(K1==0)
  86.               {while(K1==0&&i)
  87.                 {i--;
  88.                   delay(10);}
  89.                   num=1;                                    //數(shù)碼管顯示1號"1"
  90.                   TR0=0;                                    //關(guān)閉定時(shí)器0,時(shí)間停止
  91.                   TR1=1;                                    //打開定時(shí)器1,使揚(yáng)聲器響一聲
  92.                   flag2=0;                                  //關(guān)閉開始鍵標(biāo)志位,使再按其他七個(gè)鍵不會響應(yīng)
  93.                }
  94.             }
  95.       if(K2==0)                                              //下面七個(gè)鍵的處理同上
  96.         {
  97.            delay(10);
  98.            if(K2==0)
  99.             {while(K2==0&&i)
  100.               {i--;
  101.                delay(10);}
  102.              num=2;
  103.              TR0=0;
  104.              TR1=1;
  105.              flag2=0;                    //重要
  106.             }
  107.          }
  108.    if(K3==0)
  109.        {delay(10);
  110.          if(K3==0)
  111.          {while(K3==0&&i)
  112.             {i--;
  113.               delay(10);}
  114.           num=3;
  115.           TR0=0;
  116.           TR1=1;
  117.           flag2=0;
  118.          }
  119.        }
  120.    if(K4==0)
  121.     {delay(10);
  122.        if(K4==0)
  123.          {while(K4==0&&i)
  124.              {i--;
  125.                delay(10);}
  126.            num=4;
  127.            TR0=0;
  128.            TR1=1;
  129.            flag2=0;
  130.          }
  131.       }
  132.    if(K5==0)
  133.     {delay(10);
  134.       if(K5==0)
  135.          {while(K5==0&&i)
  136.             {i--;
  137.                delay(10);}
  138.            num=5;
  139.            TR0=0;
  140.            TR1=1;
  141.            flag2=0;
  142.           }
  143.         }
  144.   if(K6==0)
  145.   {delay(10);
  146.    if(K6==0)
  147.      {while(K6==0&&i)
  148.            {i--;
  149.              delay(10);}
  150.           num=6;
  151.           TR0=0;
  152.           TR1=1;
  153.           flag2=0;
  154.          }
  155.    }
  156. if(K7==0)
  157.     {delay(10);
  158.            if(K7==0)
  159.               {while(K7==0&&i)
  160.                       {i--;
  161.                              delay(10);}
  162.                      num=7;
  163.                          TR0=0;
  164.                          TR1=1;
  165.                          flag2=0;
  166.                    }
  167.          }
  168.   if(K8==0)
  169.       {delay(10);
  170.              if(K8==0)
  171.                     {while(K8==0&&i)
  172.                              {i--;
  173.                                     delay(10);}
  174.                           num=8;
  175.                           TR0=0;
  176.                           TR1=1;
  177.                           flag2=0;
  178.                         }
  179.             }
  180.     }
  181.         
  182.                             //數(shù)碼管顯示子函數(shù)
  183. void display()
  184.    {if(flag1==1)                                            //開始鍵按下,開始計(jì)時(shí)搶答
  185.       {if(num!=0)                                           //如果有人搶答,則顯示相應(yīng)的幾號
  186.              {P0=table1[num];                                   //顯示幾號搶到了
  187.                   P2=table2[0];
  188.                    delay(2);
  189.                    P0=0;
  190.                    P2=0xff;
  191.                    }
  192.                  else                                                  //否則沒人搶答,則前面不顯示幾號
  193.                  {P0=0x00;
  194.                    P2=0xff;}
  195.                   P0=table1[s/10];                                     //下面為顯示搶答倒計(jì)時(shí)
  196.                   P2=table2[2];
  197.                   delay(2);
  198.                   P0=0;
  199.                   P2=0xff;
  200.                   P0=table1[s%10];
  201.                   P2=table2[3];
  202.                   delay(2);
  203.                   P2=0xff;
  204.                   P0=0x00;
  205.                   }
  206.                   else                                                  //如果開始鍵沒有按下,則顯示F FF(若有違規(guī)者,則顯示違規(guī)號碼及 FF)或時(shí)間調(diào)整
  207.                   {if(flag4==1)                                         //違規(guī)顯示
  208.                      {if(num!=0)
  209.                             {P0=table1[num];                                //顯示幾號違規(guī)了
  210.                                   P2=table2[0];
  211.                                   delay(2);
  212.                                   P0=0x00;
  213.                                   P2=0xff;
  214.                                   P0=table1[15];                                   //下面顯示 FF,表示違規(guī)了
  215.                                   P2=table2[2];
  216.                                   delay(2);
  217.                                   P0=0x00;                                            //消隱
  218.                                   P2=0xff;
  219.                                   P0=table1[15];
  220.                                   P2=table2[3];
  221.                                   delay(2);
  222.                                   P0=0x00;
  223.                                   P2=0xff;
  224.                                   }
  225.                                   else
  226.                                   {
  227.                                   P0=0x00;
  228.                                   P2=0xff;}
  229.                                   }
  230.                                   else                                                 //沒有人違規(guī)才顯示調(diào)整時(shí)間
  231.                                   {if(aa==1)
  232.                                      {
  233.                                             P0=0x76;                                           //第一位數(shù)碼管顯示"5(S)"(表示搶答時(shí)間調(diào)整)
  234.                                                 P2=table2[0];
  235.                                                 delay(2);
  236.                                                 P0=0x00;
  237.                                                 P2=0xff;
  238.                                                 P0=table1[time1/10];                               //下面顯示調(diào)整的搶答時(shí)間
  239.                                         P2=table2[2];
  240.                                                 delay(2);
  241.                                                 P0=0x00;
  242.                                                 P2=0xff;
  243.                                                 P0=table1[time1%10];
  244.                                                 P2=table2[3];
  245.                                                 delay(2);
  246.                                                 P0=0x00;
  247.                                                 P2=0xff;
  248.                                                 }
  249.                                                 else if(bb==1)
  250.                                                 {P0=0x38;                               //第一位與第二位數(shù)碼管合起來顯示"T",表示答題 時(shí)間調(diào)整
  251.                                                   P2=table2[0];
  252.                                                   delay(2);
  253.                                                   P0=0x00;
  254.                                                   P2=0xff;
  255.                                                   P0=table1[time2/10];
  256.                                                   P2=table2[2];
  257.                                                   delay(2);
  258.                                                   P0=0x00;
  259.                                                   P2=0xff;
  260.                                                   P0=table1[time2%10];
  261.                                                   P2=table2[3];
  262.                                                   delay(2);
  263.                                                   P0=0x00;
  264.                                                   P2=0xff;
  265.                                                  }
  266.                                                  else                                  //否則顯示F FF
  267.                                                  {P0=table1[15];
  268.                                                    P2=table2[0];
  269.                                                    delay(2);
  270.                                                    P0=0x00;
  271.                                                    P0=table1[15];
  272.                                                    P2=table2[2];
  273.                                                    delay(2);
  274.                                                    P0=0x00;                             //消隱
  275.                                                    P2=0xff;
  276.                                                    P0=table1[15];
  277.                                                    P2=table2[3];
  278.                                                    delay(2);
  279.                                                    P0=0x00;
  280.                                                    P2=0xff;
  281.                                                    }
  282.                                                  }
  283.                                     }
  284.                                 }

  285.                                                   //調(diào)整時(shí)間鍵掃描子函數(shù)
  286. void key2()
  287. {uchar i=100;
  288.   if(S2==0)                                                      //搶答時(shí)間調(diào)整
  289.      {delay(10);
  290.            if(S2==0)
  291.              {while(S2==0&&i)
  292.                     {i--;
  293.                           delay(10);}
  294.                 time1++;
  295.                 if(time1==61)
  296.                 {time1=10;}
  297.                 aa=1;                                                    //將搶答時(shí)間標(biāo)志位置1
  298.                 bb=0;                                                    //同時(shí)關(guān)閉答題時(shí)間標(biāo)志位
  299.                 }
  300.         }
  301.   if(S3==0)                                                      //答題時(shí)間調(diào)整
  302.       {delay(10);
  303.              if(S3==0)
  304.                    {while(S3==0&&i)
  305.                       {i--;
  306.                             delay(10);}
  307.                                 time2++;
  308.                                 if(time2==61)
  309.                                   {time2=10;}
  310.                                   bb=1;
  311.                                   aa=0;
  312.                         }
  313.                 }
  314.   }
  315.             
  316.                                                    //主函數(shù)
  317. void main()
  318. {uchar i=100;
  319.   init();                                                           //調(diào)用初始化子函數(shù)
  320.    while(1)
  321.     {key1();                                                        //調(diào)用開始鍵掃描子函數(shù)
  322.           if((flag1==0)&(flag2==1))                                     //當(dāng)開始鍵沒按下及沒有人違規(guī)時(shí)才可進(jìn)行時(shí)間調(diào)整
  323.              {key2();}
  324.           if((flag1==1)&(flag2==0))                                     //當(dāng)開始鍵按下及有人搶答才進(jìn)行開始回答計(jì)時(shí)倒 計(jì)時(shí)
  325.              {if(S1==0)
  326.                     {delay(10);
  327.                            if(S1==0)
  328.                              {while(S1==0&&i)
  329.                                     {i--;
  330.                                           delay(10);}
  331.                                    s=time2;
  332.                                    TR0=1;
  333.                                    m=0;
  334.                                    TR1=1;
  335.                                    }
  336.                           }
  337.                   }
  338.           if((flag1==0)&(flag2==1))                                           //違規(guī)
  339.              {key();
  340.                     if(num!=0)                                                    //開始鍵沒有按下時(shí),有人按下了搶答器,則置違規(guī)標(biāo)志位
  341.                           {flag4=1;
  342.                              D0=0;
  343.                             }
  344.                    }
  345.           if((flag1==1)&(flag2==1))                                           //如果開始鍵按下且搶答鍵沒有人按下,則進(jìn)行八路 搶答鍵掃描
  346.               {key();}
  347.                   display();                                                      //顯示到數(shù)碼管上
  348.                 }
  349.          }
  350.          
  351.                                    //定時(shí)器0中斷子函數(shù)
  352. void t0() interrupt 1
  353. {TH0=(65536-2000)/256;//2ms
  354.   TL0=(65536-2000)%256;
  355.   if(flag3)                                                                 //開始(START)鍵按下,嘟一聲(長1秒),表示開始搶答
  356.   {
  357.     beep=~beep;
  358.         }
  359.         else
  360.          beep=1;
  361.         if(s<5)                                                                  //搶答時(shí)間快到報(bào)警,隔1秒響一聲且紅燈閃爍,響三聲
  362.         {if(s%2==0)
  363.            {flag3=1;
  364.              D0=0;}
  365.           else
  366.            {flag3=0;
  367.               D0=1;}
  368.           }
  369.           m++;
  370.           if(m==500)//1秒
  371.             {m=0;
  372.                   s--;
  373.                   flag3=0;                                                            //關(guān)閉開始鍵按下響一秒的嘟聲
  374.                   if(s==-1)
  375.                     {s=20;
  376.                           TR0=0;
  377.                           flag1=0;                                                        //顯示F FF
  378.                           flag2=1;
  379.                           num=0;
  380.                           D0=1;}
  381.                   }
  382.   }
  383.   
  384.                                   //定時(shí)器1中斷子函數(shù)
  385. void t1() interrupt 3                                                           //定時(shí)器1處理有人按下?lián)尨鹌鬣揭宦?長1秒)
  386.    {TH1=(65536-2000)/256;
  387.      TL1=(65536-2000)%256;
  388.          beep=~beep;
  389.          n++;
  390.          if(n==500)
  391.             {n=0;TR1=0;}
  392.     }
復(fù)制代碼

所有資料51hei提供下載:
Keil.zip (30.04 KB, 下載次數(shù): 132)
實(shí)驗(yàn)電路圖.zip (41.02 KB, 下載次數(shù): 145)


評分

參與人數(shù) 2黑幣 +10 收起 理由
lzDestiny + 5 贊一個(gè)!
Eason張 + 5 贊一個(gè)!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏6 分享淘帖 頂4 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:89286 發(fā)表于 2018-11-7 21:30 | 只看該作者
thanks for sharing
回復(fù)

使用道具 舉報(bào)

板凳
ID:426961 發(fā)表于 2018-11-15 12:39 | 只看該作者
厲害了,大佬的頭奧
回復(fù)

使用道具 舉報(bào)

地板
ID:404878 發(fā)表于 2018-12-20 17:39 | 只看該作者
想問一下,那個(gè)里面有仿真
回復(fù)

使用道具 舉報(bào)

5#
ID:452999 發(fā)表于 2018-12-23 23:58 | 只看該作者
你好,在嗎。我把程序拷到仿真芯片里。只有倒計(jì)時(shí),搶答和搶答時(shí)間都沒有用,請問一下怎么改呀
回復(fù)

使用道具 舉報(bào)

6#
ID:562914 發(fā)表于 2019-6-15 06:52 | 只看該作者
只有倒計(jì)時(shí),搶答和搶答時(shí)間都沒有用
回復(fù)

使用道具 舉報(bào)

7#
ID:569737 發(fā)表于 2019-6-22 21:53 | 只看該作者
hhz199701 發(fā)表于 2018-12-23 23:58
你好,在嗎。我把程序拷到仿真芯片里。只有倒計(jì)時(shí),搶答和搶答時(shí)間都沒有用,請問一下怎么改呀

引腳吧,改那個(gè)定義
回復(fù)

使用道具 舉報(bào)

8#
ID:335259 發(fā)表于 2019-10-19 17:12 | 只看該作者
有人實(shí)驗(yàn)過沒,為啥我實(shí)驗(yàn)的時(shí)候用不了
回復(fù)

使用道具 舉報(bào)

9#
ID:658757 發(fā)表于 2019-12-12 10:55 | 只看該作者
我也是,實(shí)驗(yàn)用不了
回復(fù)

使用道具 舉報(bào)

10#
ID:796901 發(fā)表于 2020-7-4 01:47 | 只看該作者
好像樓主的程序可以實(shí)現(xiàn)以下功能吧
1、        基本要求:有一個(gè)主持人控制開關(guān)和6路搶答按扭,當(dāng)主持人允許搶答時(shí)才能進(jìn)行搶答操作,并用一個(gè)數(shù)碼管顯示搶答選手的號碼,同時(shí)其他選手不能再搶答。
2、        當(dāng)主持人允許搶答后倒計(jì)時(shí)5秒時(shí)間,在這5秒內(nèi)搶答有效,過后就不能進(jìn)行搶答了。
3、        電路上要加個(gè)蜂鳴器的電路,當(dāng)有選手搶答時(shí)蜂鳴器響一下。
4、        當(dāng)有選手搶答后,進(jìn)行倒計(jì)時(shí)20秒作為選手回答問題時(shí)間,用兩個(gè)數(shù)碼管顯示,倒計(jì)時(shí)時(shí)間到時(shí)有聲光提示。
5、        擴(kuò)展功能(選做),
用按鍵可設(shè)置倒計(jì)時(shí)的時(shí)間,范圍在5秒到30秒之間。
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 天天操天天射天天舔 | 一区二区国产精品 | 久久99精品久久久久久国产越南 | 久久久久久九九九九九九 | 精品国产欧美一区二区三区成人 | 国产成人99久久亚洲综合精品 | 欧美a视频| 搞黄网站在线观看 | 国产精品嫩草影院精东 | 久久久精品综合 | 日韩中文字幕免费在线观看 | 自拍偷拍亚洲一区 | 精品免费国产一区二区三区四区 | 国产高清一区二区 | 亚洲不卡在线观看 | 91色视频在线观看 | 欧美高清免费 | 久久97精品 | 中文字幕在线三区 | 亚洲一区二区中文字幕 | 亚洲毛片在线观看 | 91精品国产91久久久久久 | 欧美日韩不卡合集视频 | 欧美一级片在线看 | 久久精品色欧美aⅴ一区二区 | 精品久久久久久红码专区 | 日韩视频一级 | 免费在线看黄视频 | 日韩一区二区不卡 | 国产伦精品一区二区三区精品视频 | 精品国产一区二区三区性色av | 日本亚洲精品成人欧美一区 | a级毛片毛片免费观看久潮喷 | 天天射色综合 | 乳色吐息在线观看 | 欧美在线视频一区二区 | 成人av电影天堂 | 91精品无人区卡一卡二卡三 | 国产一区二区三区四区 | 黄a网| 国产伦精品一区二区三区精品视频 |