标题: 51单片机4X4矩阵键盘代码分享 [打印本页]

作者: 包火火    时间: 2017-11-20 23:23
标题: 51单片机4X4矩阵键盘代码分享
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)



作者: kentron2011    时间: 2018-12-9 16:19
谢谢您的分享,我刚好在学习这方面的应用。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1