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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機八路搶答器設計 Proteus仿真源代碼資料

[復制鏈接]
跳轉到指定樓層
樓主
(1)搶答器同時供 8 名選手比賽,分別用8個按鈕 s1-s8表示(要求用戶使用4*4鍵盤);
(2)設置一個系統清除和搶答控制開關按鍵1和按鍵2。
(3)搶答器具有鎖存與顯示功能。即選手按下按鈕,鎖存相應編號,顯示該選手編號至數碼管,并且該編號保存至主持人按下清除鍵按鍵1清除為止。
(4)搶答器具有定時搶答功能,一次搶答設定的時間為X秒(X可自己設置)。主持人按下搶答控制開關按鍵2,搶答才能開始,啟動定時器,并將倒數計時時間用數碼管顯示。若定時時間到,無人搶答,則該輪搶答結束,系統通過蜂鳴器報警,選手禁止搶答。(5)選手在設定的時間內進行搶答,搶答有效,定時器停止工作,蜂鳴器報警,數碼管顯示選手編號及倒計時剩余時間,并保持到主持人將系統清除為止。

Proteus仿真:





LY-51S開發板實物:
[ i]

單片機源程序如下:
  1. #include<reg52.h>        //頭文件
  2. #define uchar unsigned char                //宏定義
  3. #define uint unsigned int                //宏定義


  4. //單片機引腳定義

  5. #define DataPort P0 //定義數據端口 程序中遇到DataPort 則用P0 替換
  6. #define KEY P3
  7. sbit LATCH1=P2^6;//定義鎖存使能端口 段鎖存
  8. sbit LATCH2=P2^7;//                 位鎖存
  9. sbit BEEP = P1^4;

  10. uchar code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 顯示段碼值0~9
  11. uchar code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分別對應相應的數碼管點亮,即位碼
  12. uchar TempData[8]; //存儲顯示值的全局變量


  13. #define TIMEINIT 10

  14. uchar  time=TIMEINIT;        //倒計時
  15. uchar  player = 0;


  16. //延時函數
  17. void DelayMS(uint ms)
  18. {
  19.          uchar t;
  20.         while(ms--)
  21.         {
  22.                  for(t=0;t<120;t++);
  23.         }
  24. }
  25. //簡單延時
  26. void Delay(unsigned int t)
  27. {
  28.         while(--t);
  29. }
  30. //顯示驅動
  31. void Display(unsigned char FirstBit,unsigned char Num)
  32. {
  33.       unsigned char i;         
  34.           for(i=0;i<Num;i++)
  35.            {
  36.            DataPort=0;   //清空數據,防止有交替重影
  37.        LATCH1=1;     //段鎖存
  38.        LATCH1=0;

  39.             if(i<2)
  40.            {
  41.                DataPort=dofly_WeiMa[i+FirstBit]; //取位碼
  42.                LATCH2=1;     //位鎖存
  43.                LATCH2=0;           
  44.            }else
  45.            {
  46.                DataPort=dofly_WeiMa[i+FirstBit+2]; //取位碼
  47.                LATCH2=1;     //位鎖存
  48.                LATCH2=0;           
  49.            }               

  50.        DataPort=TempData[ i]; //取顯示數據,段碼
  51.        LATCH1=1;     //段鎖存
  52.        LATCH1=0;
  53.       
  54.            Delay(200); // 掃描間隙延時,時間太長會閃爍,太短會造成重影

  55.        }
  56. }
  57. //按鍵掃描
  58. uchar Keys_Scan()
  59. {
  60.         uchar KeyNO=16;
  61.          uchar Tmp;
  62.         KEY = 0x0f;
  63.         DelayMS(10);
  64.         Tmp = KEY ^ 0x0f;
  65.         switch(Tmp)
  66.         {
  67.                  case 1: KeyNO = 0; break;
  68.                 case 2: KeyNO = 1; break;
  69.                 case 4: KeyNO = 2; break;
  70.                 case 8: KeyNO = 3; break;
  71.                 default: KeyNO = 16;
  72.         }
  73.         KEY = 0xf0;
  74.         DelayMS(1);
  75.         Tmp = KEY >> 4 ^ 0x0f;
  76.         switch(Tmp)
  77.         {
  78.                  case 1: KeyNO += 0; break;
  79.                 case 2: KeyNO += 4; break;
  80.                 case 4: KeyNO += 8; break;
  81.                 case 8: KeyNO += 12;
  82.         }
  83.         return KeyNO;
  84. }
  85. //顯示數據
  86. void Display_Data()
  87. {
  88.         uint num = 1234;
  89.         TempData[0]=dofly_DuanMa[player/10];//分解顯示信息,如要顯示68,則68/10=6  68%10=8  
  90.         TempData[1]=dofly_DuanMa[player%10];
  91.         
  92.         TempData[2]=dofly_DuanMa[(time)/10];
  93.         TempData[3]=dofly_DuanMa[(time)%10];
  94.         Display(0,4);
  95. }
  96. //初始化定時器
  97. void Init_Time()
  98. {
  99.         TMOD=0x01;        //設置定時器模式        
  100.         TH0=(65536-46080)/256;// 由于晶振為11.0592,故所記次數應為46080,計時器每隔50000微秒發起一次中斷。
  101.         TL0=(65536-46080)%256;//46080的來歷,為50000*11.0592/12           //設置初值
  102.         ET0=1;                //開T0定時器中斷
  103.         EA=1;                 //開總中斷
  104. }
  105. void BeepON()
  106. {
  107.         int i;
  108.         for(i=0;i<20;i++)
  109.         {
  110.                 BEEP = 0;
  111.                 Delay(5000);
  112.                 BEEP = 1;
  113.                 Delay(5000);        
  114.         }
  115. }
  116. //主函數
  117. main()
  118. {
  119.         uchar flag = 0;
  120.         uchar temp;
  121.          BEEP = 1;
  122.         Init_Time(); //初始化定時器
  123.         while(1)
  124.         {
  125.                 temp=Keys_Scan();        //獲取選手


  126.                 if(temp!=16) //有按鍵按下
  127.                 {
  128.                         if(temp ==8) //搶答鍵,啟動鍵
  129.                         {
  130.                                 TR0 = 1;  //啟動定時器
  131.                                 flag =1;  //1:運行中
  132.                         }
  133.                         if(temp ==9) //清零鍵
  134.                         {
  135.                                 time = TIMEINIT;         //時間恢復為10,初始值
  136.                                 player = 0; //選手號清零
  137.                                 flag =0;    //0:暫停
  138.                                 TR0 = 0;    //關閉定時器
  139.                         }
  140.                         if(temp ==10) //加鍵
  141.                         {
  142.                                 if(flag == 0) //暫停
  143.                                 {
  144.                                         time+=1;;         //時間加
  145.                                         Delay(50000);                                
  146.                                 }
  147.                         }
  148.                         if(temp ==11) //減鍵
  149.                         {
  150.                                 if(flag == 0) //暫停
  151.                                 {
  152.                                         time-=1;;         //時間減
  153.                                         Delay(50000);                                
  154.                                 }
  155.                         }


  156.                         if(temp<8)        //選手按下按鍵
  157.                         {
  158.                                 if((flag==1)&&(time>0))         //程序執行中
  159.                                 {
  160.                                         player=temp+1;        //獲取選手編號
  161.                                         flag = 0;  //暫停
  162.                                         TR0 = 0;   //停止計數
  163.                                         /*
  164.                                         BEEP = 0;
  165.                                         Delay(35000);
  166.                                         BEEP = 1;
  167.                                         */
  168.                                         BeepON();                                       
  169.                                 }
  170.                         }               
  171.                 }
  172.                 if((flag==1)&&(time==0))         //結束報警
  173.                 {
  174. ……………………

  175. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei附件下載:
八路搶答器.7z (2.25 MB, 下載次數: 72)

評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:301191 發表于 2021-11-26 16:15 | 只看該作者
頂一下
回復

使用道具 舉報

板凳
ID:989715 發表于 2021-12-8 18:18 | 只看該作者
您好,請問帖中的程序在哪個文件里了,我下載了附件沒找到呀
回復

使用道具 舉報

地板
ID:262 發表于 2021-12-9 02:07 | 只看該作者
sundheao66 發表于 2021-12-8 18:18
您好,請問帖中的程序在哪個文件里了,我下載了附件沒找到呀

51hei_C語言文件.c
這個文件里面  工程文件也有 慢慢研究吧
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本不卡一区 | a爱视频 | 中文在线a在线 | 卡通动漫第一页 | 久久久久国产精品一区二区 | 狠狠综合久久av一区二区小说 | 日韩精品一区二区三区视频播放 | 欧美国产日韩一区二区三区 | 国产精品视屏 | 久久三区| 精品日韩一区 | 免费亚洲婷婷 | 免费簧片视频 | 中文字幕亚洲欧美 | 国产精品高潮呻吟久久久久 | 久久久久久国产 | 久久久久久国 | 久久久久国产成人精品亚洲午夜 | 国产高清精品一区 | 91久操网| 欧美激情精品久久久久久 | 日韩一区二区在线视频 | 亚洲一区二区三区在线播放 | 911网站大全在线观看 | 2018中文字幕第一页 | 久久久久久成人 | 99国产精品一区二区三区 | 国产午夜精品视频 | 久久r免费视频 | 精品国产乱码一区二区三区 | 欧美日韩精品一区二区 | 精品无码久久久久国产 | 五月天婷婷丁香 | 午夜婷婷激情 | 日本黄色影片在线观看 | 91久久看片 | 国产精品综合 | 久久99精品久久久久久秒播九色 | 日韩黄色小视频 | 亚洲36d大奶网 | 色一级 |