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

QQ登錄

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

帖子
查看: 13893|回復(fù): 18
打印 上一主題 下一主題
收起左側(cè)

基于51單片機(jī)的八路搶答器仿真設(shè)計(jì)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
首先,裁判在右方按下開(kāi)始按鈕,蜂鳴器響起,搶答開(kāi)始,初始時(shí)間為20s,若1-8位選手按下按鈕,即搶答成功,由顯示屏顯示該選手號(hào)碼,如果超過(guò)時(shí)間(20s)沒(méi)人認(rèn)搶答,則時(shí)間重置為20s,并此題作廢,答題結(jié)束后,按下重置按鈕,這時(shí)時(shí)間重置,下次搶答開(kāi)始。
創(chuàng)新功能(*)在沒(méi)有按下開(kāi)始鍵時(shí),按下修改時(shí)間按鈕,則時(shí)間會(huì)減少1s,由于默認(rèn)時(shí)間為20s,所以這個(gè)功能可以實(shí)現(xiàn)20s內(nèi)時(shí)間的調(diào)整

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機(jī)源程序如下:
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #define  max 20
  5. uchar tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

  6. sbit d1=P2^4;
  7. sbit d2=P2^5;
  8. sbit x1=P2^6;
  9. sbit x2=P2^7;

  10. sbit k1=P1^0;
  11. sbit k2=P1^1;
  12. sbit k3=P1^2;
  13. sbit k4=P1^3;
  14. sbit k5=P1^4;
  15. sbit k6=P1^5;
  16. sbit k7=P1^6;
  17. sbit k8=P1^7;

  18. sbit zk1=P2^0;
  19. sbit zk2=P2^1;

  20. sbit buz=P2^2;

  21. uchar d_num,cnt;
  22. uchar x_flag;
  23. void jianpan();
  24. void init(void)
  25. {
  26.    TMOD=0X01;
  27.    TL0=0XB0;
  28.    TH0=0X3C;
  29. //   TR0=1;   
  30.    ET0=1;     
  31.    EA=1;
  32.    d_num=max;
  33. }

  34. void delay(uint xms)
  35. {
  36.    uint x,y;
  37.    for(x=xms;x>0;x--)
  38.     for(y=110;y>0;y--);

  39. }

  40. void display()
  41. {
  42.         d1=0;         //位選端;
  43.         P0=tab[d_num/10];//顯示倒計(jì)時(shí)
  44.         delay(5);
  45.         d1=1;

  46.         d2=0;
  47.         P0=tab[d_num%10];
  48.         delay(5);
  49.         d2=1;

  50.         x1=0;        //位選端
  51.         P0=tab[x_flag/10];//顯示選手號(hào)
  52.         delay(5);
  53.         x1=1;

  54.         x2=0;
  55.         P0=tab[x_flag%10];
  56.         delay(5);
  57.         x2=1;
  58. }

  59. void main()
  60. {        init();
  61.         while(1)
  62.         {
  63.           jianpan();
  64.           display();

  65.         }       
  66. }

  67. void timer0(void) interrupt 1
  68. {
  69.    TL0=0XB0; //重裝初值
  70.    TH0=0X3C;
  71.    cnt++;
  72.    if(cnt==20)//1 秒時(shí)間到
  73.     {
  74.        cnt=0;//計(jì)數(shù)清零
  75.            d_num--;
  76.            if(d_num==0)
  77.           {
  78.              d_num=max;

  79.              TR0=0;        //關(guān)閉所有操作
  80.                  }
  81.            buz=0;       
  82.            delay(20);
  83.            buz=1;
  84.           
  85.      }   
  86. }
  87. void jianpan()

  88. {             if(zk1==0&&x_flag==0)
  89.                 {
  90.                          delay(5);
  91.                          x_flag=0;

  92.                          TR0=1;
  93.                          
  94.                 }
  95.                 if(zk2==0&&TR0==0)
  96.                 {
  97.                          delay(5);
  98.                          if(zk2==0&&TR0==0)
  99.                          {
  100.                                  if(x_flag==0)
  101.                                  {
  102.                                    d_num--;                                //設(shè)置倒計(jì)時(shí)
  103.                                    buz=0;
  104.                                    delay(20);
  105.                                     buz=1;  }

  106.                                  if(d_num==5)
  107.                                  d_num=max;
  108.                                                   
  109.                                  if(x_flag!=0) //選手顯示清零
  110.                                  {
  111.                                  x_flag=0;
  112.                                  d_num=max;       
  113.                                  TR0=0;       
  114.                                    buz=0;
  115.                                    delay(20);
  116.                                     buz=1;
  117.                                       }

  118.                                  while(!zk2)
  119.                                  display();
  120.                          }
  121.                 }

  122.                
  123.             if(k1==0&&TR0==1)
  124.                 {
  125.                          delay(5);
  126.                          if(k1==0&&TR0==1)
  127.                          {
  128.                            x_flag=1;

  129.                             TR0=0;
  130.                                   }                 
  131.                 }


  132.                 if(k2==0&&TR0==1)
  133.                 {
  134.                          delay(5);
  135.                          if(k2==0&&TR0==1)
  136.                          {x_flag=2;TR0=0;}                 
  137.                          
  138.                 }

  139.                 if(k3==0&&TR0==1)
  140.                 {
  141.                          delay(5);
  142.                          if(k3==0&&TR0==1)
  143.                          {x_flag=3;TR0=0;}                 
  144.                          while(!k3)
  145.                          display();
  146.                 }

  147.                 if(k4==0&&TR0==1)
  148.                 {
  149.                           delay(5);
  150.                          if(k4==0&&TR0==1)
  151.                          {x_flag=4;TR0=0;}                 
  152.                          
  153.                 }
  154.                 if(k5==0&&TR0==1)
  155.                 {
  156.                          delay(5);
  157.                          if(k5==0&&TR0==1)
  158.                          {x_flag=5;TR0=0;}
  159.                          
  160.                 }

  161. ……………………

  162. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
八路搶答器51單片機(jī)設(shè)計(jì).zip (91.6 KB, 下載次數(shù): 441)


評(píng)分

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

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:492967 發(fā)表于 2019-3-18 11:30 | 只看該作者
圖片解釋的十分清楚  對(duì)應(yīng)程序能看懂每一步需要做什么  贊一個(gè)
回復(fù)

使用道具 舉報(bào)

板凳
ID:501384 發(fā)表于 2019-4-1 16:57 | 只看該作者
有沒(méi)有無(wú)線的
回復(fù)

使用道具 舉報(bào)

地板
ID:650455 發(fā)表于 2019-11-27 00:42 | 只看該作者
這個(gè)程序不錯(cuò),弄得有始有終
回復(fù)

使用道具 舉報(bào)

5#
ID:651762 發(fā)表于 2019-11-28 17:38 | 只看該作者
程序用keil打不開(kāi)是怎么回事
回復(fù)

使用道具 舉報(bào)

6#
ID:779652 發(fā)表于 2020-6-15 10:21 | 只看該作者
圖片解釋的十分清楚  對(duì)應(yīng)程序能看懂每一步需要做什么  贊一個(gè)
回復(fù)

使用道具 舉報(bào)

7#
ID:769869 發(fā)表于 2020-6-15 13:52 | 只看該作者
這個(gè)程序是51單片機(jī)嗎,atm89c51系列嗎
回復(fù)

使用道具 舉報(bào)

8#
ID:27825 發(fā)表于 2020-6-16 19:42 | 只看該作者
很喜歡,收藏下來(lái),學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

9#
ID:844262 發(fā)表于 2020-11-16 21:56 | 只看該作者
顯示那,兩個(gè)數(shù)碼管和單片機(jī)的連接有點(diǎn)看不懂,能說(shuō)說(shuō)嗎
回復(fù)

使用道具 舉報(bào)

10#
ID:844659 發(fā)表于 2020-11-17 00:05 | 只看該作者
可以,很強(qiáng)了
回復(fù)

使用道具 舉報(bào)

11#
ID:846801 發(fā)表于 2020-11-21 11:33 | 只看該作者

圖片解釋的十分清楚  對(duì)應(yīng)程序能看懂每一步需要做什么  贊一個(gè)
回復(fù)

使用道具 舉報(bào)

12#
ID:846801 發(fā)表于 2020-11-21 11:38 | 只看該作者
樓主可不可以將線路圖中的器件關(guān)鍵詞發(fā)一下,有些器件找不到(菜鳥(niǎo)不懂)
回復(fù)

使用道具 舉報(bào)

13#
ID:847191 發(fā)表于 2020-11-22 10:46 | 只看該作者
圖片解釋的十分清楚,對(duì)我的學(xué)習(xí)很有幫助,謝謝樓主
回復(fù)

使用道具 舉報(bào)

14#
ID:825648 發(fā)表于 2020-11-22 15:00 | 只看該作者
寫(xiě)得很好,謝謝樓主分享。收藏了
回復(fù)

使用道具 舉報(bào)

15#
ID:849431 發(fā)表于 2020-11-26 11:48 來(lái)自觸屏版 | 只看該作者
2019-3-18 11:30 圖片解釋的十分清楚  對(duì)應(yīng)程序能看懂每一步需要做什么  贊一個(gè)
回復(fù)

使用道具 舉報(bào)

16#
ID:773492 發(fā)表于 2020-12-1 17:40 | 只看該作者
為什么蜂鳴器不響嘞
回復(fù)

使用道具 舉報(bào)

17#
ID:871033 發(fā)表于 2021-12-22 15:20 | 只看該作者
程序挺好,要是有注釋就更好了
回復(fù)

使用道具 舉報(bào)

18#
ID:871033 發(fā)表于 2021-12-22 15:21 | 只看該作者
要是有注釋就更好了
回復(fù)

使用道具 舉報(bào)

19#
ID:245820 發(fā)表于 2022-4-15 15:26 | 只看該作者
非常詳細(xì)地資料,謝謝
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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