矩阵键盘

简介: 矩阵键盘

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显示键码
    }
  }
}
相关文章
【单片机】按键声光报警实验(蜂鸣器)
【单片机】按键声光报警实验(蜂鸣器)
505 0
|
2月前
【51单片机】开发板上矩阵键盘键码在数码管上的显示,按下键盘在数码管上显示对应段码
【51单片机】开发板上矩阵键盘键码在数码管上的显示,按下键盘在数码管上显示对应段码
|
5月前
5-1 51单片机数码管
5-1 51单片机数码管
21 1
|
5月前
|
数据安全/隐私保护
C51单片机实现矩阵键盘密码锁
C51单片机实现矩阵键盘密码锁
单片机按键的使用
单片机按键的使用
157 0
|
C语言
51单片机按键
学习按键处理
106 0
51单片机按键
|
安全
51单片机和LCD1602实现简单的密码锁
51单片机和LCD1602实现简单的密码锁
106 0
使用STM32CubeMX实现按下按键,电平反转
使用STM32CubeMX实现按下按键,电平反转
145 0
使用STM32CubeMX实现按下按键,电平反转
|
开发者
野火F1开发板STM32案例-外部中断(按键)使用
野火F1开发板STM32案例-外部中断(按键)使用
106 0