当前位置: 首页 > article >正文

线反转法实现矩形键盘按键识别

由于行、列线为多键共用,各按键彼此将相互发 生影响,必须将行、列线信号配合起来并作适当的处 理,才能确定闭合键的位置。

线反转法

第1步:列线输出为全低电平,则行线中电平由高变低 的所在行为按键所在行。

第2步:行线输出为全低电平,则列线中电平由高变低 所在列为按键所在列。

综合上述两步,可确定闭合按键所在行和列。

程序代码

#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int

/*共阴极数码管0至F的段码*/
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
                      0x7d,0x07,0x7f,0x6f,0x77,0x7c,
                      0x39,0x5e,0x79,0x71};

/*0至F的键值*/
uchar code key_value[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,
                          0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,
                          0xe7,0xd7,0xb7,0x77};

void delay();

void delay()
{
    uint i;
    for(i=0;i<1000;i++);
}

uchar key_dis() 
{
  uchar key_buf;
  uchar key_state;
  P2=0xf0;
  key_buf=P2;
  if(key_buf!=0xf0)
    {
        delay();
        if(P2==key_buf)
        {
            key_state=key_buf&0xf0;
            P2=0x0f;
            key_buf=P2;

            key_buf&=0x0f;
            key_state=key_state|key_buf;
            return key_state;
        }
        else 
            return 0;
     }
    else 
        return 0;
}

    
void main(void)
{
  uchar j,key_num;  
    P0=0x00;                      // 开机黑屏
    while(1)
        {
          key_num=key_dis();
            if(key_num!=0)
            {
              for(j=0;j<16;j++)
              {
                if(key_num==key_value[j])      //获得按键的键号
                   break;
              }
            P0=table[j];    
            }
        }
    }
        

原理图

仿真结果


http://www.kler.cn/a/571994.html

相关文章:

  • 搭建一个简单的node服务,模拟后端接口
  • 阿里通义万相2.1模型在亚马逊云科技ECS容器中的私有化部署
  • Dockershrink 开源的 AI 助手(程序包),可减小应用程序的 Docker 镜像的大小
  • STM32F103C8T6 基于 TB6612 驱动 12V 编码电机的教程
  • 【高并发内存池】项目介绍 + 定长内存池 + 整体框架设计
  • Vue 3 核心 API 和函数
  • 科技风杂志科技风杂志社科技风编辑部2025年第5期目录
  • 如何在 Windows 和 Linux 下查看 MD5——原理、作用及完整性验证指南
  • JavaWeb学习日记(十三)Springboot原理+Bean管理
  • Hive大表和小表查询优化方案探索
  • HTTP 状态代码 501 502 问题
  • Windows 11 smb 共享文件, 新电脑需要用户名和密码
  • 操作系统启动——前置知识预备
  • 《OpenCV》——dlib(人脸应用实例)
  • 机器学习相关知识概述
  • Leetcode 215 数组中的第K个最大元素
  • Libgdx游戏开发系列教程(4)——显示中文文字
  • Kubernetes教程(三)Docker容器命令
  • 股市现期驱动因子
  • go:windows环境下安装Go语言