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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機八路搶答器代碼與Proteus仿真

[復制鏈接]
跳轉到指定樓層
樓主
8路搶答器設計難度分:9基本要求:8個選手搶答按鍵,1個主持人按鍵,4只LED數碼管顯示。系統復位狀態LED顯示“00 00”;主持人按下按鍵則搶答開始,系統顯示3秒搶答時間倒計時,計時到無人搶答則系統發出報警后自動復位;8個選手最先按下者搶答成功,顯示選手編號和答題時間10秒,支持人發出開始作答指令同時按下主持人鍵,答題時間開始倒計時并顯示,若選手回答結束之后主持人按下主持人鍵復位系統,若倒計時結束選手未回答問題系統發出報警后自動復位。擴展要求:增加1個“√”鍵和1個“×”鍵,只在10秒回答時間內有效,若選手回答正確,主持人按下“√”鍵彩燈閃爍,若選手回答錯誤,主持人按下“×”鍵發出低沉報警音;系統復位后搶答開始前,選手不得提前搶答,否則發出違例報警,顯示違例選手編號,由主持人復位系統;可修改答題時間。

仿真原理圖如下(proteus8.10版本的仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. //頭文件聲明
  2. #include<reg52.h>
  3. #define uchar unsigned char
  4. #define uint  unsigned int  
  5.                         
  6. //code  uchar seven_seg[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  7. code  uchar seven_seg[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  8. code uchar seven_bit[] = {0xfe,0xfd,0xfb,0xf7};

  9. sbit run_key = P3^2;  //啟動按鍵
  10. sbit buzzer = P3^5;   //報警
  11. sbit add_key = P3^6;  //加
  12. sbit dec_key = P3^7;  //減
  13. uchar player;    //定義選手按鍵的鍵值參數
  14. uint player_num = 0;  //選手號
  15. uchar now_time = 0;  //默認復位時間0S
  16. uchar next_time=10;  //默認答題時間10s
  17. bit run_flag = 0;    //主持人按下開始標志位
  18. bit time_off = 0;    //倒計時時間到,或者開始有人搶答成功標志位
  19. uint Count_A = 0;    //定時器計數參數
  20. uint Count_B = 0;                        //定時器計數參數


  21. void delay(uint ms)   //延時函數
  22. {
  23.         uint i,j;
  24.         for(i=ms;i>0;i--)
  25.                 for(j=110;j>0;j--);
  26. }



  27. void dispaly(uint a,uint b)         //a為選手號碼,b為時間
  28. {
  29.         P2=seven_bit[0];
  30.         P0=seven_seg[a];    //顯示選手號
  31.         delay(5);
  32.         P2=seven_bit[1];
  33.         P0=0x40;              //顯示橫杠
  34.         delay(5);
  35.         P2=seven_bit[2];
  36.         P0=seven_seg[b/10];     //顯示倒計時時間
  37.         delay(5);
  38.         P2=seven_bit[3];
  39.         P0=seven_seg[b%10];
  40.         delay(5);
  41.         P2=0xff;
  42. }

  43. void keyScan()    //按鍵子程序
  44. {
  45.         if(run_key==0)   //如果啟動按鍵按下
  46.         {
  47.                 delay(5);    //消抖
  48.                 if(run_key==0)
  49.                 {
  50.                         if(now_time!=next_time)
  51.                         {
  52.                          if(player_num!=0)
  53.                          {
  54.                             now_time=0;                    //答題結束按鍵按鍵復位
  55.                                 player_num=0;
  56.                                 time_off=0;//復位選手按下標志
  57.                          }
  58.                          else
  59.                          {
  60.                           player_num=0;
  61.                           run_flag=1;             //設置模式調整
  62.                           buzzer=0;//0.5S聲音
  63.                           now_time=3;
  64.                           TR0=1;    //開啟定時器
  65.                           TR1=1;
  66.                            }
  67.                         }
  68.                    else
  69.                    {
  70.                            buzzer=0;//0.5S聲音
  71.                            TR0=1;    //開啟定時器
  72.                         TR1=1;
  73.                   
  74.                    }


  75.                 }

  76.                 while(run_key==0);   //等待按鍵放開

  77.         }

  78.                         if(run_flag==0&&time_off==0)   //只有沒開始搶答的時候可以加減
  79.         {
  80.                 if(add_key==0)
  81.                 {
  82.                         delay(5);
  83.                         if(add_key==0)
  84.                         {
  85.                                  next_time++;    //時間加上去
  86.                           
  87.                         }
  88.                         while(add_key==0)        dispaly(player_num,next_time);  //顯示
  89.                 }
  90.                  if(dec_key==0)
  91.                 {
  92.                         delay(5);
  93.                         if(dec_key==0)
  94.                         {
  95.                                  next_time--;     //時間減下來
  96.                         
  97.                         }
  98.                         while(dec_key==0)         dispaly(player_num,next_time);  //顯示
  99.                 }
  100.         }



  101. }


  102. void EX_Init()
  103. {
  104.         /*********初始化定時器/外部中斷**********/
  105.         TMOD = 0x11;   //10ms
  106.         TH0 = 0x0D8;
  107.   TL0 = 0x0F0;
  108.         TH1 = 0x0D8;
  109.   TL1 = 0x0F0;
  110.         IE = 0x8b;                //IE  = 0x85;
  111.         IT0 = 1;
  112.         IT1 = 1;
  113.         PX0 = 1;
  114.         TR0  = 0;  //關閉定時器
  115.         TR1  = 0;
  116. }



  117. void main(void)
  118. {
  119.         EX_Init();    //初始化
  120.         buzzer=1;
  121.         P2=0xff;
  122.         P1=0xff;
  123.         P0=0xff;
  124.         while(1)       //死循環
  125.         {         
  126.                 keyScan();  //按鍵程序
  127.                 dispaly(player_num,now_time);  //顯示
  128.         }
  129. }



  130. void Time0() interrupt 1
  131. {
  132.         TH0 = 0x0D8;                 //10ms
  133.   TL0 = 0x0F0;

  134.                
  135.                 if(run_flag==1)          //如果開始搶答
  136.                 {
  137.                         player=P1;   //讀取端口
  138.                
  139.                         switch(player)
  140.                         {
  141.                                 case 0xfe:player_num=1;run_flag=0;time_off=1;TR0=0;TR1=0;now_time=next_time;break; //為第一個選手按下時,選手號=1,定時器停止,時間十秒
  142.                                 case 0xfd:player_num=2;run_flag=0;time_off=1;TR0=0;TR1=0;now_time=next_time;break;
  143.                                 case 0xfb:player_num=3;run_flag=0;time_off=1;TR0=0;TR1=0;now_time=next_time;break;
  144.                                 case 0xf7:player_num=4;run_flag=0;time_off=1;TR0=0;TR1=0;now_time=next_time;break;
  145.                                 case 0xef:player_num=5;run_flag=0;time_off=1;TR0=0;TR1=0;now_time=next_time;break;
  146.                                 case 0xdf:player_num=6;run_flag=0;time_off=1;TR0=0;TR1=0;now_time=next_time;break;
  147.                                 case 0xbf:player_num=7;run_flag=0;time_off=1;TR0=0;TR1=0;now_time=next_time;break;
  148.                                 case 0x7f:player_num=8;run_flag=0;time_off=1;TR0=0;TR1=0;now_time=next_time;break;
  149.                                 case 0xff:break;    //全高電平-無人按下,退出
  150.                                 default:player_num=9; break;     //出現其它情況,顯示9
  151.                         }
  152.          }
  153. }
  154. void Time1() interrupt 3
  155. {
  156.         TH1 = 0x0D8;
  157.   TL1 = 0x0F0;   //10ms
  158.         Count_A++;
  159.         Count_B++;
  160.         if(Count_B<50)   //500ms的蜂鳴器提示
  161.                 buzzer=0;
  162.         else buzzer=1;
  163.         
  164.         if(Count_A==100)    //每秒鐘減一,倒計時
  165.         {        Count_A=0;
  166.                 now_time--;   //當前倒計時時間 --
  167.                 if(now_time<=0)   //倒計時結束(到0),那么開始報警,其它復位
  168.                 {        now_time=0;run_flag=0;TR0=0;TR1=0;time_off=1;buzzer=0;        delay(1200);buzzer=1;}
  169.         }               
  170. }
復制代碼

Keil代碼與Proteus8.10仿真下載:
搶答器.rar (94.5 KB, 下載次數: 80)


評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕在线第一页 | 久久亚洲精品国产精品紫薇 | 亚洲成人中文字幕 | 国产精品日韩在线 | 国产丝袜一区二区三区免费视频 | 国产精品99久久久久久久久久久久 | 国产丝袜一区二区三区免费视频 | 黄色片网站国产 | 成人在线精品 | 免费黄色a级毛片 | 国产精品久久久久久妇女6080 | 亚洲国产一区在线 | 午夜精品一区二区三区在线视 | 久久这里只有精品首页 | 欧美精品1区 | 国产a爽一区二区久久久 | 日日干日日操 | 中文字幕在线观看一区 | 国产丝袜一区二区三区免费视频 | 久久国产综合 | 精品视频一区二区三区 | 本道综合精品 | 成人污污视频 | 久久精品亚洲 | 亚洲精品一区在线观看 | 欧美精品日韩精品 | 日韩精品一区中文字幕 | 国产美女网站 | 久久久久亚洲精品 | 日韩喷潮 | 久久一区二区三区四区 | 成人免费福利 | 欧美亚洲高清 | 亚洲第一成年免费网站 | 91久久久久 | 久草在线青青草 | 一级片免费视频 | 国产精品久久国产精品久久 | 在线观看中文视频 | 精品99爱视频在线观看 | 精品久久久久久久久久久 |