找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于51單片機(jī)的按鍵搶答器源碼(已測試通過)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:323895 發(fā)表于 2018-5-7 01:16 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
這是按鍵搶答器的設(shè)計代碼,我用的是STC89C52,僅供參考!

單片機(jī)源程序如下:


  1. #include "reg52.h"    //此文件中定義了單片機(jī)的一些特殊功能寄存器

  2. //#define led P0
  3. sbit en=P3^0;
  4. sbit a=P2^2;          
  5. sbit b=P2^3;
  6. sbit c=P2^4;          //這三個38譯碼器的管腳控制位選;c為高位:cba;
  7. sbit deep=P1^5;

  8. char code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  9.                                         0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//顯示0~F的值
  10.             
  11. int count=0,m=15,value,pp=0;
  12. void Init()
  13. {
  14.    EA=1;
  15.    ET0=1;
  16.    TH0=0xD8;
  17.    TL0=0xF0 ;
  18.    TMOD=0x01;
  19.    TR0=1;
  20. }

  21. void interrupt1() interrupt 1
  22. {
  23.    TH0=0xD8;
  24.    TL0=0xF0;
  25.    count++;
  26.    if(count==100)
  27.      {
  28.         count=0;
  29.         m--;
  30.         if(pp==0){P0=smgduan[m];}
  31.          }
  32. }



  33. void delay(int x)
  34. {
  35. while(x)
  36. x--;
  37. }

  38. void check()
  39. {         int z; int y=1;
  40. while(y)
  41. {
  42.         P1=0x0f;
  43.         if(P1!=0x0f)//讀取按鍵是否按下
  44.         {
  45.                 delay(1000);//延時10ms進(jìn)行消抖
  46.                 if(P1!=0x0f)//再次檢測鍵盤是否按下
  47.                 {       
  48.                         //測試列
  49.                         P1=0X0F;
  50.                         switch(P1)
  51.                         {
  52.                                 case(0X07):        value=0;break;
  53.                                 case(0X0b):        value=1;break;
  54.                                 case(0X0d): value=2;break;
  55.                                 case(0X0e):        value=3;break;
  56.                         }
  57.                         //測試行
  58.                         P1=0XF0;
  59.                         switch(P1)
  60.                         {
  61.                                 case(0X70):        value=value;break;
  62.                                 case(0Xb0):        value=value+4;break;
  63.                                 case(0Xd0): value=value+8;break;
  64.                                 case(0Xe0):        value=value+12;break;
  65.                         }
  66.                         while((z<50)&&(P1!=0xf0))         //檢測按鍵松手檢測
  67.                         {
  68.                                 delay(1000);
  69.                                 z++;
  70.                         }
  71.                         y=0;
  72.                 }
  73.     }       
  74.   }
  75. }
  76. void main()
  77. {
  78.    a=b=c=0;
  79.    P0=smgduan[15];
  80.    Init();
  81.    while(1)
  82.    {
  83.      check();
  84.          pp=1;
  85.          P0=smgduan[value];

  86.          while(1){deep=~deep;delay(100);}

  87.     }

  88. }
復(fù)制代碼

所有資料51hei提供下載:
按鍵搶答器.rar (916 Bytes, 下載次數(shù): 21)


評分

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

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:323975 發(fā)表于 2018-5-7 10:16 | 只看該作者
很給力
回復(fù)

使用道具 舉報

板凳
ID:323895 發(fā)表于 2018-5-8 00:30 | 只看該作者
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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