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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2976|回復: 1
收起左側

單片機四路搶答器(倒計時)基于51單片機

[復制鏈接]
ID:627904 發(fā)表于 2019-11-10 12:03 | 顯示全部樓層 |閱讀模式
本帖最后由 123456ld 于 2019-11-11 15:09 編輯

基于c51的四路搶答器,本實驗通過數(shù)碼管結合矩陣按鍵及獨立按鍵組成四路搶答器。對不同選手的判斷從而在數(shù)碼管上顯示那位選手搶答成功暫停計時,或哪三位選手犯規(guī)觸發(fā)蜂鳴器報警。其中倒計時的開始由獨立按鍵K1實現(xiàn),對搶答或倒計時的恢復由獨立按鍵K3實現(xiàn)。程序源碼為本人自創(chuàng),如有不懂,請留言發(fā)問。篇幅有限僅提供部分代碼。詳情請下載后查閱。

該程序適用stc89c51單片機

單片機源程序如下:
  1. /****************************************************
  2. *                    實驗內容
  3. *                   四路搶答器
  4. **************************************************/

  5. #include <reg52.h>

  6. typedef unsigned int u16;
  7. typedef unsigned char u8;

  8. /***********************************************
  9. *
  10. *               變量及引腳定義聲明
  11. *************************************************/
  12. sbit AA = P2^2;
  13. sbit BB = P2^3;
  14. sbit CC = P2^4;
  15. sbit k3 = P3^2;
  16. sbit k4 = P3^3;
  17. sbit beep = P1^5;
  18. int i=0;      //初始狀態(tài)控制毫秒的兩位數(shù)碼管為0
  19. int j=10;     //初始狀態(tài)控制秒的兩位數(shù)碼管為10
  20. int jishu=0;  //以10ms為一個劑量,精準控制毫秒的99-0
  21. int cishu=0; //消除最后一秒帶來的影響
  22. int xuanshou=0;  //選手編號
  23. int biaozhi=1;    //控制搶答開始后只有一個人可以被記錄
  24. int wei1=0 , wei2=0 , wei3=0;
  25. enum position {zero, one, two, three, four, five, six, seven};

  26. u16 code duanxuan[16] = { 0x3f,0x06,0x5b,0x4f,
  27.                           0x66,0x6d,0x7d,0x07,
  28.                                               0x7f,0x6f,0x77,0x7c,
  29.                           0x39,0x5e,0x79,0x71};

  30. /*****************************************************
  31. *
  32. *                   子函數(shù)申明
  33. ******************************************************/                                                                                                        
  34. void delay(u16 i);      //延時函數(shù)         
  35. void jvzhen();                        //矩陣鍵盤選手確定                                                
  36. void weixuan( u16 i );  //數(shù)碼管位選
  37. void timer0();          //定時器初始化
  38. void xianshi();         //數(shù)碼管倒計時顯示
  39. void int0();            //中斷0倒計時開始
  40. void int1();                        //中斷1問題結束恢復數(shù)碼管                                                        
  41. void panduan();         //答題選手的判斷
  42. void qiangda();         //選手搶答時的判斷
  43.                                                                                                 
  44. /*****************************************************
  45. *                     主函數(shù)
  46. *******************************************************/                                                                                                        
  47. void main()
  48. {
  49.         int0();
  50.         int1();
  51.         timer0();        
  52.         while(1)
  53.         {
  54.                 xianshi();
  55.                 jvzhen();
  56.                 panduan();
  57.                 qiangda();
  58.         }
  59. }

  60. void qiangda()
  61. {
  62.         if( j==10&&xuanshou!=0 )
  63.         {
  64.         wei1 = xuanshou;
  65.         while(1)
  66.         {
  67.             xianshi();
  68.             weixuan(7);
  69.             P0 = duanxuan[wei1];           
  70.             delay(1);
  71.             P0 = 0x00;
  72.             
  73.             beep=~beep;
  74.             delay(1);
  75.             jvzhen();
  76.             if( xuanshou!=wei1 )
  77.             {
  78.                 break;
  79.             }
  80.             if( k4==0 )
  81.             {               
  82.                 break;
  83.             }
  84.         }
  85.         wei2 = xuanshou;
  86.         while(1)
  87.         {
  88.             xianshi();
  89.             
  90.             weixuan(7);
  91.             P0 = duanxuan[wei2];           
  92.             delay(1);
  93.             P0 = 0x00;
  94.          
  95.             weixuan(6);
  96.             P0 = duanxuan[wei1];
  97.             delay(1);
  98.             P0 = 0x00;
  99.             
  100.             beep=~beep;
  101.             delay(1);
  102.             jvzhen();
  103.             if( xuanshou!=wei2 )
  104.             {
  105.                 break;
  106.             }
  107.             if( k4==0 )
  108.             {               
  109.                 break;
  110.             }
  111.         }
  112.         wei3 = xuanshou;
  113.         while(1)
  114.         {
  115.             xianshi();
  116.             
  117.             weixuan(7);
  118.             P0 = duanxuan[wei3];           
  119.             delay(1);
  120.             P0 = 0x00;
  121.          
  122.             weixuan(6);
  123.             P0 = duanxuan[wei2];
  124.             delay(1);
  125.             P0 = 0x00;
  126.             
  127.             weixuan(5);
  128.             P0 = duanxuan[wei1];
  129.             delay(1);
  130.             P0 = 0x00;
  131.             
  132.             beep=~beep;
  133.             delay(1);
  134.             jvzhen();
  135.             if( k4==0 )
  136.             {               
  137.                 break;
  138.             }
  139.         }     
  140.         }        
  141. }

  142. /*        延時           */
  143. void delay(u16 i)
  144. {
  145.         u16 a;
  146.         while(i--)
  147.         {
  148.                 for(a = 0; a < 100; a++)
  149.                 {
  150.                         ;
  151.                 }               
  152.         }        
  153. }

  154. /* 顯示哪位選手按鍵暫停     */
  155. void panduan()
  156. {
  157.         if( i!=0 && xuanshou!=0 )
  158.         {
  159.                 switch( xuanshou )
  160.                 {
  161.                         case 1 : TR0=0; weixuan(7); P0=duanxuan[1]; delay(1); P0 = 0x00; break;
  162.                         case 2 : TR0=0; weixuan(7); P0=duanxuan[2]; delay(1); P0 = 0x00; break;
  163.                         case 3 : TR0=0; weixuan(7); P0=duanxuan[3]; delay(1); P0 = 0x00; break;
  164.                         case 4 : TR0=0; weixuan(7); P0=duanxuan[4]; delay(1); P0 = 0x00; break;
  165.                 }
  166.                 biaozhi=0;
  167.         }
  168. }

  169. /*      矩陣鍵盤選手確定        */
  170. void jvzhen()
  171. {
  172.         P1 = 0x0f;
  173.         if( (P1!=0x0f&&biaozhi==1) )
  174.         {               
  175.                 delay(5);
  176.                 if( (P1!=0x0f)  )
  177.                 {
  178.                         switch( P1 )
  179.                         {
  180.                                 case 0x07 : xuanshou = 1; break;
  181.                                 case 0x0b : xuanshou = 2; break;
  182.                                 case 0x0d : xuanshou = 3; break;
  183.                                 case 0x0e : xuanshou = 4; break;
  184.                         }
  185.                         P1=0xf0;
  186.                         switch( P1 )
  187.                         {
  188.                                 case (0x70) : xuanshou = xuanshou;    break;        
  189.                         }
  190.                 }
  191.         }        
  192. }

  193. /* 數(shù)碼管位選*/
  194. void weixuan( u16 i )
  195. {
  196.         switch(i)
  197.         {
  198.                 case (zero):  CC = 0; BB = 0; AA = 0; break;        //第零位
  199.                 case (one):          CC = 0; BB = 0; AA = 1; break;        //第一位
  200.                 case (two):   CC = 0; BB = 1; AA = 0; break;        //第二位
  201.                 case (three): CC = 0; BB = 1; AA = 1; break;        //第三位
  202.                 case (four):  CC = 1; BB = 0; AA = 0; break;        //第四位
  203.                 case (five):  CC = 1; BB = 0; AA = 1; break;        //第五位
  204.                 case (six):   CC = 1; BB = 1; AA = 0; break;        //第六位
  205.                 case (seven): CC = 1; BB = 1; AA = 1; break;        //第七位
  206.         }
  207. }

  208. /* 定時器初始化*/
  209. void timer0()
  210. {
  211.         TMOD =0x01;
  212.         TH0 = (65536-1000)/256;
  213.         TL0 = (65536-1000)%256; //1ms
  214.         ET0 = 1;
  215.         EA = 1;
  216. }

  217. /* 倒計時顯示 */
  218. void xianshi()
  219. {
  220.                 weixuan(0);
  221.                 P0 = duanxuan[i%10];                        
  222.                 delay(1);
  223.                 P0 = 0x00;
  224.    
  225.                 weixuan(1);
  226.                 P0 = duanxuan[i/10];                        
  227.                 delay(1);
  228.                 P0 = 0x00;

  229.                 weixuan(2);
  230.                 P0 = 0x40;                        
  231.                 delay(1);
  232.                 P0 = 0x00;
  233.                
  234.                 weixuan(3);
  235.                 P0 = duanxuan[j%10];                        
  236.                 delay(1);
  237.                 P0 = 0x00;
  238.                
  239.                 weixuan(4);
  240.                 P0 = duanxuan[j/10];                        
  241.                 delay(1);
  242.                 P0 = 0x00;               
  243. }

  244. /* 倒計時開始 */
  245. void int0()
  246. {
  247.         EA=1;
  248.         IT0=1;
  249.         EX0=1;
  250. }

  251. /*  數(shù)碼管復位 */
  252. void int1()
  253. {
  254.         EX1=1;
  255.         IT1=1;
  256.         EA=1;
  257. }





復制代碼

所有資料51hei提供下載:
四路搶答器(倒計時).zip (35.3 KB, 下載次數(shù): 39)


評分

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

查看全部評分

回復

使用道具 舉報

ID:1 發(fā)表于 2019-11-10 21:14 | 顯示全部樓層
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩欧美三区 | 精品国产一区二区三区观看不卡 | 国产综合精品一区二区三区 | 国产精品亚洲一区二区三区在线 | 在线观看亚洲一区二区 | 欧美日韩一区二区在线 | 一二区成人影院电影网 | 色中文在线 | 欧美亚洲网站 | 亚洲二区视频 | 亚洲综合日韩精品欧美综合区 | 国产精品久久久久久久久久 | 国产精品中文字幕一区二区三区 | www九色| 99re视频这里只有精品 | 精品一区二区三区四区外站 | 成人无遮挡毛片免费看 | 精品一二区 | 国产精品亚洲一区二区三区在线 | 国产精品国产成人国产三级 | 国产在线小视频 | 老头搡老女人毛片视频在线看 | av在线免费网 | 久久综合激情 | 激情视频中文字幕 | 欧美精品在线免费观看 | 亚洲综合无码一区二区 | 国产目拍亚洲精品99久久精品 | 久久综合爱 | 久久综合影院 | 成人深夜福利 | 久久电影一区 | 久久国产精品一区二区三区 | 日韩在线日韩 | 日本一区二区高清不卡 | 精品国产一区二区三区久久久蜜月 | 精品一区二区电影 | 欧美欧美欧美 | 久久97精品| 欧美成人a∨高清免费观看 欧美日韩中 | 亚洲成av |