STM32F429IGT6矩阵键盘密码输入及回退功能实现
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() 函数的主循环中,我们需要将回退键的检查放在键值判断的前面,以确保回退键的响应优先于其他数字键。
代码解析
-
checkBackspace()函数- 该函数用于检查回退键的按下情况。
- 当检测到回退键按下时,会检查
inputIndex是否大于 0,如果大于 0,则说明已有输入的数字。 - 将
inputIndex减 1,表示删除最后一个输入的数字。 - 调用
OLED_ShowChar()函数清空 OLED 上对应位置的字符。
-
main()函数- 在主循环中,首先检查回退键的按下情况,如果检测到回退键,则调用
checkBackspace()函数处理。 - 如果检测到其他数字键,则进行正常的密码输入逻辑处理。
- 在主循环中,首先检查回退键的按下情况,如果检测到回退键,则调用
总结
通过上述代码,我们实现了 STM32F429IGT6 矩阵键盘的密码输入及回退功能。用户可以在输入密码时使用回退键来纠正错误输入,提高了用户体验。
注意:
- 以上代码示例仅供参考,具体实现需要根据实际应用场景进行调整。
- 需要根据实际项目情况,添加必要的错误处理和异常处理逻辑。
- 建议使用安全的方式存储和验证密码,避免密码泄露。
原文地址: https://www.cveoy.top/t/topic/pl1k 著作权归作者所有。请勿转载和采集!