微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 矩阵键盘

矩阵键盘

时间:10-02 整理:3721RD 点击:
识别矩阵键盘的输入,并在数码管显示特定的数码(0-F)
矩阵键盘

#include <reg52.h>

#define uchar unsigned char

#define uint unsigned int

sbit wei = P2^7;

sbit duan = P2^6;

unsigned char leddata[]={

                0x3F,  //"0"

                0x06,  //"1"

                0x5B,  //"2"

                0x4F,  //"3"

                0x66,  //"4"

                0x6D,  //"5"

                0x7D,  //"6"

                0x07,  //"7"

                0x7F,  //"8"

                0x6F,  //"9"

                0x77,  //"A"

                0x7C,  //"B"

                0x39,  //"C"

                0x5E,  //"D"

                0x79,  //"E"

                0x71,  //"F"

                0x76,  //"H"

                0x38,  //"L"

                0x37,  //"n"

                0x3E,  //"u"

                0x73,  //"P"

                0x5C,  //"o"

                0x40,  //"-"

                0x00,  //熄灭

                0x00  //自定义

                         };

void delay(uint z)

{

         uintx,y;

         for(x= z;x > 0;x--)

                  for(y= 120; y > 0; y--);

}

uchar KeyScan()

{

         ucharcord_l,cord_h;//声明列和行向量

         P3= 0xf0;

         if((P3& 0xf0) != 0xf0)//判断是否有按键按下

         {

                  delay(5);//软件延时,消抖

                  if((P3& 0xf0) != 0xf0)

                  {

                          cord_l= P3 & 0xf0; //存储列线值

                                              //低4位,行线值,高4位,列线值

                          P3= cord_l | 0x0f;  

                          cord_h= P3 & 0x0f;//储存行线值

                          while(P3& 0x0f != 0x0f);

                          return(cord_l+cord_h);         

                  }      

         }

         

}

void KeyPro()

{

         switch(KeyScan() )

         {

                  case0xee: P0 = leddata[0];break;

                  case0xde: P0 = leddata[1];break;

                  case0xbe: P0 = leddata[2];break;

                  case0x7e: P0 = leddata[3];break;

                  case0xed: P0 = leddata[4];break;

                  case0xdd: P0 = leddata[5];break;

                  case0xbd: P0 = leddata[6];break;

                  case0x7d: P0 = leddata[7];break;

                  case0xeb: P0 = leddata[8];break;

                  case0xdb: P0 = leddata[9];break;

                  case0xbb: P0 = leddata[10];break;

                  case0x7b: P0 = leddata[11];break;

                  case0xe7: P0 = leddata[12];break;

                  case0xd7: P0 = leddata[13];break;

                  case0xb7: P0 = leddata[14];break;

                  case0x77: P0 = leddata[15];break;

                  

         }      

}

void main()

{

         wei= 1;  //位选操作

         P0= 0;

         wei= 0;

         duan= 1;  //段选操作

         while(1)

         {

                  KeyPro();         

         }

}


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top