欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

單片機(jī)八路搶答器設(shè)計(jì)(keil+Proteus仿真+PCB原理圖)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


Altium Designer畫(huà)的原理圖和PCB圖如下:(51hei附件中可下載工程文件)


單片機(jī)源程序如下:
  1. /*************************************************************
  2.                       八路搶答器系統(tǒng)

  3. 補(bǔ)充說(shuō)明:
  4. ***************************************************************/
  5. #include<reg52.h>                   //頭文件
  6. #include<SMG.h>
  7. #include<EEPROM.h>
  8. #include<INTERRUPT.h>

  9. #define uchar unsigned char//宏定義
  10. #define uint unsigned int

  11. /**********************引腳定義************************/
  12. sbit key_zhu=P2^2;           //主持人鍵
  13. sbit key_jia=P2^1;           //加鍵
  14. sbit key_jian=P2^0;           //減鍵

  15. sbit key_1=P1^1;           //八位選手按鍵定義
  16. sbit key_2=P1^3;
  17. sbit key_3=P1^5;
  18. sbit key_4=P1^7;
  19. sbit key_5=P3^1;
  20. sbit key_6=P3^3;
  21. sbit key_7=P3^5;
  22. sbit key_8=P3^7;

  23. sbit led_1=P1^0;           //八位LED燈按鍵定義
  24. sbit led_2=P1^2;
  25. sbit led_3=P1^4;
  26. sbit led_4=P1^6;
  27. sbit led_5=P3^0;
  28. sbit led_6=P3^2;
  29. sbit led_7=P3^4;
  30. sbit led_8=P3^6;
  31. /**********************變量定義************************/
  32. uchar zhu_f=0;                   //比賽進(jìn)行階段標(biāo)記位,=0表示沒(méi)有按。=1表示在設(shè)置倒計(jì)時(shí)的時(shí)間。=2表示開(kāi)始搶答
  33. uchar qiang_f=0;           //搶答犯規(guī)標(biāo)記,=0沒(méi)有犯規(guī)。=1表示有人犯規(guī)
  34. uchar wan_f=0;                   //搶答完成標(biāo)記,=0搶答沒(méi)完成后還沒(méi)有開(kāi)始。=1表示搶答完成
  35. uchar time=30;                   //倒計(jì)時(shí)時(shí)間
  36. uchar T0_num;                   //定時(shí)器0計(jì)數(shù)
  37. uchar number;                   //搶答成功選手的編號(hào),或犯規(guī)選手的編號(hào)。=0的時(shí)候表示沒(méi)有

  38. /********************************************************
  39. 函數(shù)名稱:void delayms(uint ms)
  40. 函數(shù)作用:毫秒延時(shí)函數(shù)
  41. 參數(shù)說(shuō)明:
  42. ********************************************************/
  43. void delayms(uint ms)
  44. {
  45.         unsigned char i=100,j;
  46.         for(;ms;ms--)
  47.         {
  48.                 while(--i)
  49.                 {
  50.                         j=10;
  51.                         while(--j);
  52.                 }
  53.         }
  54. }
  55. /********************************************************
  56. 函數(shù)名稱:void bajing()
  57. 函數(shù)作用:搶答犯規(guī)報(bào)警提示
  58. 參數(shù)說(shuō)明:
  59. ********************************************************/
  60. void bajing()
  61. {
  62.         buzz=0;                   //開(kāi)蜂鳴器
  63.         delayms(10);
  64.         buzz=1;                   //關(guān)蜂鳴器
  65.         delayms(10);
  66. }
  67. /********************************************************
  68. 函數(shù)名稱:uchar qianda()
  69. 函數(shù)作用:搶答按鍵檢測(cè),返回?fù)尨鹁幪?hào)
  70. 參數(shù)說(shuō)明:
  71. ********************************************************/
  72. uchar qianda()
  73. {
  74.         uchar temp=0;
  75.         if(key_1==0)                                  //一號(hào)犯規(guī),下同
  76.                 temp=1;                          //記錄1號(hào)
  77.         else
  78.                 if(key_2==0)
  79.                         temp=2;
  80.                 else
  81.                         if(key_3==0)
  82.                                 temp=3;
  83.                         else
  84.                                 if(key_4==0)
  85.                                         temp=4;
  86.                                 else
  87.                                         if(key_5==0)
  88.                                                 temp=5;
  89.                                         else
  90.                                                 if(key_6==0)
  91.                                                         temp=6;
  92.                                                 else
  93.                                                         if(key_7==0)
  94.                                                                 temp=7;
  95.                                                         else
  96.                                                                 if(key_8==0)
  97.                                                                         temp=8;       
  98.         return temp;       
  99. }
  100. /********************************************************
  101. 函數(shù)名稱:void led_kongzhi(uchar num,bit mode)
  102. 函數(shù)作用:LED燈控制
  103. 參數(shù)說(shuō)明:num控制哪一個(gè)燈,k=1,點(diǎn)亮,=0關(guān)閉。mode=0全滅后在控制這個(gè)燈,=1單獨(dú)控制這個(gè)燈
  104. ********************************************************/
  105. void led_kongzhi(uchar num,bit k,bit mode)
  106. {
  107.         if(mode==0)
  108.         {
  109.                 led_1=1;           //八位LED燈全滅
  110.                 led_2=1;
  111.                 led_3=1;
  112.                 led_4=1;
  113.                 led_5=1;
  114.                 led_6=1;
  115.                 led_7=1;
  116.                 led_8=1;       
  117.         }       
  118.         if(k==1)
  119.         {
  120.                 switch (num)          //控制對(duì)應(yīng)LED燈亮
  121.                 {
  122.                         case 1:led_1=0;
  123.                                 break;
  124.                         case 2:led_2=0;
  125.                                 break;
  126.                         case 3:led_3=0;
  127.                                 break;
  128.                         case 4:led_4=0;
  129.                                 break;
  130.                         case 5:led_5=0;
  131.                                 break;
  132.                         case 6:led_6=0;
  133.                                 break;
  134.                         case 7:led_7=0;
  135.                                 break;
  136.                         case 8:led_8=0;
  137.                                 break;
  138.                 }
  139.         }
  140.         else
  141.         {
  142.                 switch (num)          //控制對(duì)應(yīng)LED燈滅
  143.                 {
  144.                         case 1:led_1=1;
  145.                                 break;
  146.                         case 2:led_2=1;
  147.                                 break;
  148.                         case 3:led_3=1;
  149.                                 break;
  150.                         case 4:led_4=1;
  151.                                 break;
  152.                         case 5:led_5=1;
  153.                                 break;
  154.                         case 6:led_6=1;
  155.                                 break;
  156.                         case 7:led_7=1;
  157.                                 break;
  158.                         case 8:led_8=1;
  159.                                 break;
  160.                 }       
  161.         }
  162. }
  163. /********************************************************
  164. 函數(shù)名稱:void scan(void)
  165. 函數(shù)作用:按鍵檢測(cè)函數(shù)
  166. 參數(shù)說(shuō)明:
  167. ********************************************************/
  168. void scan(void)
  169. {       
  170.         uchar qiangda_num=0;
  171.         //主持人鍵
  172.         if(key_zhu==0)                   //按鍵按下
  173.         {
  174.                 delayms(7);                   //顯示消抖
  175.                 if(key_zhu==0&&zhu_f!=2&&qiang_f==0&&wan_f==0)//判斷是否有人犯規(guī)或者搶答是否開(kāi)始或者搶答是否完成
  176.                 {
  177.                         zhu_f++;           //比賽階段標(biāo)記+1
  178.                         if(zhu_f==2)   //比賽正式開(kāi)始
  179.                         {
  180.                                 TR0=1;           //比賽開(kāi)始,開(kāi)啟定時(shí)
  181.                                 wan_f=0;   //清除比賽完成標(biāo)志
  182.                                 bajing();  //提示比賽開(kāi)始
  183.                         }                       
  184.                 }
  185.                 else
  186.                         if(key_zhu==0&&qiang_f==1)   //判斷是否有人犯規(guī)
  187.                         {
  188.                                 buzz=1;                                         //清除報(bào)警
  189.                                 qiang_f=0;                                 //清除搶答標(biāo)志
  190.                                 number=0;                                 //清除選手編號(hào)
  191.                                 time=EEPROM_read(0x2000);//重新讀取存儲(chǔ)的搶答總時(shí)長(zhǎng)
  192.                                 led_kongzhi(0,0,0);
  193.                         }
  194.                         else                                                 
  195.                                 if(key_zhu==0&&wan_f==1) //判斷是否有人完成
  196.                                 {
  197.                                         buzz=1;                                 //清除報(bào)警
  198.                                         wan_f=0;                         //清除完成標(biāo)志
  199.                                         number=0;                         //清除選手編號(hào)
  200.                                         time=EEPROM_read(0x2000);//重新讀取存儲(chǔ)的搶答總時(shí)長(zhǎng)
  201.                                         led_kongzhi(0,0,0);
  202.                                 }
  203.                                 else
  204.                                         if(key_zhu==0&&zhu_f==2) //暫停比賽
  205.                                         {
  206.                                                 TR0=0;                                 //關(guān)閉定時(shí)
  207.                                                 zhu_f=1;                         //重新回到設(shè)置比賽時(shí)間階段
  208.                                                 bajing();                         //提示暫停比賽
  209.                                         }
  210.                 while(!key_zhu);//檢測(cè)按鍵松開(kāi)
  211.         }

  212.         //加值鍵,支持連按
  213.         if(key_jia==0&&zhu_f==1&&qiang_f==0)         //判斷是否在設(shè)置倒計(jì)時(shí)時(shí)間
  214.         {
  215.                 delayms(7);                                                         //延時(shí)消抖
  216.                 if(key_jia==0)                                                 //再次判斷按鍵按下
  217.                 {
  218.                         if(time<99)                             //比賽時(shí)間最大值99S
  219.                                 time++;                                                  //比賽時(shí)間+1S
  220.                         EEPROM_delete(0x2000);                         //擦除EEPROM煽區(qū)
  221.                         EEPROM_write(0x2000,time);                 //寫(xiě)入【比賽時(shí)間】數(shù)據(jù)保存
  222.                         display(time/10,time%10,10,0);         //顯示設(shè)置比賽時(shí)間
  223.                 }
  224.         }

  225.         //減值鍵,支持連按
  226.         if(key_jian==0&&zhu_f==1&&qiang_f==0)         //判斷是否在設(shè)置倒計(jì)時(shí)時(shí)間
  227.         {
  228.                 delayms(7);                                                         //延時(shí)消抖
  229.                 if(key_jian==0)                                                 //再次判斷按鍵按下
  230.                 {
  231.                         if(time!=0)                                                   //比賽時(shí)間最小值0S
  232.                                 time--;                                 //比賽時(shí)間-1S
  233.                         EEPROM_delete(0x2000);                         //擦除EEPROM煽區(qū)
  234.                         EEPROM_write(0x2000,time);                 //寫(xiě)入【比賽時(shí)間】數(shù)據(jù)保存
  235.                         display(time/10,time%10,10,0);         //顯示設(shè)置比賽時(shí)間
  236.                 }
  237.         }
  238.         //選手按鍵
  239.         qiangda_num=qianda();
  240.         if(qiangda_num!=0)                              //判斷是否有選手按下按鍵
  241.         {
  242.                 if(zhu_f!=2&&qiang_f==0&&wan_f==0)//如果還沒(méi)有開(kāi)始搶答時(shí)按下
  243.                 {
  244.                         zhu_f=1;
  245.                         buzz=0;                                                  //蜂鳴器報(bào)警
  246.                         qiang_f=1;                                          //搶答犯規(guī)標(biāo)記
  247.                         number=qiangda_num;
  248.                         led_kongzhi(number,1,0);
  249.                 }
  250.                 else
  251.                         if(zhu_f==2&&wan_f==0)                         //在開(kāi)始搶答時(shí)按下
  252.                         {
  253.                                 wan_f=1;                                         //標(biāo)記搶答完成
  254.                                 zhu_f=0;                                         //主持人標(biāo)記復(fù)位
  255.                                 TR0=0;                                                 //關(guān)閉倒計(jì)時(shí)定時(shí)器
  256.                                 number=qiangda_num;
  257.                                 led_kongzhi(number,1,0);
  258.                                 bajing();                                         //提示有人搶答完成
  259.                         }
  260.         }  
  261. }

  262. /*********************************************************
  263. 函數(shù)名稱:void main()
  264. 函數(shù)作用:主函數(shù)函數(shù)
  265. 參數(shù)說(shuō)明:
  266. *********************************************************/
  267. void main()
  268. {
  269.         uchar i=0;
  270.         T0_init();                                                 //定時(shí)器初始化
  271.         if(key_jian==0)          
  272.         {
  273.                 delayms(100);
  274.                 if(key_jian==0)
  275.                 {
  276.                         EEPROM_delete(0x2000);         //擦除EEPROM煽區(qū)
  277.                         EEPROM_write(0x2000,30); //寫(xiě)入【比賽時(shí)間】數(shù)據(jù)保存
  278.                 }
  279.         }
  280.         time=EEPROM_read(0x2000);                 //讀取存儲(chǔ)的【比賽時(shí)間】數(shù)據(jù)

  281.         for(i=0;i<9;i++)
  282.         {
  283.                 led_kongzhi(i,1,1);
  284.                 delayms(10);       
  285.         }

  286.         for(i=9;i>0;i--)
  287.         {
  288.                 led_kongzhi(i-1,0,1);
  289.                 delayms(10);       
  290.         }
  291.         led_kongzhi(0,0,0);
  292.         while(1)                                                 //死循環(huán)
  293.         {
  294.                 scan();                                                 //按鍵檢測(cè)處理
  295.                 if(zhu_f==0&&wan_f==0)                 //判斷是否還沒(méi)進(jìn)入比賽階段
  296.                         display(10,10,10,10);         //未進(jìn)入,顯示"----"
  297.                 else
  298.                         if(zhu_f==0&&wan_f==1)         //進(jìn)入比賽階段,并且處于設(shè)置比賽時(shí)間
  299.                                 display(time/10,time%10,10,number);//顯示設(shè)置比賽時(shí)間
  300.                         else
  301.                                 if(zhu_f!=0)                 
  302.                                 {               
  303.                                         if(qiang_f==1)   //設(shè)有人犯規(guī)
  304.                                                 display(11,11,10,number);                   //顯示FF-犯規(guī)編號(hào)
  305.                                         else
  306.                                                 display(time/10,time%10,10,number);//顯示比賽剩余時(shí)間和搶答者編號(hào),未搶答顯示0
  307.                                 }               
  308.         }
  309. }
復(fù)制代碼

所有資料51hei提供下載(仿真PCB與代碼):
八人搶答器51hei設(shè)計(jì).zip (1.14 MB, 下載次數(shù): 190)

評(píng)分

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

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:1071489 發(fā)表于 2023-4-13 16:23 | 只看該作者
可以說(shuō)一下主要的功能嗎
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表