单片机中的矩阵键盘

一、对矩阵键盘有一定的了解

单片机中的矩阵键盘_第1张图片

二、了解矩阵键盘中“扫描”概念

单片机中的矩阵键盘_第2张图片

三、相应代码

 1.main.c

#include 
#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显示键码 第二行第一列显示任意数字,长度为2
        }
    }
}

2.MatrixKey.c

#include 
#include "Delay.h"

/**
  * @brief  矩阵键盘读取按键键码
  * @param  无
  * @retval KeyNumber 按下按键的键码值
            如果按键按下不放,程序会停留在此函数,松手的一瞬间,返回按键键码,没有按键按下时,返回0
  */
unsigned char MatrixKey()
{
    unsigned char KeyNumber=0;
    //下面四行一组是分别扫描每一列的每一行 16个数字就有16组
    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;
}

3.MatrixKey.h

#ifndef __MatrixKey_H
#define __MatrixKey_H

unsigned char MatrixKey();//引用已经编写好的MatrixKey.c中的代码


#endif

你可能感兴趣的:(科技,51单片机)