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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機8路搶答器PCB+電路圖+程序設計

[復制鏈接]
跳轉到指定樓層
樓主
適用于初學者,本人也是小白,歡迎一起交流看圖說話

制作出來的8路搶答器實物圖如下:




Altium Designer畫的8路搶答器原理圖和PCB圖如下:(51hei附件中可下載工程文件)


元件清單:
名稱    型號    數量
單片機    STC89C52    1
IC座    DIP40    1
萬能板    9*15    1
數碼管    MT03621AR    1
排阻    1K*8    1
蜂鳴器    有源 5V    1
三極管    9012    1
晶振    11.0592    1
電容    22pF    2
電容    10uF/16V    1
電阻    1K    2
按鍵    6*6*5    11
自鎖開關    8*8    1
接線端子    5.08*2P    1
導線        若干
焊錫絲        若干

單片機8路搶答器源程序如下:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. sbit smg1=P2^0;                //定義數碼管第一位
  4. sbit smg2=P2^1;                //定義數碼管第二位
  5. sbit smg3=P2^2;                //定義數碼管第三位
  6. sbit keyks=P3^0;        //定義開始按鍵
  7. sbit keytz=P3^1;        //定義停止按鍵
  8. sbit keyqc=P3^2;        //定義清除按鍵
  9. sbit key1=P1^0;                //定義1號搶答選手
  10. sbit key2=P1^1;                //定義2號搶答選手
  11. sbit key3=P1^2;                //定義3號搶答選手
  12. sbit key4=P1^3;                //定義4號搶答選手
  13. sbit key5=P1^4;                //定義5號搶答選手
  14. sbit key6=P1^5;                //定義6號搶答選手
  15. sbit key7=P1^6;                //定義7號搶答選手
  16. sbit key8=P1^7;                //定義8號搶答選手
  17. sbit spk=P3^7;                //定義蜂鳴器
  18. int djs=60,js=0;                   //djs和bt是初始倒計時時間,可修改
  19. //int table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  20. int table[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x40};

  21. void delayms(int x)           //延時函數
  22. {
  23. char i;
  24. while(x--)
  25. {
  26.   for(i=500;i>0;i--);
  27. }
  28. }



  29. void Timer0_init()                        //定時器0初始化
  30. {
  31.       js=0;
  32.           TMOD=0x01;                                  //T0為定時器方式1
  33.       TH0=0x4c;
  34.           TL0=0x00;                        
  35.       //TR0=1;//IT1=1;
  36.           ET0=1;//EX1=1;
  37.           EA=1;        
  38. }

  39. void timer0() interrupt 1 using 1        //定時器0中斷服務函數
  40. {
  41.             TF0=0;
  42.                  TH0=0x4c;
  43.                 TL0=0x00;                                        //賦初值
  44.                 js++;
  45.                 if(js==15)
  46.                   { js=0;
  47.                     djs--;                                        //產生1s的倒計時
  48.                         //led1=~led1;
  49.                    }
  50. }

  51. void djsxs()                                   //顯示倒計時函數
  52. {        int b1,b2;
  53.          b1=djs/10;
  54.         b2=djs%10;                                  // 將倒計時時間分成高低位
  55.         P0=table[b1];
  56.     smg2=0;
  57.     delayms(3);
  58.     smg2=1;                                         //顯示十位數字

  59.         P0=table[b2];
  60.         smg3=0;
  61.         delayms(3);                                 //顯示個位數字
  62.         smg3=1;
  63. }
  64. void djsxs22()                                 
  65. {        
  66.          P0=0x40;
  67.     smg1=0;
  68.     delayms(3);
  69.     smg1=1;                                        //第一位數碼管顯示-

  70.         P0=0x40;
  71.     smg2=0;
  72.     delayms(3);                           //第三位數碼管顯示-
  73.     smg2=1;

  74.         P0=0x40;
  75.         smg3=0;
  76.         delayms(3);
  77.         smg3=1;                                  //第四位數碼管顯示-
  78. }

  79. void djsxs1()
  80. {
  81.         P0=table[1];
  82.     smg1=0;
  83.     delayms(3);
  84.     smg1=1;                                   //第一位數碼管顯示1

  85. }
  86. void djsxs2()
  87. {
  88.         P0=table[2];
  89.     smg1=0;
  90.     delayms(3);
  91.     smg1=1;                                //第一位數碼管顯示2

  92. }
  93. void djsxs3()
  94. {
  95.         P0=table[3];
  96.     smg1=0;
  97.     delayms(3);
  98.     smg1=1;                          //第一位數碼管顯示3

  99. }
  100. void djsxs4()
  101. {
  102.         P0=table[4];
  103.     smg1=0;
  104.     delayms(3);
  105.     smg1=1;                         //第一位數碼管顯示4

  106. }
  107. void djsxs5()
  108. {
  109.         P0=table[5];
  110.     smg1=0;
  111.     delayms(3);
  112.     smg1=1;                   //第一位數碼管顯示5

  113. }
  114. void djsxs6()
  115. {
  116.         P0=table[6];
  117.     smg1=0;
  118.     delayms(3);
  119.     smg1=1;                        //第一位數碼管顯示6

  120. }
  121. void djsxs7()
  122. {
  123.         P0=table[7];
  124.     smg1=0;
  125.     delayms(3);
  126.     smg1=1;                  //第一位數碼管顯示7
  127. }
  128. void djsxs8()
  129. {
  130.         P0=table[8];
  131.     smg1=0;
  132.     delayms(3);
  133.     smg1=1;                 //第一位數碼管顯示8

  134. }
  135. void main()
  136. {
  137. int djs1=60;
  138. Timer0_init();         //初始化定時器中斷
  139. spk=1;                          //蜂鳴器不響
  140.         djs=60;                //倒計時賦值
  141. while(1)
  142. {

  143. LOOP1:   djs=djs1;
  144. djsxs22();        //LOOP1是標號,顯示 -  --

  145.                         if(key1==0)                 //在定時器運行狀態下,key1==0 則說明1號選手按下按鍵
  146.                                                 {
  147.                                                            delayms(3);
  148.                                                            if(key1==0)
  149.                                                            {
  150.                                                             while(!key1);          //去除按鍵抖動后,重新在判斷,是否確實按下
  151.                                                          djs=60;
  152.                                                          while(1)
  153.                                                           {
  154.                                                             TR0=0;                  //定時器停止
  155.                                                                 djsxs();         
  156.                                                            if(key2==0)          //復位按下按下
  157.                                                            {        
  158.                                                                                    delayms(3);                   //去除抖動
  159.                                                                                    if(key2==0)           //再次判斷是否按下復位按鍵
  160.                                                                                    {
  161.                                                                                     while(!key2); //如果按下復位鍵,則回到- --狀態
  162.                                                                                  djs++;
  163.                                                                                  djs1=djs;
  164.                                                                                 }
  165.                                                                         }
  166.                                                            if(key3==0)          //復位按下按下
  167.                                                            {        
  168.                                                                                    delayms(3);                   //去除抖動
  169.                                                                                    if(key3==0)           //再次判斷是否按下復位按鍵
  170.                                                                                    {
  171.                                                                                     while(!key3); //如果按下復位鍵,則回到- --狀態
  172.                                                                                  djs--;
  173.                                                                                  djs1=djs;
  174.                                                                                 }
  175.                                                                         }
  176.                                                            if(key1==0)          //復位按下按下
  177.                                                            {        
  178.                                                                                    delayms(3);                   //去除抖動
  179.                                                                                    if(key1==0)           //再次判斷是否按下復位按鍵
  180.                                                                                    {
  181.                                                                                     while(!key1); //如果按下復位鍵,則回到- --狀態
  182.                                                                                 goto LOOP1;                  //goto語句,回到loop1表號處
  183.                                                                                 }
  184.                                                                         }                                                                                   
  185.                                                           }
  186.                                                         }
  187.                                                 }
  188.                         if(keyks==0)
  189.                         {                  
  190.                           //spk=0;
  191.                            delayms(3);                 //去除按鍵抖動
  192.                            if(keyks==0)
  193.                            {
  194.                             while(!keyks);          //以上表示按下開始按鍵
  195.                                 //spk=1;                           //蜂鳴器不響
  196.                                 TR0=1;                           //啟動定時器 開始倒計時
  197.                                 while(1)
  198.                                   {
  199.                                     djsxs();
  200.                                 if(keytz==0)
  201.                                                 {
  202.                                                            delayms(3);                         //此處表示出去抖動, 以后不一一標出
  203.                                                            if(keytz==0)
  204.                                                            {
  205.                                                             while(!keytz);           //以上表示按下停止按鍵后

  206.                                                             TR0=0;                   //定時器停止

  207.                                                         }
  208.                                                 }
  209.                                    if(keyks==0)
  210.                                                 {
  211.                                                     //spk=0;
  212.                                                            delayms(3);
  213.                                                            if(keyks==0)
  214.                                                            {
  215.                                                             while(!keyks);           //以上表示按下清楚按鍵后
  216.                                                          //spk=1;                           //蜂鳴器不響
  217.                                                             TR0=1;                   //定時器啟動

  218.                                                         }
  219.                                                 }
  220. /***************************以下是八個選手搶答,key1表示1號選手,依次類推,注釋只寫第一位選手,其他和第一個完全一致,************************************/
  221.                                 if((key1==0)&&(TR0==1))                 //在定時器運行狀態下,key1==0 則說明1號選手按下按鍵
  222.                                                 {                 spk=0;                 //蜂鳴器響
  223.                                                            delayms(3);
  224.                                                            if(key1==0)
  225.                                                            {
  226.                                                             while(!key1);          //去除按鍵抖動后,重新在判斷,是否確實按下
  227.                                                           spk=1;                  //蜂鳴器不響
  228.                                                          while(1)
  229.                                                           {
  230.                                                             TR0=0;                  //定時器停止
  231.                                                                  djsxs1();          //顯示選手編號
  232.                                                                 djsxs();          //顯示剩余倒計時時間
  233.                                                            if(keyqc==0)
  234.                                                            {        
  235.                                                                                    delayms(3);                   //去除抖動
  236.                                                                                    if(keyqc==0)
  237.                                                                                    {
  238.                                                                                     while(!keyqc); //如果按下清楚鍵,則回到- --狀態

  239.                                                                                 goto LOOP1;                  //goto語句,回到loop1表號處
  240.                                                                                 }
  241.                                                                                 }                                                                                   
  242.                                                           }
  243.                                                         }
  244.                                                 }
  245.                                 if((key2==0)&&(TR0==1))
  246.                                                 {        spk=0;
  247.                                                            delayms(3);
  248.                                                            if(key2==0)
  249.                                                            {
  250.                                                             while(!key2);
  251.                                                           spk=1;
  252.                                                          while(1)
  253.                                                           {
  254.                                                             TR0=0;
  255.                                                                  djsxs2();
  256.                                                                 djsxs();
  257.                                                            if(keyqc==0)
  258.                                                            {        
  259.                                                                                    delayms(3);
  260.                                                                                    if(keyqc==0)
  261.                                                                                    {
  262.                                                                                     while(!keyqc);

  263.                                                                                 goto LOOP1;        
  264.                                                                                 }
  265.                                                                                 }                                                                                   
  266.                                                           }
  267.                                                         }
  268.                                                 }
  269.                                         if((key3==0)&&(TR0==1))
  270.                                                 {        spk=0;
  271.                                                            delayms(3);
  272.                                                            if(key3==0)
  273.                                                            {
  274.                                                             while(!key3);
  275.                                                           spk=1;
  276.                                                          while(1)
  277.                                                           {
  278.                                                             TR0=0;
  279.                                                                  djsxs3();
  280.                                                                 djsxs();
  281.                                                            if(keyqc==0)
  282.                                                            {        
  283.                                                                                    delayms(3);
  284.                                                                                    if(keyqc==0)
  285.                                                                                    {
  286.                                                                                     while(!keyqc);

  287.                                                                                 goto LOOP1;        
  288.                                                                                 }
  289.                                                                                 }                                                                                   
  290.                                                           }
  291.                                                         }
  292.                                                 }
  293.                                 if((key4==0)&&(TR0==1))
  294.                                                 {        spk=0;
  295.                                                            delayms(3);
  296.                                                            if(key4==0)
  297.                                                            {
  298.                                                             while(!key4);
  299.                                                           spk=1;
  300.                                                          while(1)
  301.                                                           {
  302.                                                             TR0=0;
  303.                                                                  djsxs4();
  304.                                                                 djsxs();
  305.                                                            if(keyqc==0)
  306.                                                            {        
  307.                                                                                    delayms(3);
  308.                                                                                    if(keyqc==0)
  309.                                                                                    {
  310.                                                                                     while(!keyqc);

  311.                                                                                 goto LOOP1;        
  312.                                                                                 }
  313.                                                                                 }                                                                                   
  314.                                                           }
  315.                                                         }
  316.                                                 }
  317.                                         if((key5==0)&&(TR0==1))
  318.                                                 {        spk=0;
  319.                                                            delayms(3);
  320.                                                            if(key5==0)
  321.                                                            {
  322.                                                             while(!key5);
  323.                                                           spk=1;
  324.                                                          while(1)
  325.                                                           {
  326.                                                             TR0=0;
  327.                                                                  djsxs5();
  328.                                                                 djsxs();
  329.                                                            if(keyqc==0)
  330.                                                            {        
  331.                                                                                    delayms(3);
  332.                                                                                    if(keyqc==0)
  333.                                                                                    {
  334.                                                                                     while(!keyqc);

  335.                                                                                 goto LOOP1;        
  336.                                                                                 }
  337.                                                                                 }                                                                                   
  338.                                                           }
  339.                                                         }
  340.                                                 }
  341.                                         if((key6==0)&&(TR0==1))
  342.                                                 {  spk=0;
  343.                                                            delayms(3);
  344.                                                            if(key6==0)
  345.                                                            {
  346.                                                             while(!key6);
  347.                                                           spk=1;
  348.                                                          while(1)
  349.                                                           {
  350.                                                             TR0=0;
  351.                                                                  djsxs6();
  352.                                                                 djsxs();
  353.                                                            if(keyqc==0)
  354.                                                            {        
  355.                                                                                    delayms(3);
  356.                                                                                    if(keyqc==0)
  357.                                                                                    {
  358.                                                                                     while(!keyqc);

  359.                                                                                 goto LOOP1;        
  360.                                                                                 }
  361.                                                                                 }                                                                                   
  362.                                                           }
  363.                                                         }
  364.                                                 }
  365.                                         if((key7==0)&&(TR0==1))
  366.                                                 {        spk=0;
  367.                                                            delayms(3);
  368.                                                            if(key7==0)
  369.                                                            {
  370.                                                             while(!key7);
  371.                                                           spk=1;
  372.                                                          while(1)
  373.                                                           {
  374.                                                             TR0=0;
  375.                                                                  djsxs7();
  376.                                                                 djsxs();
  377.                                                                 if(keyqc==0)
  378.                                                            {        
  379.                                                                                    delayms(3);
  380.                                                                                    if(keyqc==0)
  381.                                                                                    {
  382.                                                                                     while(!keyqc);

  383.                                                                                 goto LOOP1;        
  384.                                                                                 }
  385.                                                                                 }           
  386.                                                           }
  387.                                                         }
  388.                                                 }
  389. ……………………

  390. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
搶答器.7z (84.42 KB, 下載次數: 111)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品乱码一区二区三区 | 国内自拍视频在线观看 | 国产97久久 | 久久精品天堂 | 日日草夜夜草 | 中文字幕二区 | 天天艹 | 欧洲高清转码区一二区 | 97精品久久 | 特黄色一级毛片 | 日韩一级电影免费观看 | 欧美精品在线一区二区三区 | 国产精品成人一区二区三区夜夜夜 | 国产亚洲精品美女久久久久久久久久 | 国产欧美一区二区三区久久 | 久久久免费少妇高潮毛片 | 九九热在线视频观看这里只有精品 | 日韩精品一区二区在线观看 | 久国产 | 国产一区欧美一区 | 国际精品鲁一鲁一区二区小说 | 精品国产视频 | 日本小电影在线 | 国产成人精品在线 | 欧美日韩精品一区二区三区蜜桃 | 久久精品国产99国产 | 免费成人高清在线视频 | 毛片a级| 久久精品亚洲精品国产欧美 | 日日干夜夜操 | 久久久这里都是精品 | 久久久久久国产精品 | 日韩精彩视频 | 精品久| 综合网在线 | 亚洲国产一区二区视频 | 天天色av | 国产999精品久久久 日本视频一区二区三区 | 欧美一区二区三区在线播放 | 日韩免费在线观看视频 | 亚洲成人精品在线 |