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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機四路搶答器源程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:388941 發表于 2018-8-22 16:03 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
主持人操 k3 和 k4 兩個按鍵。選手共四位,分別操控S1 -- S2中的一個按鍵。
當主持人按下搶答開始按鍵S5后,倒計時開始,計時10s,此后最先按下按鍵的選手號碼將顯示在數碼管上,后來按下的將無顯示。
若十秒計時結束后,再按下按鍵也不會顯示。
若支持人沒有按開始按鍵,就有選手搶答,則視為犯規。此時犯規選手號碼將被顯示于數碼管上(最多顯示三位犯規選手,不顯示時間),同時,蜂鳴器一直發出長笛聲報警
而當主持人按下清零鍵 k4 后,一切狀態均恢復,可以開始新一輪搶答。
  按鍵功能簡介
K3 搶答開始    (使用外部中斷0 )
k4 清零         (使用外部中斷1 )

矩陣鍵盤        
S1 -- S4       分別為1到4號選手

單片機源程序如下:
  1. #include <reg52.h>
  2. typedef unsigned char u8;
  3. typedef unsigned int  u16;
  4. sbit led3=P2^2;
  5. sbit led2=P2^3;
  6. sbit led1=P2^4;
  7. sbit key1=P3^2;
  8. sbit key2=P3^3;
  9. sbit beep=P1^5;
  10. void delay(u16 i)
  11. {
  12.         u8 a;
  13.         while(i--)
  14.         {
  15.                 for(a=0;a<125;a++)
  16.                 {
  17.                         ;
  18.                 }
  19.         }
  20. }
  21. u16 code duanxuan[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  22. void weixuan(u16 i)
  23. {
  24.         switch(i)
  25.         {
  26.                 case (0) : led1=0;led2=0;led3=0;break;
  27.                 case (1) : led1=0;led2=0;led3=1;break;
  28.                 case (2) : led1=0;led2=1;led3=0;break;
  29.                 case (3) : led1=0;led2=1;led3=1;break;
  30.                 case (4) : led1=1;led2=0;led3=0;break;
  31.                 case (5) : led1=1;led2=0;led3=1;break;
  32.                 case (6) : led1=1;led2=1;led3=0;break;
  33.                 case (7) : led1=1;led2=1;led3=1;break;
  34.   }
  35. }
  36. void display(u16 i,u16 j)
  37. {
  38.         weixuan(i);
  39.         P0=duanxuan[j];
  40. }
  41. u16 a=0;  //判斷是否有選手按下
  42. void saomiao ()
  43. {
  44.         P1=0xf0;
  45.         if(P1!=0xf0)
  46.         {
  47.                 delay(10);
  48.                 if (P1!=0xf0)
  49.                 {     
  50.                         P1=0X7f;
  51.                         switch(P1)
  52.                         {
  53.                                 case(0x77) :  a=1;break;
  54.                                 case(0x7b) :  a=2;break;
  55.                                 case(0x7d) :  a=3;break;
  56.                                 case(0x7e) :  a=4;break;
  57.                         }       
  58.                         P1=0xf0;                       
  59.                         while(P1!=0xf0);
  60.                 }
  61.         }
  62. }
  63. u16 i=0,j=0,n=10,m=0,k,weigui[3],v=0;                 //m=1表示按下開始

  64. void daojishi()
  65. {
  66.                 P0=0x00;
  67.                 display(0,n%10);
  68.                 delay(1);
  69.                 P0=0x00;
  70.                 display(1,n/10);
  71.                 delay(1);
  72.                 if(n==0)
  73.                 {
  74.                         TR0=0;
  75.                 }
  76. }
  77. void main()
  78. {
  79.           EA=1;
  80.                 EX0=1;
  81.                 IT0=1;
  82.                 EX1=1;
  83.                 IT1=1;
  84.        
  85.           ET0=1;
  86.           TMOD=0X01;
  87.           TH0=(65536-1000)/256;
  88.           TL0=(65536-1000)%256;
  89.         while(1)
  90.         {
  91.                 v=0;
  92.                 P0=0x00;
  93.                 if(m==0)
  94.                 {
  95.                         saomiao();
  96.                         if(a!=0)
  97.                         {
  98.                                 while(1)
  99.                                 {
  100.                                         if(v==1)
  101.                                         {
  102.                                                 break;
  103.                                         }
  104.                                         saomiao();
  105.                                         if(a!=0)
  106.                                         {
  107.                                                 weigui[j]=a;
  108.                                                 if(j>0)
  109.                                                 {
  110.                                                         if(weigui[j]!=weigui[j-1])
  111.                                                         {
  112.                                                                 j++;
  113.                                                         }
  114.                                                 }
  115.                                                 if(j<1)
  116.                                                 {
  117.                                                         j++;
  118.                                                 }
  119.                                         }
  120.                                         a=0;
  121.                                         for(k=0;k<j;k++)
  122.                                         {
  123.                                                 P0=0x00;
  124.                                                 display(k,weigui[k]);
  125.                                                 beep=~beep;
  126.                                                 delay(10);
  127.                                         }
  128.                                         if(j==3)
  129.                                         {
  130.                                                 while(1)
  131.                                                 {
  132.                                                         for(k=0;k<j;k++)
  133.                                                         {
  134.                                                                 P0=0x00;
  135.                                                                 display(k,weigui[k]);
  136.                                                                 beep=~beep;
  137.                                                                 delay(1);
  138.                                                         }
  139.                                                         if(v==1)
  140.                                                         {
  141.                                                                 break;
  142.                                                         }
  143.                                                 }
  144.                                         }
  145.                                 }
  146.                         }
  147.                        
  148.                 }
  149.                 if(m==1)
  150.                 {
  151.                         daojishi();                         //開始倒計時
  152.                         saomiao();
  153.                         if(a!=0)
  154.                         {
  155.                                 while(1)
  156.                                 {
  157.                                         P0=0x00;
  158.                                         display(0,a);
  159.                                         delay(10);
  160.                                         if(v==1)
  161.                                         {
  162.                                                 break;
  163.                                         }
  164.                                 }
  165.                         }
  166.                        
  167.                 }
  168.         }
  169. }
  170. void zhongduan0() interrupt 0
  171. {
  172.         delay(10);
  173.         if(key1==0)
  174.         {
  175.                 TR0=1;
  176.                 m=1;
  177.                 while(key1==0);
  178.         }       
  179. }

  180. void zhongduan1() interrupt 2
  181. {
  182.         delay(10);
  183.         if(key2==0)
  184.         {
  185.                 n=10;
  186.                 m=0;
  187.                 a=0;
  188.                 j=0;
  189.                 v=1;
  190.                 TR0=0;
  191.                 while(key2==0);
  192.         }       
  193. }

  194. void dingshiqi() interrupt 1
  195. {
  196.         i++;
  197.         if(i==1000)
  198.         {
  199.                 i=0;
  200.                 n--;
  201.         }
  202.         TH0=(65536-1000)/256;
  203.         TL0=(65536-1000)%256;
  204. }
復制代碼

所有資料51hei提供下載:
四路搶答器.rar (24.51 KB, 下載次數: 61)




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

使用道具 舉報

沙發
ID:1 發表于 2018-8-22 18:40 | 只看該作者
樓主能分享下原理圖嗎?或者簡單說明一下
回復

使用道具 舉報

板凳
ID:388941 發表于 2018-8-23 10:38 | 只看該作者
admin 發表于 2018-8-22 18:40
樓主能分享下原理圖嗎?或者簡單說明一下

好的   我先發原理圖   有時間了我加點說明
回復

使用道具 舉報

地板
ID:388941 發表于 2018-8-23 10:42 | 只看該作者
這個學習板的原理圖

F103RCT6學習板(黑板).pdf

136.98 KB, 下載次數: 35, 下載積分: 黑幣 -5

回復

使用道具 舉報

5#
ID:508361 發表于 2019-4-9 22:48 | 只看該作者
謝謝分享
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美不卡一区二区三区 | 国产精品国产精品国产专区不蜜 | 特级毛片| 免费黄色成人 | 热re99久久精品国产99热 | 91国内精品久久 | 毛片网站在线观看视频 | 尤物视频在线免费观看 | av中文字幕网 | 粉嫩高清一区二区三区 | 婷婷福利视频导航 | 黑人精品| av黄色在线| 日韩视频 中文字幕 | 91精品国产高清一区二区三区 | 91麻豆产精品久久久久久 | 国产毛片毛片 | 国产伦精品| 亚洲444kkkk在线观看最新 | 在线欧美亚洲 | 日韩中文字幕在线视频观看 | 欧洲精品在线观看 | 久久久免费毛片 | 在线成人一区 | 欧美精品久久久久 | 欧美色综合网 | 精品福利在线视频 | 色伊人网 | 黄色一级大片在线免费看产 | 成人免费网站 | 日本不卡一区 | 成人久久18免费网站图片 | 免费国产一区二区视频 | 国产乱码久久久久久 | 黄网站涩免费蜜桃网站 | 欧美一区二区三区在线观看 | 成人久久久 | 亚洲午夜av| 男女深夜网站 | 91原创视频 | 亚洲高清在线观看 |