Entwurf und Implementierung einer intelligenten elektronischen Passwortsperre basierend auf einem STM32-Mikrocontroller

1. Zusammenfassung

Mit der kontinuierlichen Weiterentwicklung der Technologie wird das Sicherheitsbedürfnis der Menschen immer höher. Herkömmliche mechanische Schlösser können den Bedürfnissen der Menschen nicht mehr gerecht werden, weshalb elektronische Codeschlösser entstanden sind. In diesem Artikel werden hauptsächlich das Design und die Implementierung intelligenter elektronischer Codeschlösser auf Basis des STM32-Mikrocontrollers untersucht. Zunächst wird das Funktionsprinzip des elektronischen Codeschlosses analysiert und anschließend die Hardwareschaltung und das Softwareprogramm entworfen. Abschließend wurden die Machbarkeit und Sicherheit des elektronischen Zahlenschlosses durch reale Tests überprüft.

2. Einführung

Das elektronische Codeschloss ist ein intelligentes Schloss, das mithilfe digitaler Schaltkreise und eingebetteter Systeme implementiert wird. Im Vergleich zu herkömmlichen mechanischen Schlössern bieten elektronische Codeschlösser die Vorteile hoher Sicherheit, guter Zuverlässigkeit und einfacher Bedienung. Dieses Design verwendet den STM32-Mikrocontroller als Steuerkern und realisiert die Entriegelungs- und Schließfunktionen durch Überprüfung des vom Benutzer eingegebenen Passworts.

3. Systemdesign

1. Hardware-Design

Dieses Design umfasst hauptsächlich STM32-Mikrocontroller, Matrixtastatur, LCD-Display, Relais und andere Module. Unter anderem ist der STM32-Mikrocontroller für die Steuerung des Betriebs des gesamten Systems verantwortlich; die Matrixtastatur wird für die Eingabe von Passwörtern durch Benutzer verwendet; das LCD-Display dient zur Anzeige des Systemstatus und von Eingabeaufforderungsinformationen; und das Relais dient zur Steuerung des Schalters des Türschlosses.

2. Softwaredesign

Die Software dieses Designs umfasst hauptsächlich Module wie Tastenscan, Passwortüberprüfung, LCD-Anzeige und Relaissteuerung. Das Schlüsselscanmodul wird verwendet, um das vom Benutzer eingegebene Passwort zu erkennen; das Passwortüberprüfungsmodul wird verwendet, um festzustellen, ob das vom Benutzer eingegebene Passwort korrekt ist; das LCD-Modul wird verwendet, um den Systemstatus und Eingabeaufforderungsinformationen anzuzeigen; das Relaissteuermodul dient zur Steuerung des Schalters des Türschlosses.

4. Systemimplementierung und -tests

1. Hardware-Implementierung

Bauen Sie gemäß der Hardware-Designzeichnung die Hardware-Schaltung auf und verbinden Sie jedes Modul mit dem STM32-Mikrocontroller. Schreiben Sie dann den entsprechenden Treiber, um die Funktionen jedes Moduls zu realisieren.

2. Softwareimplementierung

Schreiben Sie das Hauptprogramm, um Schlüsselscannen, Passwortüberprüfung, LCD-Anzeige, Relaissteuerung und andere Funktionen zu realisieren. Schreiben Sie gleichzeitig das entsprechende Interrupt-Serviceprogramm, um Funktionen wie Tastenentprellung und Timer-Interrupt zu realisieren.

3. Systemtests

Durch tatsächliche Tests wurden die Machbarkeit und Sicherheit des elektronischen Codeschlosses überprüft. Die Testergebnisse zeigen, dass das System das vom Benutzer eingegebene Passwort genau identifizieren kann, die Entsperr- und Schließfunktionen realisiert und über eine hohe Sicherheit verfügt.

Ein Teil des Codes lautet wie folgt



1. 首先,需要配置STM32单片机的相关参数,如时钟、GPIO等。

```c
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"

void SystemInit(void)
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
}
```

2. 定义矩阵键盘的按键引脚和LCD显示屏的接口引脚。

```c
#define MATRIX_KEY_ROW1 GPIO_Pin_0
#define MATRIX_KEY_ROW2 GPIO_Pin_1
#define MATRIX_KEY_ROW3 GPIO_Pin_2
#define MATRIX_KEY_ROW4 GPIO_Pin_3
#define MATRIX_KEY_COL1 GPIO_Pin_4
#define MATRIX_KEY_COL2 GPIO_Pin_5
#define MATRIX_KEY_COL3 GPIO_Pin_6
#define MATRIX_KEY_COL4 GPIO_Pin_7

#define LCD_RS GPIO_Pin_8
#define LCD_RW GPIO_Pin_9
#define LCD_EN GPIO_Pin_10
#define LCD_D4 GPIO_Pin_11
#define LCD_D5 GPIO_Pin_12
#define LCD_D6 GPIO_Pin_13
#define LCD_D7 GPIO_Pin_14
```

3. 初始化矩阵键盘和LCD显示屏的引脚。

```c
void KeypadInit(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

    GPIO_InitStructure.GPIO_Pin = MATRIX_KEY_ROW1 | MATRIX_KEY_ROW2 | MATRIX_KEY_ROW3 | MATRIX_KEY_ROW4;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = MATRIX_KEY_COL1 | MATRIX_KEY_COL2 | MATRIX_KEY_COL3 | MATRIX_KEY_COL4;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
}

void LCDInit(void)
{
    // ... 初始化LCD显示屏的引脚和相关寄存器
}
```

4. 编写矩阵键盘扫描函数,用于检测用户输入的按键。

```c
uchar KeypadScan(void)
{
    uchar key = 0;
    if (GPIO_ReadInputDataBit(GPIOA, MATRIX_KEY_ROW1) == 0)
    {
        delay(5);
        if (GPIO_ReadInputDataBit(GPIOA, MATRIX_KEY_ROW1) == 0)
        {
            key = 1; // 按下1键
            while (GPIO_ReadInputDataBit(GPIOA, MATRIX_KEY_ROW1) == 0);
        }
    }
    return key;
}
```

5. 编写密码验证函数,用于判断用户输入的密码是否正确。

```c
uchar CheckPassword(uchar *password)
{
    // ... 比较用户输入的密码与预设的密码是否相同
    // 如果相同,返回1;否则,返回0
}
```

6. 编写主程序,实现开锁和关锁功能。

```c
int main(void)
{
    SystemInit();
    KeypadInit();
    LCDInit();

    uchar password[4] = {0};
    uchar key;
    uchar i = 0;

    while (1)
    {
        key = KeypadScan();
        if (key != 0)
        {
            password[i++] = key;
            if (i == 4)
            {
                if (CheckPassword(password))
                {
                    // 密码正确,开锁
                    OpenLock();
                    // 清空密码数组
                    for (i = 0; i < 4; i++)
                    {
                        password[i] = 0;
                    }
                }
                else
                {
                    // 密码错误,显示错误提示信息并清空密码数组
                    ShowErrorMessage();
                    for (i = 0; i < 4; i++)
                    {
                        password[i] = 0;
                    }
                }
            }
        }
    }
}
```

以上代码仅为示例,您需要根据实际需求进行修改和完善。

Komplette private Paketberatung

Guess you like

Origin blog.csdn.net/qq_58404700/article/details/135375397