矩阵键盘

简介: 矩阵键盘

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显示键码
    }
  }
}
相关文章
OFDM——PAPR减小(一)
OFDM——PAPR减小(一)
345 0
智保未来:国泰产险的 AI 网关革新之旅
通过阿里云云原生 API 网关在国泰落地,目前国泰所有访问大模型的流量均通过阿里云云原生 API 网关进行代理,在日均消耗近亿 Token 的同时,做到了对每个请求都进行敏感信息过滤,不论是输入大模型的内容还是由大模型产生的内容都进行了全面审计,大大降低使用大模型的数据安全风险。通过网关的 AI 插件,国泰产险做到了每个 Token 都知道是谁在用,用在哪个场景,给后续分析和成本管控提供了坚实的数据支撑。
270 74
文本,wangEditor5展示HTML无样式,wangEditor5如何看源码,Ctrl + U看CSS文件,代码高亮,Prism.js可以实现,解决方法,参考网页源代码的写法
文本,wangEditor5展示HTML无样式,wangEditor5如何看源码,Ctrl + U看CSS文件,代码高亮,Prism.js可以实现,解决方法,参考网页源代码的写法
Java异常之【sun.security.validator.ValidatorException: PKIX path building failed: sun.security...】
Java异常之【sun.security.validator.ValidatorException: PKIX path building failed: sun.security...】
403 0
Java异常之【sun.security.validator.ValidatorException: PKIX path building failed: sun.security...】
cdn服务器连接异常怎么办
当遇到CDN服务器连接异常时,可采取以下步骤排查:检查CDN配置,包括域名解析和防火墙设置;清空CDN缓存;测试网络连接;确认源服务器状态;更换CDN服务器;等待恢复;联系服务商;检查本地电脑安全;检查程序代码;保持更新和维护。具体解决步骤需根据实际情况调整。
1317 0
spring实现Validator校验和全局异常处理
spring实现Validator校验和全局异常处理
172 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问