STM32F429IGT6 矩阵键盘密码输入及回退功能实现

本文将介绍如何在 STM32F429IGT6 中利用矩阵键盘设置一个 8 位数的密码,并通过随机输入密码进行验证。如果密码正确,则在 OLED 上显示 'Pass!',并发出 '嘀嘀' 2 声;否则,在 OLED 上显示 'Warning!' 并发出刺耳的警报声。

在该功能的基础上,我们将添加一个可回退输入的密码功能,方便用户在输入密码时进行纠正。

代码实现

为了实现可回退输入密码的功能,可以在输入密码时,每次按下键盘按键时检查是否是回退键。如果是回退键,则删除已输入的最后一个数字。以下是示例代码:

#include "stm32f4xx.h"
#include "OLED.h"
#include "matrix_keyboard.h"
#include "beep.h"

#define PASSWORD_LENGTH 8

uint8_t password[PASSWORD_LENGTH] = {1, 2, 3, 4, 5, 6, 7, 8}; // 设置的密码
uint8_t inputPassword[PASSWORD_LENGTH]; // 输入的密码
uint8_t inputIndex = 0; // 当前输入密码的索引

void checkPassword() {
    if (memcmp(password, inputPassword, PASSWORD_LENGTH) == 0) {
        OLED_ShowString(0, 2, 'Pass!');
        Beep_ShortBeep();
        Beep_ShortBeep();
    } else {
        OLED_ShowString(0, 2, 'Warning!');
        Beep_LongBeep();
    }
}

void checkBackspace() {
    if (MatrixKeyboard_GetKey() == BACKSPACE_KEY) {
        if (inputIndex > 0) {
            inputIndex--;
            OLED_ShowChar(inputIndex * 8, 1, ' '); // 清空对应位置的字符
        }
    }
}

int main(void) {
    MatrixKeyboard_Init();
    OLED_Init();
    Beep_Init();
    
    OLED_Clear();
    OLED_ShowString(0, 0, 'Enter password:');
    
    while (1) {
        uint8_t key = MatrixKeyboard_GetKey();
        if (key != NO_KEY) {
            if (key == BACKSPACE_KEY) {
                checkBackspace();
            } else {
                if (inputIndex < PASSWORD_LENGTH) {
                    inputPassword[inputIndex] = key;
                    OLED_ShowChar(inputIndex * 8, 1, key + '0');
                    inputIndex++;
                    if (inputIndex == PASSWORD_LENGTH) {
                        checkPassword();
                    }
                }
            }
        }
    }
}

在上述代码中,我们新增了一个 checkBackspace() 函数,用于检查回退键的按下情况。当检测到回退键按下时,我们首先检查当前是否有输入的数字,如果有的话,则将 inputIndex 减 1,并清空 OLED 上对应位置的字符。这样就实现了回退输入的功能。

注意,在 main() 函数的主循环中,我们需要将回退键的检查放在键值判断的前面,以确保回退键的响应优先于其他数字键。

代码解析

  1. checkBackspace() 函数

    • 该函数用于检查回退键的按下情况。
    • 当检测到回退键按下时,会检查 inputIndex 是否大于 0,如果大于 0,则说明已有输入的数字。
    • inputIndex 减 1,表示删除最后一个输入的数字。
    • 调用 OLED_ShowChar() 函数清空 OLED 上对应位置的字符。
  2. main() 函数

    • 在主循环中,首先检查回退键的按下情况,如果检测到回退键,则调用 checkBackspace() 函数处理。
    • 如果检测到其他数字键,则进行正常的密码输入逻辑处理。

总结

通过上述代码,我们实现了 STM32F429IGT6 矩阵键盘的密码输入及回退功能。用户可以在输入密码时使用回退键来纠正错误输入,提高了用户体验。

注意:

  • 以上代码示例仅供参考,具体实现需要根据实际应用场景进行调整。
  • 需要根据实际项目情况,添加必要的错误处理和异常处理逻辑。
  • 建议使用安全的方式存储和验证密码,避免密码泄露。
STM32F429IGT6矩阵键盘密码输入及回退功能实现

原文地址: https://www.cveoy.top/t/topic/pl1k 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录