首页 > 其他分享 >2 矩阵键盘

2 矩阵键盘

时间:2025-01-17 17:22:38浏览次数:1  
标签:reKeyNumber Delay P1 20 矩阵 键盘 while keyNumber

就是把一堆按钮并联集中,以扫描的形式读取数据,以达到节省I/O口的目的
![[Pasted image 20250117160829.png]]

1. 读取按键编号至LCD

通过不断对I/O口读取电平值来进行扫描以实现识别按键的功能

#include <REGX52.H>
#include "DELAY.h"
unsigned int keyNumber;

unsigned int martixKey()
{
    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;
}
#include "LCD1602.h"
#include "martix.h"

void main()
{
    LCD_Init();
    LCD_ShowString(1,1,"MartixKey");
    while (1)
    {
        unsigned char reKeyNumber = martixKey();
        if (reKeyNumber != 0)
        {
            /* code */
            LCD_ShowNum(2,1,reKeyNumber,3);
        }
        

    }
    
}

要注意变量数据类型的选择

2.矩阵键盘密码锁

在原先的基础上加入数值判断

#include "LCD1602.h"
#include "martix.h"

unsigned int reKeyNumber;
unsigned int count;
unsigned int password;

void main()
{
    LCD_Init();
    LCD_ShowString(1,1,"Password?");
    while (1)
    {
        reKeyNumber = martixKey();
        if (reKeyNumber != 0)
        {
            if(reKeyNumber <= 10)
            {
                if (count <= 4)
                {
                    password *= 10;
                    password += reKeyNumber % 10;
                    count++;
                }
                LCD_ShowNum(2,1,password,4);
            }
            if (reKeyNumber == 11)
            {
                if (password == 9876)
                {
                    LCD_ShowString(1,12,"OK!");
                    password = 0;
                    count = 0;
                    LCD_ShowNum(2,1,password,4);
                }
                else
                {
                    LCD_ShowString(1,12,"ERR");
                }
            }

            if (reKeyNumber == 12)
            {
                password = 0;
                count = 0;
                LCD_ShowNum(2,1,password,4);
            }
                
        }
        

    }
    
}

标签:reKeyNumber,Delay,P1,20,矩阵,键盘,while,keyNumber
From: https://www.cnblogs.com/surime/p/18677408

相关文章

  • 【LeetCode】力扣刷题热题100道(31-35题)附源码 搜索二维矩阵 岛屿数量 腐烂的橙子 课程
    一、搜索二维矩阵编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。可以使用从右上角开始搜索的方法来有效地找到目标值。选择起始位置:从矩阵的右上角开始。......
  • 矩阵碰一碰发视频操作后台搭建,支持OEM
    在当今数字化时代,视频社交平台如雨后春笋般涌现,矩阵碰一碰发视频功能因其便捷性和创新性,成为众多平台追逐的热门功能。然而,搭建支持这一功能的操作后台并非易事,其间充斥着诸多复杂且棘手的难题。一、技术架构选型的困境兼容性挑战:矩阵碰一碰发视频涉及多种设备、操作系统以......
  • 矩阵碰一碰发视频源码技术开发全解析,支持OEM
    在当今数字化内容传播迅速发展的时代,矩阵碰一碰发视频功能以其便捷、高效的特点,为用户分享视频提供了全新的体验。本文将深入探讨矩阵碰一碰发视频源码的技术开发过程,从原理到实现,为开发者提供全面的技术指引。一、技术原理矩阵碰一碰发视频功能主要基于近场通信技术,如NFC(N......
  • 亚矩阵云手机:服务于未来新型电商矩阵的助力者
    亚矩阵云手机是基于端云一体虚拟化技术通过云网、安全、AI等数字化能力,弹性适配用户个性化需求,释放手机本身硬件资源,随需加载海量云上应用的手机形态简单来说,云手机=云服务器+AndroidOS,用户可以远程实时控制云手机,实现安卓APP的云端运行;也可以基于云手机的基础算力,高......
  • 【LeetCode 刷题】数组-模拟-螺旋矩阵
    此博客为《代码随想录》数组章节的学习笔记,主要内容为数组模拟的相关题目解析。文章目录59.螺旋矩阵II54.螺旋矩阵59.螺旋矩阵II题目链接classSolution:defgenerateMatrix(self,n:int)->List[List[int]]:l,r,t,b=0,n-1,0,n-......
  • 30天开发操作系统 第 14 天 -- 高分辨率及键盘输入
    前言从着手“自制操作系统”到现在,不知不觉间已经过去2周了。有的读者朋友读到这里,可能已经花了更长的时间;也有的朋友,经过努力也可能只用了一周左右就读到了这里。开发个操作系统需要些必备知识,像编程语言的知识,相关算法和技巧等。到现在为止,这些知识的介绍就......
  • 实用键盘按键测试工具
    分享给大家一个windows实用小工具键盘按键测试工具工具功能很直接,就是键盘按键测试,能直观看到键盘的按键是否可用,有没有失灵,一般用不到,但用到的时候绝对可以帮到你界面如下你只管按,其他交给它,功能正常的按键会改变颜色,右下角reset可以重置界面,theme是设置界面风格,黑的......
  • (ICLR-2024)VERA:基于向量的随机矩阵自适应
    VERA:基于向量的随机矩阵自适应paper是阿姆斯特丹大学发表在ICLR2024的工作papertitle:VERA:VECTOR-BASEDRANDOMMATRIXADAPTATIONABSTRACT低秩自适应(LoRA)是一种流行的方法,可在微调大型语言模型时减少可训练参数的数量,但在扩展到更大的模型或部署大量按用户......
  • 矩阵碰一碰发视频之视频剪辑功能开发全解析,支持OEM
    在短视频风靡的当下,矩阵碰一碰发视频结合视频剪辑功能,为内容创作与传播带来了全新的活力。本文将深入探讨这一创新功能的源码搭建过程,助力开发者打造出功能强大且用户体验良好的视频处理系统。一、技术选型前端技术框架:选用React作为前端开发框架,其高效的虚拟DOM机制......
  • 使用Python实现基于矩阵分解的长期事件(MFLEs)时间序列分析
    在现代数据分析领域,时间序列数据的处理和预测一直是一个具有挑战性的问题。随着物联网设备、金融交易系统和工业传感器的普及,我们面临着越来越多的高维时间序列数据。这些数据不仅维度高,而且往往包含复杂的时间依赖关系和潜在模式。传统的时间序列分析方法如移动平均等,在处理此类......