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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

  [復制鏈接]
跳轉到指定樓層
樓主
ID:352039 發(fā)表于 2018-6-14 18:25 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
這是我畫了好幾天做的搶答器,里面有電路仿真圖,c程序等,希望能夠幫助到大家。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  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;                  //答題計時鍵
  17. sbit S2=P3^3;                  //開始搶答時間調整鍵
  18. sbit S3=P3^4;                  //答題計時時間調整鍵
  19. char s;
  20. uchar num=0;
  21. char  time1;                                           //搶答時間
  22. char  time2;                                           //答題限時時間
  23. uint  m,n;                                             //T0,T1定時器定一秒時
  24. bit   flag1,flag2,flag3,flag4;                         //標志位
  25. bit   aa,bb;                                           //時間調整標志位

  26.                          //延時子函數(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ī)標志位
  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;                                    //關閉定時器0,時間停止
  91.                   TR1=1;                                    //打開定時器1,使揚聲器響一聲
  92.                   flag2=0;                                  //關閉開始鍵標志位,使再按其他七個鍵不會響應
  93.                }
  94.             }
  95.       if(K2==0)                                              //下面七個鍵的處理同上
  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)                                            //開始鍵按下,開始計時搶答
  185.       {if(num!=0)                                           //如果有人搶答,則顯示相應的幾號
  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];                                     //下面為顯示搶答倒計時
  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)或時間調整
  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ī)才顯示調整時間
  231.                                   {if(aa==1)
  232.                                      {
  233.                                             P0=0x76;                                           //第一位數(shù)碼管顯示"5(S)"(表示搶答時間調整)
  234.                                                 P2=table2[0];
  235.                                                 delay(2);
  236.                                                 P0=0x00;
  237.                                                 P2=0xff;
  238.                                                 P0=table1[time1/10];                               //下面顯示調整的搶答時間
  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",表示答題 時間調整
  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.                                                   //調整時間鍵掃描子函數(shù)
  286. void key2()
  287. {uchar i=100;
  288.   if(S2==0)                                                      //搶答時間調整
  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;                                                    //將搶答時間標志位置1
  298.                 bb=0;                                                    //同時關閉答題時間標志位
  299.                 }
  300.         }
  301.   if(S3==0)                                                      //答題時間調整
  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();                                                           //調用初始化子函數(shù)
  320.    while(1)
  321.     {key1();                                                        //調用開始鍵掃描子函數(shù)
  322.           if((flag1==0)&(flag2==1))                                     //當開始鍵沒按下及沒有人違規(guī)時才可進行時間調整
  323.              {key2();}
  324.           if((flag1==1)&(flag2==0))                                     //當開始鍵按下及有人搶答才進行開始回答計時倒 計時
  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)                                                    //開始鍵沒有按下時,有人按下了搶答器,則置違規(guī)標志位
  341.                           {flag4=1;
  342.                              D0=0;
  343.                             }
  344.                    }
  345.           if((flag1==1)&(flag2==1))                                           //如果開始鍵按下且搶答鍵沒有人按下,則進行八路 搶答鍵掃描
  346.               {key();}
  347.                   display();                                                      //顯示到數(shù)碼管上
  348.                 }
  349.          }
  350.          
  351.                                    //定時器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)                                                                  //搶答時間快到報警,隔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;                                                            //關閉開始鍵按下響一秒的嘟聲
  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.                                   //定時器1中斷子函數(shù)
  385. void t1() interrupt 3                                                           //定時器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.     }
復制代碼

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


評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

6#
無效樓層,該帖已經(jīng)被刪除
7#
無效樓層,該帖已經(jīng)被刪除
8#
ID:562914 發(fā)表于 2019-6-15 06:52 | 只看該作者
只有倒計時,搶答和搶答時間都沒有用
回復

使用道具 舉報

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

引腳吧,改那個定義
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 人操人免费视频 | 一级片av | 日本一区二区三区在线观看 | 日韩欧美国产精品一区 | 久久婷婷色 | 天天综合网91 | 欧美国产视频 | 草b视频| 欧美精品综合 | 日本亚洲一区二区 | 久久成人免费视频 | 久久久久久久综合 | 日韩精品在线视频免费观看 | 人人干视频在线 | 欧美综合久久久 | 国产中文一区二区三区 | 国产女人叫床高潮大片免费 | 日韩精品一区二区三区中文在线 | 伊人精品国产 | 超碰免费在线观看 | 天天搞夜夜操 | 亚洲自拍偷拍免费视频 | 欧美中文字幕在线 | 日韩一区二区三区av | 国产电影一区二区在线观看 | 欧美午夜精品久久久久免费视 | www.av在线 | 亚洲精品久久久一区二区三区 | 日日干夜夜操天天操 | 久久精品中文字幕 | 国产日韩欧美一区二区在线播放 | 成人毛片视频免费 | 久久久精品网 | 黄色在线免费观看视频 | 亚洲欧洲中文日韩 | 综合一区二区三区 | 成人性生交大片免费看r链接 | 精品免费国产 | 999国产视频| 久久久久久久久精 | www国产亚洲精品久久网站 |