找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机4X4矩阵键盘代码分享

[复制链接]
跳转到指定楼层
楼主
ID:251719 发表于 2017-11-20 23:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
51单片机 4X4矩阵键盘代码分享

  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. sbit we = P2^7;
  5. sbit du = P2^6;
  6. uchar code leddata[]={

  7.                 0x3F,  //"0"
  8.                 0x06,  //"1"
  9.                 0x5B,  //"2"
  10.                 0x4F,  //"3"
  11.                 0x66,  //"4"
  12.                 0x6D,  //"5"
  13.                 0x7D,  //"6"
  14.                 0x07,  //"7"
  15.                 0x7F,  //"8"
  16.                 0x6F,  //"9"
  17.                 0x77,  //"A"
  18.                 0x7C,  //"B"
  19.                 0x39,  //"C"
  20.                 0x5E,  //"D"
  21.                 0x79,  //"E"
  22.                 0x71,  //"F"
  23.                 0x76,  //"H"
  24.                 0x38,  //"L"
  25.                 0x37,  //"n"
  26.                 0x3E,  //"u"
  27.                 0x73,  //"P"
  28.                 0x5C,  //"o"
  29.                 0x40,  //"-"
  30.                 0x00,  //熄灭
  31.                 0x00  //自定义

  32.                          };
  33. void delay(uint z)
  34. {
  35.         uint x,y;
  36.         for(x = z; x > 0; x--)
  37.                 for(y = 114; y > 0 ; y--);
  38. }


  39. uchar KeyScan()        //带返回值的子函数
  40. {
  41.         uchar cord_l, cord_h;//声明列线和行线的值的储存变量
  42.         P3 = 0xf0;//1111 0000
  43.         if( (P3 & 0xf0) != 0xf0)//判断是否有按键按下
  44.         {
  45.                 delay(5);//软件消抖
  46.                 if( (P3 & 0xf0) != 0xf0)//判断是否有按键按下
  47.                 {
  48.                           cord_l = P3 & 0xf0;// 储存列线值
  49.                           P3 = cord_l | 0x0f;
  50.                           cord_h = P3 & 0x0f;// 储存行线值
  51.                           while( (P3 & 0x0f) != 0x0f );//松手检测
  52.                           return (cord_l + cord_h);//返回键值码
  53.                 }       
  54.         }
  55.                
  56. }

  57. void KeyPro()
  58. {
  59.         switch( KeyScan() )
  60.         {
  61.                  //第一行键值码
  62.                 case 0xee: P0 = leddata[0];                break;
  63.                 case 0xde: P0 = leddata[1];                break;
  64.                 case 0xbe: P0 = leddata[2];                break;
  65.                 case 0x7e: P0 = leddata[3];                break;
  66.                
  67.                 //第二行键值码
  68.                 case 0xed: P0 = leddata[4];                break;
  69.                 case 0xdd: P0 = leddata[5];                break;
  70.                 case 0xbd: P0 = leddata[6];                break;
  71.                 case 0x7d: P0 = leddata[7];                break;

  72.                 //第三行键值码
  73.                 case 0xeb: P0 = leddata[8];                break;
  74.                 case 0xdb: P0 = leddata[9];                break;
  75.                 case 0xbb: P0 = leddata[10];        break;
  76.                 case 0x7b: P0 = leddata[11];        break;

  77.                 //第四行键值码
  78.                 case 0xe7: P0 = leddata[12];        break;
  79.                 case 0xd7: P0 = leddata[13];        break;
  80.                 case 0xb7: P0 = leddata[14];        break;
  81.                 case 0x77: P0 = leddata[15];        break;
  82.         }       
  83. }

  84. ……………………

  85. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
KeyScan.rar (920 Bytes, 下载次数: 47)


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

使用道具 举报

沙发
ID:255846 发表于 2018-12-9 16:19 | 只看该作者
谢谢您的分享,我刚好在学习这方面的应用。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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