找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机4*4矩阵键盘识别源码

[复制链接]
跳转到指定楼层
楼主
4*4矩阵键盘识别


单片机源程序如下:
  1. #include "reg51.H"
  2. unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0x7c,0xc1,0x86,0x8d};
  3. unsigned char temp;
  4. unsigned char key;
  5. unsigned char i,j;
  6. sbit P3_4=P3^4;
  7. sbit P3_5=P3^5;
  8. sbit P3_6=P3^6;
  9. sbit P3_7=P3^7;
  10. sbit P1_0=P1^0;

  11. void main (void)
  12. {
  13.     while(1)
  14. {
  15. P3=0xff;
  16. P3_4=0;
  17. temp=P3;
  18. temp=temp & 0x0f;
  19. if (temp!=0x0f);
  20. {
  21.    for(i=50;i>0;i--)
  22.    for(j=200;j>0;j--);
  23.    temp=P3;
  24.    temp=temp&0x0f;
  25.    if (temp!=0x0f)
  26.    {
  27.      temp=P3;
  28.          temp=temp & 0x0f;
  29.          switch(temp)
  30.          {
  31.            case 0x0e:
  32.            key=7;
  33.            break;
  34.            case 0x0d:
  35.            key=8;
  36.            break;
  37.            case 0x0b:
  38.            key=9;
  39.            break;
  40.            case 0x07:
  41.            key=10;
  42.            break;
  43.          }
  44.          temp=P3;
  45.          P1_0=~P1_0;
  46.          P0=table[key];
  47.          temp=temp&0x0f;
  48.          while(temp!=0x0f)
  49.          {
  50.             temp=P3;
  51.                 temp=temp&0X0f;
  52.          }
  53.    }
  54. }

  55. P3=0xff;
  56. P3_5=0;
  57. temp=P3;
  58. temp=temp&0x0f;
  59. if(temp!=0x0f)
  60. {
  61.    for(i=50;i>0;i--)
  62.    for(j=200;j>0;j--);
  63.    temp=P3;
  64.    temp=temp&0x0f;
  65.    if(temp!=0x0f)
  66.    {
  67.       temp=P3;
  68.           temp=temp&0x0f;
  69.           switch(temp)
  70.           {
  71.              case 0x0e:
  72.                  key=4;
  73.                  break;
  74.                  case 0x0d:
  75.                  key=5;
  76.                  break;
  77.                  case 0x0b:
  78.                  key=6;
  79.                  break;
  80.                  case 0x07:
  81.                  key=11;
  82.                  break;
  83.           }
  84.           temp=P3;
  85.           P1_0=~P1_0;
  86.           P0=table[key];
  87.           temp=temp&0x0f;
  88.           while(temp!=0x0f)
  89.           {
  90.             temp=P3;
  91.             temp=temp&0x0f;
  92.           }
  93.    }
  94. }

  95. P3=0xff;
  96. P3_6=0;
  97. temp=P3;
  98. temp=temp&0x0f;
  99. if(temp!=0x0f)
  100. {
  101.    for(i=50;i>0;i--)
  102.    for(j=200;j>0;j--);
  103.    temp=P3;
  104.    temp=temp&0x0f;
  105.    if(temp!=0x0f)
  106.    {
  107.       temp=P3;
  108.           temp=temp&0x0f;
  109.           switch(temp)
  110.           {
  111.              case 0x0e:
  112.                  key=1;
  113.                  break;
  114.                  case 0x0d:
  115.                  key=2;
  116.                  break;
  117.                  case 0x0b:
  118.                  key=3;
  119.                  break;
  120.                  case 0x07:
  121.                  key=12;
  122.                  break;
  123.           }
  124.           temp=P3;
  125.           P1_0=~P1_0;
  126.           P0=table[key];
  127.           temp=temp&0x0f;
  128.           while(temp!=0x0f)
  129.           {
  130.              temp=P3;
  131.                  temp=temp&0x0f;
  132.           }
  133.    }
  134. }

  135. P3=0xff;
  136. P3_7=0;
  137. temp=P3;
  138. temp=temp&0x0f;
  139. if(temp!=0x0f)
  140. {
  141.     for(i=50;i>0;i--)
  142.         for(j=200;j>0;j--);
  143.         temp=P3;
  144.         temp=temp&0x0f;
  145.         if(temp!=0x0f)
  146.         {
  147.            temp=P3;
  148.            temp=temp&0x0f;
  149.            switch(temp)
  150.                   {
  151.                       case 0x0e:
  152.                       key=0;
  153.                       break;
  154.                       case 0x0d:
  155.                       key=13;
  156.                       break;
  157.                       case 0x0b:
  158.                   key=14;
  159.                       break;
  160.                       case 0x07:
  161.                       key=15;
  162.                       break;
  163.                   }
  164.                   temp=P3;
  165.                   P1_0=~P1_0;
  166.                   P0=table[key];
  167.                   temp=temp&0x0f;
  168.                   while(temp!=0x0f)
  169.                   {
  170.                      temp=P3;
  171.                          temp=temp&0x0f;
  172.                   }
  173.            }
  174.         }
  175.   }
  176. }
复制代码

所有资料51hei提供下载:
程序.doc (22.5 KB, 下载次数: 13)



评分

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

查看全部评分

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

使用道具 举报

沙发
ID:66287 发表于 2018-3-7 10:50 | 只看该作者
这种键盘子程序写的很垃圾,延时处理在实际的应用中及其误事。建议用定时中断消抖,读键用反转法较好!
回复

使用道具 举报

板凳
ID:249096 发表于 2018-3-8 09:53 | 只看该作者
bhjyqjs 发表于 2018-3-7 10:50
这种键盘子程序写的很垃圾,延时处理在实际的应用中及其误事。建议用定时中断消抖,读键用反转法较好!

   新手,菜鸟一个,见笑了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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