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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機為核心的8位競賽搶答器仿真和源程序 倒計時剩余時間還未完成

[復制鏈接]
ID:362588 發表于 2018-7-1 16:49 | 顯示全部樓層 |閱讀模式
1) 搶答器同時供8名選手或8個代表隊比賽,分別用8個按鈕s1-s8表示;
2) 設置一個系統清除和搶答控制開關Key1Key2
3) 搶答器具有鎖存與顯示功能。即選手按下按鈕,鎖存相應編號,顯示該選手編號至數碼管,并且該編號保存至主持人按下清除鍵Key1清除為止。
4) 搶答器具有定時搶答功能,一次搶答設定的時間為30秒。主持人按下搶答控制開關Key2,搶答才能開始,啟動定時器,并將倒數計時時間用數碼管顯示。若定時時間到,無人搶答,則該輪搶答結束,系統通過蜂鳴器報警,選手禁止搶答。
5) 選手在設定的時間內進行搶答,搶答有效,定時器停止工作,蜂鳴器報警,數碼管顯示選手編號及倒計時剩余時間,并保持到主持人將系統清除為止。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png 0.png

單片機源程序如下:
  1. #include <reg52.h>

  2. //共陰極數碼管編碼表 0 - f顯示
  3. unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,
  4. 0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,
  5. 0x39,0x5e,0x79,0x71};

  6. //變量定義
  7. sbit start_stop = P3^6;
  8. sbit reset = P3^7;
  9. sbit LE =P3^0;
  10. sbit key1 = P1^0;
  11. sbit key2 = P1^1;
  12. sbit key3 = P1^2;
  13. sbit key4 = P1^3;
  14. sbit key5 = P1^4;
  15. sbit key6 = P1^5;
  16. sbit key7 = P1^6;
  17. sbit key8 = P1^7;
  18. sbit state = P3^4;
  19. sbit start=P3^1;

  20. bit start_stop_flag = 0;
  21. bit key1_flag = 0;
  22. bit key2_flag = 0;
  23. bit key3_flag = 0;
  24. bit key4_flag = 0;
  25. bit key5_flag = 0;
  26. bit key6_flag = 0;
  27. bit key7_flag = 0;
  28. bit key8_flag = 0;
  29. bit reset_flag = 0;
  30. bit action = 0;
  31. bit start_flag=0;

  32. unsigned char second = 15;
  33. unsigned char timer0_count = 0;
  34. unsigned char number = 0;
  35. unsigned char number_display = 0;

  36. //延時函數
  37. void delay(unsigned int z)
  38. {
  39.         unsigned int x,y;
  40.         for(x=z;x>0;x--)
  41.                 for(y=110;y>0;y--);
  42. }

  43. void Play(unsigned char t)
  44. {
  45.     unsigned char i;
  46.     for(i=0;i<100;i++)
  47.    {
  48.     state=~state;
  49.         delay(t);
  50.         }
  51.         state=0;
  52. }

  53. //數碼管顯示驅動函數
  54. void display(unsigned char number,unsigned char second)
  55. {
  56.         unsigned char second_first,second_second;
  57.         second_first = second / 10;
  58.         second_second = second % 10;
  59.         
  60.         P2 = 0xfe;
  61.         P0 = table[number];
  62.         delay(1);
  63.         
  64.         P2 = 0xfb;
  65.         P0 = table[second_first];
  66.         delay(1);
  67.         
  68.         P2 = 0xf7;
  69.         P0 = table[second_second];
  70.         delay(1);        
  71. }

  72. //開始鍵掃描函數
  73. void start_stop_keyscan()
  74. {
  75.         if(start_stop == 0)
  76.         {
  77.                 delay(8);
  78.                 if((start_stop == 0)&&(!start_stop_flag))
  79.                 {
  80.                         start_stop_flag = 1;
  81.                         action  = 1;
  82.                         TR0 = 1;
  83.                         //state =0;
  84.                         Play(1);
  85.                 }
  86.         }
  87.         else
  88.         {
  89.                 start_stop_flag = 0;        
  90.         }        
  91. }

  92. //八位搶答鍵掃描函數
  93. unsigned char key_scan8()
  94. {
  95.         if(key1 == 0)
  96.         {
  97.                 delay(8);
  98.                 if((key1 == 0)&&(!key1_flag))
  99.                 {
  100.                         key1_flag = 1;
  101.                         number  = 1;
  102.                         number_display = number;
  103.                         Play(2);
  104.                         LE=0;
  105.                 }
  106.         }
  107.         else
  108.         {
  109.                 key1_flag = 0;
  110.                 number  = 0;        
  111.         }
  112.         
  113.         if(key2 == 0)
  114.         {
  115.                 delay(8);
  116.                 if((key2 == 0)&&(!key2_flag))
  117.                 {
  118.                         key2_flag = 1;
  119.                         number  = 2;
  120.                         number_display = number;
  121.                         Play(2);
  122.                         LE=0;
  123.                 }
  124.         }
  125.         else
  126.         {
  127.                 key2_flag = 0;
  128.                 number  = 0;        
  129.         }
  130.         
  131.         if(key3 == 0)
  132.         {
  133.                 delay(8);
  134.                 if((key3 == 0)&&(!key3_flag))
  135.                 {
  136.                         key3_flag = 1;
  137.                         number  = 3;
  138.                         number_display = number;
  139.                         Play(2);
  140.                         LE=0;
  141.                 }
  142.         }
  143.         else
  144.         {
  145.                 key3_flag = 0;
  146.                 number  = 0;        
  147.         }
  148.         
  149.         if(key4 == 0)
  150.         {
  151.                 delay(8);
  152.                 if((key4 == 0)&&(!key4_flag))
  153.                 {
  154.                         key4_flag = 1;
  155.                         number  = 4;
  156.                         number_display = number;
  157.                         Play(2);
  158.                         LE=0;
  159.                 }
  160.         }
  161.         else
  162.         {
  163.                 key4_flag = 0;
  164.                 number  = 0;        
  165.         }
  166.         
  167.         if(key5 == 0)
  168.         {
  169.                 delay(8);
  170.                 if((key5 == 0)&&(!key5_flag))
  171.                 {
  172.                         key5_flag = 1;
  173.                         number  = 5;
  174.                         number_display = number;
  175.                         Play(2);
  176.                         LE=0;
  177.                 }
  178.         }
  179.         else
  180.         {
  181.                 key5_flag = 0;
  182.                 number  = 0;        
  183.         }
  184.         
  185.         if(key6 == 0)
  186.         {
  187.                 delay(8);
  188.                 if((key6 == 0)&&(!key6_flag))
  189.                 {
  190.                         key6_flag = 1;
  191.                         number  = 6;
  192.                         number_display = number;
  193.                         Play(2);
  194.                         LE=0;
  195.                 }
  196.         }
  197.         else
  198.         {
  199.                 key6_flag = 0;
  200.                 number  = 0;        
  201.         }
  202.         
  203.         if(key7 == 0)
  204.         {
  205.                 delay(8);
  206.                 if((key7 == 0)&&(!key7_flag))
  207.                 {
  208.                         key7_flag = 1;
  209.                         number  = 7;
  210.                         number_display = number;
  211.                         Play(2);
  212.                         LE=0;
  213.                 }
  214.         }
  215.         else
  216.         {
  217.                 key7_flag = 0;
  218.                 number  = 0;        
  219.         }
  220.         
  221.         if(key8 == 0)
  222.         {
  223.                 delay(8);
  224.                 if((key8 == 0)&&(!key8_flag))
  225.                 {
  226.                         key8_flag = 1;
  227.                         number  = 8;
  228.                         number_display = number;
  229.                         Play(2);
  230.                         LE=0;
  231.                 }
  232.         }
  233.         else
  234.         {
  235.                 key8_flag = 0;
  236.                 number  = 0;        
  237.         }
  238.                                                         
  239.         if(number_display != 0)        
  240.         {
  241.                 return 1;
  242.         }
  243.         else
  244.         {
  245.                 return 0;
  246.         }        
  247.         
  248. }

  249. //復位鍵掃描函數
  250. void reset_keyscan()
  251. {
  252.         if(reset == 0)
  253.         {
  254.                 delay(8);
  255.                 if((reset == 0)&&(!reset_flag))
  256.                 {        second=15;
  257.                         reset_flag = 1;
  258.                         number_display = 0;
  259.                         LE = 1;
  260.                         //state = 1;
  261.                 }
  262.         }
  263.         else
  264.         {
  265.                 reset_flag = 0;
  266.         }        
  267. }
  268.          

  269. //主函數

  270. void main()
  271. {
  272.         TMOD=0x01;
  273.     TH0=0x3C;
  274.         TL0=0xB0;
  275.         EA=1;
  276.         ET0=1;
  277.         TR0=0;
  278.         
  279.         while(1)
  280.         {        while((start == 0)&&(!start_flag))
  281.          {        start_stop_keyscan();
  282.                 reset_keyscan();
  283.                 while(action)
  284.                 {
  285.                         while(!key_scan8())
  286.                         {
  287.                                 display(number_display,second);
  288.                                 if(second == 0)
  289.                                 {
  290. ……………………

  291. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
0.png
所有資料51hei提供下載:
搶答.rar (67.64 KB, 下載次數: 67)



回復

使用道具 舉報

ID:365098 發表于 2018-7-5 09:24 | 顯示全部樓層
兄弟倒計時剩余時間顯示不出來啊?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美精品二区 | 欧美性区 | 午夜激情国产 | ww亚洲ww亚在线观看 | 毛片日韩 | 欧美日韩电影免费观看 | 91麻豆蜜桃一区二区三区 | 欧美精品成人一区二区三区四区 | 黄色大片在线视频 | 精品视频一区二区 | 久久毛片| 黄色在线免费看 | 亚洲精品久久久一区二区三区 | www.99热| 亚洲码欧美码一区二区三区 | 久草视频在线播放 | 午夜精品福利视频 | 免费在线播放黄色 | 精精精精xxxx免费视频 | 日本一级淫片免费啪啪3 | 天堂资源视频 | 午夜寂寞影院在线观看 | 精品一区国产 | 天堂国产| av看片| 亚洲精品一区二区三区免 | 亚洲国产一区二区三区, | 国产视频久久 | 久久国产精品视频 | 成年人在线观看视频 | 国产一区二区三区久久 | 玖玖视频国产 | 国产一级黄色网 | 精品视频一区二区 | 三级视频久久 | 国产精品爱久久久久久久 | 亚洲欧美中文字幕 | 天天爽综合网 | 亚洲欧美在线一区 | 久久精品国产亚洲一区二区三区 | 国产日韩欧美精品一区二区三区 |