找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2744|回复: 2
打印 上一主题 下一主题
收起左侧

基于51单片机的按键抢答器源码(已测试通过)

[复制链接]
跳转到指定楼层
楼主
ID:323895 发表于 2018-5-7 01:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是按键抢答器的设计代码,我用的是STC89C52,仅供参考!

单片机源程序如下:


  1. #include "reg52.h"    //此文件中定义了单片机的一些特殊功能寄存器

  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进行消抖
  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. }
复制代码

所有资料51hei提供下载:
按键抢答器.rar (916 Bytes, 下载次数: 21)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:323975 发表于 2018-5-7 10:16 | 只看该作者
很给力
回复

使用道具 举报

板凳
ID:323895 发表于 2018-5-8 00:30 | 只看该作者
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表