矩阵键盘

简介: 矩阵键盘

1.矩阵键盘原理图


2.扫描的概念


3.MatrixKey.c文件

#include <REGX52.H>
#include "Delay.h"
/**
  * @brief  矩阵键盘读取按键键码
  * @param  无
  * @retval KeyNumber 按下按键的键码值
      如果按键按下不放,程序会停留在此函数,松手的一瞬间,返回按键键码,没有按键按下时,返回0
  */
unsigned char MatrixKey()
{
  unsigned char KeyNumber=0;
  P1=0xFF;
  P1_3=0;
  if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=1;}
  if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=5;}
  if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=9;}
  if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=13;}
  P1=0xFF;
  P1_2=0;
  if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=2;}
  if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=6;}
  if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=10;}
  if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=14;}
  P1=0xFF;
  P1_1=0;
  if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=3;}
  if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=7;}
  if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=11;}
  if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=15;}
  P1=0xFF;
  P1_0=0;
  if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=4;}
  if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=8;}
  if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=12;}
  if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=16;}
  return KeyNumber;
}

4.MatrixKey.h文件

#ifndef __MATRIXKEY_H__
#define __MATRIXKEY_H__
unsigned char MatrixKey();
#endif

5.LCD160.c 以及LCD1602.h代码已经在前一篇文章写录

6.

A.  Delay.c文件

void Delay(unsigned int xms)
{
  unsigned char i, j;
  while(xms--)
  {
    i = 2;
    j = 239;
    do
    {
      while (--j);
    } while (--i);
  }
}

 B. Delay.h文件

#ifndef __DELAY_H__
#define __DELAY_H__
void Delay(unsigned int xms);
#endif

7.main.c文件

#include <REGX52.H>
#include "Delay.h"    //包含Delay头文件
#include "LCD1602.h"  //包含LCD1602头文件
#include "MatrixKey.h"  //包含矩阵键盘头文件
unsigned char KeyNum;
void main()
{
  LCD_Init();             //LCD初始化
  LCD_ShowString(1,1,"MatrixKey:"); //LCD显示字符串
  while(1)
  {
    KeyNum=MatrixKey();       //获取矩阵键盘键码
    if(KeyNum)            //如果有按键按下
    {
      LCD_ShowNum(2,1,KeyNum,2);  //LCD显示键码
    }
  }
}
相关文章
【单片机】按键声光报警实验(蜂鸣器)
【单片机】按键声光报警实验(蜂鸣器)
574 0
|
3月前
【51单片机】开发板上矩阵键盘键码在数码管上的显示,按下键盘在数码管上显示对应段码
【51单片机】开发板上矩阵键盘键码在数码管上的显示,按下键盘在数码管上显示对应段码
|
6月前
5-1 51单片机数码管
5-1 51单片机数码管
23 1
|
6月前
|
数据安全/隐私保护
C51单片机实现矩阵键盘密码锁
C51单片机实现矩阵键盘密码锁
|
编译器
【51单片机】点亮LED灯(四种形式)
英文名:Light Emitting Diode。 简称:LED。 应用:LED显示屏、交通信号灯、广告灯、液晶屏背光源等。 特点:节能是LED灯最突出的特点、环保、
773 0
【51单片机】点亮LED灯(四种形式)
|
安全
51单片机和LCD1602实现简单的密码锁
51单片机和LCD1602实现简单的密码锁
115 0
【STC15单片机】简单的矩阵键盘代码
【STC15单片机】简单的矩阵键盘代码
232 0
【51单片机】数码管显示
【51单片机】数码管显示
113 0