Red de conocimiento informático - Material del sitio web - Cómo programar una cerradura electrónica con código basada en el microcontrolador AT89S52

Cómo programar una cerradura electrónica con código basada en el microcontrolador AT89S52

Hola, la imagen es demasiado pequeña para verla con claridad. Publiqué la contraseña fija de otra persona. La parte de visualización del programa es el pin LED correspondiente al programa en sí.

/*----------------------------------------- ------

Nombre: Bloqueo de contraseña de simulación de teclado Matrix

Foro: www.doflye.net

Escritor: shifang

Fecha: 2009.5

Revisión: Ninguna

Contenido: Bloqueo de contraseña simulado, la contraseña se solidifica en la ROM y no se puede cambiar mediante la entrada de una clave

--- -------------------------------------------------*/

#include< reg52.h> // Contiene el archivo de encabezado, que generalmente no necesita ser modificado. El archivo de encabezado contiene la definición del registro de función especial

#define. DataPort P0 //Definir el puerto de datos, en el programa El puerto de datos encontrado será reemplazado por P0

#define KeyPort P1

sbit LATCH1=P2^2;//definir pestillo habilitar el bloqueo del segmento de puerto

sbit LATCH2=P2^3; // Bloqueo de bits

Código de caracteres sin firmar dofly_DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d , 0x07,0x7f 0x07,0x7f ,0x6f,

0x77,0x7c,0x39,0x5e,0x79,0x71} // Mostrar valor de código de segmento 0~F

código de carácter sin firmar dofly_WeiMa; []={0xfe,0xfd ,0xfb,0xf7,0xef,0xdf ,0xbf,0x7f};// Correspondiente al tubo digital correspondiente, es decir: 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //Correspondiente al tubo digital correspondiente Se ilumina.

e. Código de bits

unsigned char TempData[8]; //Variable global que almacena el valor de visualización

unsigned char code password[8]={1,2,3,4 , 5,6,7,8};

//Esta contraseña se puede cambiar para realizar múltiples pruebas

void DelayUs2x(unsigned char t); //Función de retraso a nivel de EE. UU. declaración

void DelayMs(unsigned char t); //retraso a nivel de ms

void Display(unsigned char FirstBit, unsigned char Num); // función de visualización del tubo digital

unsigned char KeyScan(void);//Escaneo de teclado

unsigned char KeyPro(void);

void Init_Timer0(void);//Inicialización del temporizador

/*----------------------------------------------------- ---

Función principal

------------------------------- -- --------------*/

void main (void)

{

número de caracteres sin firmar,i ,j ;

temperatura de caracteres sin firmar[8];

bandera de bits;

Init_ Timer0();

mientras (1) // bucle principal

{

num=KeyPro();

if(num!=0xff)

{

if(i==0)

{

for(j=0;j<8; j++)//borrar la pantalla

TempData[ j]=0;

}

if(i<8)

{

temp[i]=dofly_DuanMa[ num] ;//ingrese el valor de la pulsación de tecla en la matriz temporal

for(j=0;j<= i;j++) //Asigne los valores de la matriz temporal al búfer de visualización en un cierto orden

// Ingrese valores de derecha a izquierda

TempData[7-i+j]=temp[j]

}

i++; // Ingrese el valor a acumular

if(i==9)// El valor normal es igual a 8.

Debido a que necesitamos vaciar uno para limpiar la pantalla,

//Las teclas al borrar la pantalla no ingresan valores

{

i=0;

p>

Flag=1;//primero coloque la posición de comparación 1

for(j=0;j<8;j++)//bucle para comparar los 8 valores,

//si hay desigualdad, entonces el valor del indicador final es 0

Flag=Flag&&(temp[j]==dofly_DuanMa[password[j]]);

// Compara el valor de entrada con la contraseña existente

for(j=0;j<8;j++)//Borrar la pantalla

TempData[j]=0;

if(Flag)//si se comparan todos iguales, posición de la bandera 1

{

TempData[0]=0x3f // "o"

TempData[1]=0x73; // "p"

TempData[2]= p> TempData[1]=0x50; // "r"

TempData[2]= 0x50; // "r"

En caso contrario "Err"

}

}

}

}

}

/*---------- ---- ---- ----------------------------------

Función de retardo de EE. UU., que incluye parámetro de entrada gráfico sin signo, sin valor de retorno

el carácter sin signo se usa para definir variables de caracteres sin signo. Su rango de valores es

0 ~ 255. Aquí se usa el oscilador de cristal 12M. utilice el ensamblaje para un retraso preciso y un retraso aproximado

La longitud es la siguiente T=tx2+5 uS

---------------- --------------- -*/

void DelayUs2x(car t sin firmar)

{

mientras(- -t);

}

/*-------------- ------------------ ------------------

Función de retardo mS, el parámetro de entrada es el carácter sin signo t, sin valor de retorno

el carácter sin signo se define como una variable de carácter sin signo y el rango de valores es

0~255. se utiliza aquí. Utilice el ensamblaje para obtener un retraso preciso

-------- -------------------------. ---------------*/

void DelayMs(car t sin firmar)

{

while(t- -)

{

//retardo aproximado 1mS

DelayUs2x(245);

DelayUs2x(245);

} DelayMs(10); //eliminar el difuminado

if((KeyPort&0x0f )! =0x0f)

{

cord_h=KeyPort&0x0f //Leer los valores de columna y fila

KeyPort=cord_h;

|0xf0; //Muestra el valor de la columna actual

cord_l=KeyPort&0xf0; //Lee el valor de la fila

while((KeyPort&0xf0)!=0xf0);//Espera la liberación y Salida

return(cord_h+cord_l);//El último valor del código de combinación de teclado

}

}return(0xff);//Valor de retorno

}

/*----------------------------------- - ------------

Función de procesamiento de valores clave, devuelve el valor clave escaneado

------------- ----------------------------------*/

carácter sin firmar KeyPro( vacío )

{

switch(KeyScan())

{

caso 0x7e: return 0;break;//0 Presione el tecla correspondiente para mostrar Valores de código correspondientes

case 0x7d: return 1;break;//1

case 0x7d: return 1;break;//1

case 0x7b: return 2;break;//2

case 0x77:return 3;break;//3

case 0xbe:return 4;break;//4

caso 0xbd:return 5;break;//5

case 0xbb:return 6;break;//6

case 0xb7: return 7;break;// 7

caso 0xde:return 8;break;//8

case 0xdd:return 9;break;//9< break;//d

case 0xeb: return 14;break;//e

case 0xe7:return 15;break;//f

default:return 0xff;break;

}

}

}