Cerradura digital electrónica usando el microcontrolador 8051 y el teclado

Cerradura digital electrónica usando el microcontrolador 8051 y el teclado

En este artículo, haremos una cerradura digital electrónica usando el teclado 4×3 y el microcontrolador 8051, básicamente, una cerradura electrónica es una cerradura protegida con contraseña y es una aplicación de un teclado.
El sistema de cerradura de puerta es un ejemplo de la cerradura electrónica y está protegida por una contraseña, que solo se desbloquea con una contraseña específica y funciona con electricidad con la ayuda del sistema de control de evaluación (MCU).

Descripción del proyecto

Aquí he creado una cerradura electrónica utilizando los microcontroladores 8051 y un teclado de 4×3.
En este proyecto, se usa el teclado como dispositivo de entrada y una pantalla LCD alfanumérica de 16×2 como dispositivo de salida. Cuando el usuario presiona las teclas del teclado, el microcontrolador lee el valor de la tecla presionada y lo muestra en la pantalla LCD.
Aquí ya guardé la contraseña en el programa cuando el usuario ingresa el valor desde el teclado, luego simplemente almacene estos valores ingresados ​​en un búfer y compárelos con la contraseña almacenada.
Si coinciden, mostramos un mensaje de "BIENVENIDO" en la pantalla LCD y movemos el motor para desbloquear la cerradura electrónica. En su lugar, si el valor ingresado por el usuario no coincide con la contraseña almacenada, se muestra el mensaje "CONTRASEÑA INCORRECTA" en la pantalla LCD.

por ejemplo
Supongamos que en el programa he almacenado el valor de contraseña "12345". Entonces, cuando el usuario desea desbloquear la cerradura electrónica, debe ingresar el valor "1234" desde el teclado. Sin embargo, si el usuario no ingresa el valor "12345", entonces no podrá desbloquear la cerradura electrónica.

Componentes necesarios para la cerradura electrónica

S.N COMPONENTE
1. Microcontrolador (AT89s52)
2. LCD 16×2
3. Teclado 4×3
4. Oscilador (12 MHz)
5. Condensador cerámico (22 PF – 2)
6. Célula (fuente de alimentación)
7. ULN 2003A
8. LED
9. Motor paso a paso
10. Cable de conexión
11. Resistencia (10,1,2 k-ohmios)

Circuito de conexión de cerradura electrónica digital

En la imagen a continuación, describí la conexión simple del teclado numérico, la pantalla LCD y un motor paso a paso con el microcontrolador 8051.

Si quieres aprender más sobre el lenguaje C, aquí 10 días gratis (hasta 200 minutos) Curso en vídeo C para ti.

Tu prueba gratuita te está esperando

Programa de muestra para cerradura electrónica utilizando el microcontrolador 8051

/*Hardware
    --------
    At89c51 @ 12MHz external crystal.



     LCD

         VSS -  GND
         VDD - +5V
         VEE - connect with ground

         RS -  P1.0
         RW -  P1.1
         E  -  P1.2

         LCD_D0 - P3.0
         LCD_D1 - P3.1
         LCD_D2 - P3.2
         LCD_D3 - P3.3

         LCD_D4 - P3.4
         LCD_D5 - P3.5
         LCD_D6 - P3.6
         LCD_D7 - P3.7

        LED+ - +5V
        LED- - GND

      KEYPAD

         COL_1 -   P2.0
         COL_2 -   P2.1
         COL_3 -   P2.2

         ROW_1 -   P2.4
         ROW_2 -   P2.5
         ROW_3 -   P2.6
         ROW_4 -   P2.7

 STEPPER MOTOR

 COIL1 -P1.4
 COIL2 -P1.5
 COIL3 -P1.6
 COIL4 -P1.7



   */
//Program Start from here
#include<reg51.h>
#include<string.h>


// macro
#define COL1 0
#define COL2 1
#define COL3 2

#define MAX_ROW 3

//LCD
#define LCD P3 /*Attached Lcd on Port*/

sbit rs = P1^0; /*Configure RS Pin*/
sbit rw = P1^1; /*Configure R/W pin*/
sbit e  = P1^2; /*Configure Enable pin*/

//KEYPAD
#define KEYPAD P2

sbit COL_1 =  P2^0;
sbit COL_2 =  P2^1;
sbit COL_3 =  P2^2;

sbit ROW_1 =  P2^4;
sbit ROW_2 =  P2^5;
sbit ROW_3 =  P2^6;
sbit ROW_4 =  P2^7;

//Stepper Motor
#define STEPPER_MOTOR P1


/*Function to write command on Lcd*/
void LcdCommand(const char cCommand);

/*Function to write command on Lcd*/
void LcdData(const char cData);
/*Function to display message on Lcd*/
void DisplayMessage(const char *pszMessage);

/*Function To Initialize Lcd*/
void LcdInit(void);

/*Function to Provide delay*/
void Delay(unsigned int);

/*Reset The Row*/
void DoResetRow(short siRowNumber);

/*Check Columnn*/
char Check_Column(void);

/*Read Col Status*/
char ReadColStatus(void);

/*move stepper motor forword*/
void SteeperMotarForword(void);

/*move stepper motor backword*/
void SteeperMotarBackword(void);

//Main
int  main()
{

    char ucData=0;
    unsigned char cLen =0;
    int iLenPassword =0;
    char acBuffer[8]= {0};
    const char *pcPassword= "12345";// Password

    KEYPAD = 0x0F; //Make Row O/p & Col I/p
    LCD    = 0x00;  //Make Lcd O/p
    rs = rw = e =0; //O/p
    STEPPER_MOTOR =0x00; //make o/p


    iLenPassword = strlen(pcPassword); //Calculate length of password

    LcdInit(); //initialize the lcd

    LcdCommand(0x80); /*Address of DDRAM*/

    DisplayMessage("Enter Password:");

    LcdCommand(0xc0); /*Address of DDRAM*/

    while(1)
    {

        if(cLen < iLenPassword)
        {

            ucData = ReadColStatus(); /*Read column Status*/

            LcdData(ucData); /*Display Enter Character On Lcd*/

            acBuffer[cLen] = ucData; /*Store Enter value in Buf*/

            cLen++;

        }
        else
        {

            if(!strncmp(pcPassword,acBuffer,iLenPassword))
            {

                LcdCommand(0x01); /*Clear the lcd*/
                LcdCommand(0x80); /*Address of DDRAM*/
                DisplayMessage("Door is Opening..");
                SteeperMotarForword();
                LcdCommand(0x01); /*Clear the lcd*/
                LcdCommand(0x85); /*Address of DDRAM*/
                DisplayMessage("Welcome");
                Delay(700);
                LcdCommand(0x01); /*Clear the lcd*/
                LcdCommand(0x80); /*Address of DDRAM*/
                DisplayMessage("Door is Closing..");
                SteeperMotarBackword();
                cLen=0;
                LcdCommand(0x01); /*Clear the lcd*/
                LcdCommand(0x80); /*Address of DDRAM*/
                DisplayMessage("Enter Password:");
                LcdCommand(0xc0); /*Address of DDRAM*/


            }
            else
            {

                LcdCommand(0x01); /*Clear the lcd*/
                LcdCommand(0x80); /*Address of DDRAM*/

                DisplayMessage("Access Denied..");
                Delay(100);

                LcdCommand(0x01); /*Clear the lcd*/
                LcdCommand(0x80); /*Address of DDRAM*/

                DisplayMessage("Wrong Password");
                Delay(300);

                LcdCommand(0x01); /*Clear the lcd*/
                LcdCommand(0x80); /*Address of DDRAM*/
                DisplayMessage("Enter Password:");
                LcdCommand(0xc0); /*Address of DDRAM*/
                cLen=0;

            }


        }
    }
    return 0;
}
/*Function to write command on Lcd*/
void LcdCommand(const char cCommand)
{

    rs = 0;
    rw = 0;
    e  = 1;
    LCD = cCommand;
    Delay(1);
    e=0;

}

/*Function to write command on Lcd*/
void LcdData(const char cData)
{

    rs = 1;
    rw = 0;
    e  = 1;
    LCD = cData;
    Delay(1);
    e=0;

}

/*Function to Display message on Lcd*/
void DisplayMessage(const char *pszMessage)
{

    while(*pszMessage!='\0')   //Till Null character
    {

        LcdData(*pszMessage);
        pszMessage++;
    }
}


/*Function to Provide Delay*/
void Delay(unsigned int i)
{
    int j,k;
    for(j=0; j<i; j++)
        for(k=0; k<1275; k++);
}


/*Initialise the LCD_DATA*/
void LcdInit(void)
{

    LcdCommand(0x01);
    Delay(2);
    LcdCommand(0x38);
    Delay(2);
    LcdCommand(0x06);
    Delay(2);
    LcdCommand(0x0c);
    Delay(2);
}
//Read the status of column
char ReadColStatus(void)
{

    char ucData='p';

    while('p' == ucData)
    {

        ucData = Check_Column();

    }
    return ucData;
}

//To check the status of coloumn
char Check_Column(void)
{

    short siColNumber=0;
    const unsigned char ucaKeyPad[4][3] =           //Key Pad 4x3
    {
        {'1','2','3'},
        {'4','5','6'},
        {'7','8','9'},
        {'*','0','#'}
    };

    for(siColNumber = 0; siColNumber <= MAX_ROW; siColNumber++)
    {

        DoResetRow(siColNumber); /*Reset the row*/

        if(COL_1 == 0)
        {
            Delay(30);
            return ucaKeyPad[siColNumber][COL1];
        }
        if(COL_2 == 0)
        {
            Delay(30);
            return ucaKeyPad[siColNumber][COL2];
        }
        if(COL_3 == 0)
        {
            Delay(30);
            return ucaKeyPad[siColNumber][COL3];
        }
    }
    return 'p';
}

void DoResetRow(short siRowNumber)
{

    ROW_1=ROW_2=ROW_3=ROW_4= 1; /*Make all row high*/

    switch(siRowNumber)
    {
    case 0:
        ROW_1 =0;
        break;
    case 1:
        ROW_2 =0;
        break;
    case 2:
        ROW_3 =0;
        break;
    case 3:
        ROW_4 =0;
        break;
    }
}


/*Function to move the stepper forword*/
void SteeperMotarForword(void)
{
    short int siLoop =0;

    while (siLoop < 9)
    {

        STEPPER_MOTOR &=0x0f;
        STEPPER_MOTOR |=0xc0;
        Delay(10);
        STEPPER_MOTOR &=0x0f;
        STEPPER_MOTOR |=0x60;
        Delay(10);
        STEPPER_MOTOR &=0x0f;
        STEPPER_MOTOR |=0x30;
        Delay(10);
        STEPPER_MOTOR &=0x0f;
        STEPPER_MOTOR |=0x90;
        Delay(10);
        siLoop++;

    }


}

/*Function to move the stepper backword*/
void SteeperMotarBackword(void)
{

    short int siLoop = 0;

    while (siLoop < 9)
    {

        STEPPER_MOTOR &=0x0f;
        STEPPER_MOTOR |=0x30;
        Delay(10);
        STEPPER_MOTOR &=0x0f;
        STEPPER_MOTOR |=0x60;
        Delay(10);
        STEPPER_MOTOR &=0x0f;
        STEPPER_MOTOR |=0xc0;
        Delay(10);
        STEPPER_MOTOR &=0x0f;
        STEPPER_MOTOR |=0x90;
        Delay(10);

        siLoop++;

    }

}

Funcionamiento de la cerradura electrónica

Mire el siguiente video para comprender el funcionamiento de la cerradura electrónica.

Tu opinión importa

Aquí traté de explicar la interfaz del teclado y la pantalla LCD y traté de crear un proyecto de muestra. Me gustaría saber su opinión sobre el tema tratado anteriormente, así que no olvide escribir el comentario en un cuadro de comentarios.

Publicación recomendada

  • 8051 Arquitectura.
  • Programa de parpadeo de led en c para 8051.
  • Interfaz de interruptor y led usando el 8051
  • Interfaz de relé con microcontrolador 8051
  • Mover la visualización de mensajes en la pantalla LCD usando 8051
  • LCD de 4 bits en modo c código para 8051.
  • Cree caracteres LCD personalizados para LCD alfanumérico de 16 × 2
  • Interfaz de teclado con 8051
  • Cerradura digital electrónica usando el 8051
  • Interfaz de EEPROM con microcontroladores 8051 usando I2C
  • Preguntas de entrevista c integradas.
  • Diagrama de pines del microcontrolador 8051 y descripción de pines.
  • Can preguntas de la entrevista de protocolo.
  • I2C frente a SPI.