矩阵键盘

简介: 矩阵键盘

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显示键码
    }
  }
}
相关文章
|
7月前
4-3 51单片机蜂鸣器
4-3 51单片机蜂鸣器
53 2
|
7月前
|
编译器 芯片
proteus并行接口芯片8255A的应用—键盘与数码管
proteus并行接口芯片8255A的应用—键盘与数码管
213 1
|
7月前
5-1 51单片机数码管
5-1 51单片机数码管
26 1
单片机按键的使用
单片机按键的使用
175 0
|
7月前
|
数据安全/隐私保护
C51单片机实现矩阵键盘密码锁
C51单片机实现矩阵键盘密码锁
|
C语言
51单片机按键
学习按键处理
123 0
51单片机按键
|
安全
51单片机和LCD1602实现简单的密码锁
51单片机和LCD1602实现简单的密码锁
129 0

热门文章

最新文章