Red de conocimientos turísticos - Conocimientos sobre calendario chino - Alrededor de 51 microcontroladores, tubo digital en lenguaje C, 4*4 teclas, bloqueo de contraseña simple, ¡por favor ayuda!

Alrededor de 51 microcontroladores, tubo digital en lenguaje C, 4*4 teclas, bloqueo de contraseña simple, ¡por favor ayuda!

Bloqueo de contraseña (protección contra apagado)

Teclas de función

S6---S15 Teclas numéricas 0-9

S16--Cambiar contraseña S17--Cambiar contraseña Luego confirme

S18--Restablecer contraseña, restablecer S19--Cerrar bloqueo de contraseña

Contraseña inicial: 000000 Dígitos de contraseña: 6 dígitos

Nota: Se perdió la La contraseña establecida se perderá después de apagar la alimentación y la contraseña se restaurará a la contraseña inicial: 6 dígitos

Nota: Después de apagar la alimentación, la contraseña que se ha establecido se perderá y la contraseña se restaurará al 000000 original cuando se encienda la alimentación.

El LED de 8 bits conectado a P1 se ilumina para indicar que la cerradura está abierta y se apaga indica que la cerradura está bloqueada.

Función del programa: Este programa combina la función de memoria de la memoria 24C02, que se puede utilizar en caso de un corte de energía. Guarde la contraseña a continuación.

Cuando se ejecuta por primera vez, si no hay respuesta después de ingresar la contraseña original 000000, puede intentar eliminar la línea de comentarios frente al programa y eliminar una pequeña sección del programa que está bloqueada. por la línea de comentario en el programa principal, y luego vuelva a compilar y descargar (puede restaurar la contraseña a 000000).

Después, una pequeña parte del programa será bloqueada nuevamente, luego recompilada y descargada. Entonces se puede utilizar normalmente.

1. Desbloqueo:

Después de descargar el programa, presione directamente la tecla S7 seis veces (que representa el número 1), el LED de 8 dígitos se enciende, se abre la cerradura , ingrese la contraseña,

El tubo digital de seis dígitos muestra las secciones en secuencia.

2. Cambiar contraseña:

Esta función sólo se puede utilizar cuando la cerradura está abierta (el LED está encendido).

Primero, presione la tecla de cambio de contraseña S16 y luego configure la contraseña correspondiente. En este momento, el tubo digital de seis dígitos mostrará el número correspondiente a la contraseña establecida

. Finalmente, después de configurar los seis dígitos, presione la tecla S17 para confirmar el cambio de contraseña y la nueva contraseña entrará en vigor.

3. Vuelva a intentar la contraseña:

Al ingresar la contraseña, la contraseña es incorrecta. Presione la tecla S18 para volver a ingresar la contraseña de seis dígitos.

Al configurar la contraseña, si desea cambiarla a mitad de camino, también puede presionar este botón para restablecerla.

4. Cierra el bloqueo de contraseña:

Presiona la tecla S19 para cerrar el bloqueo de contraseña abierto.

Pasos de demostración básicos recomendados: Ingrese la contraseña original 000000--Presione el botón de cambio de contraseña S16--Presione del 0 al 9 para configurar la contraseña--Presione S17

Confirme el cambio de contraseña --Presione S18 para cerrar el bloqueo de contraseña--Ingrese una nueva contraseña para abrir el bloqueo de contraseña

************************ ********* ******************************************* *******/

#include lt;reg52.hgt;

#include lt;intrins.hgt;

#define uint unsigned int

#define uchar unsigned char

uchar old1, old2, old3, old4, old5, old6 //Contraseña original 00000000

uchar new1, new2, new3; , new4, new5, new6; //Cada vez que la MCU captura la entrada de contraseña

uchar a=16, b=16, c=16, d=16, e=16, f=16; /Variables que se introducirán en la pantalla de tubería digital

uchar wei, key, temp;

bit permitir, genggai, ok, wanbi, reintentar, cerrar

sbit dula=P2^6;

sbit wela=P2^7;

sbit pitido=P2^3

sbit sda=P2^0; //definición del puerto IO

void clock() //reloj del bus I2C

{

unsigned char i=0

scl; =1;

nop ();

mientras ((sda==1)amp; amp; (ilt; 255))

i ; > scl=0;

nop();

}

//////// dirección esclava de 24c02/////

carácter unsigned read24c02(dirección de char unsigned)

{

char unsigned i;

start();

writebyte(0xa0);

reloj();

writebyte(dirección);

reloj();

writebyte(0xa1 );

reloj();

i=readbyte()

detener(); >

delay1(100);

return(i);

}

////// Escribe un byte de datos en la dirección info/////< de 24c02 /p>

void write24c02(dirección de carácter sin firmar, información de carácter sin firmar)

{

inicio();

writebyte(0xa0);

reloj();

writebyte(dirección);

reloj();

writebyte(info);

reloj();

stop();

retraso1(5000); Debe ser lo suficientemente largo; de lo contrario, se producirá un error. Porque después de obtener los datos de sda, 24c02 necesita algo de tiempo para completar el proceso de grabación.

}

/****************************** Módulo de programa de bloqueo de contraseña** ************************************************** * ****/

retraso nulo (unsigned char i)

{

uchar j, k;

for(j = i;jgt;0;j--)

for(k=125;kgt;0;k--);

}

visualización vacía ( uchar a, uchar b, uchar c, uchar d, uchar e, uchar f)

{

dula=0;

P0=table[a ] ;

dula=1;

dula=0;

wela=0;

P0= 0xfe;

wela=1;

wela=0;

retraso(5);

P0=tabla[b]; > dula=1;

dula=0;

P0=0xfd

wela=1

p> wela=0; ;

retraso(5);

P0=tabla[c]

dula=1; /p>

p>

P0=0xfb;

wela=1;

wela=0

retraso(5); /p>

P0=tabla[d];

dula=1;

dula=0;

P0=0xf7;

wela=1 ;

wela=0;

retraso(5

P0=tabla[e]; > dula=1;

dula=0;

P0=0xef;

wela=1

wela=0; /p>

retraso(5);

P0=tabla[f];

dula=1;

dula=0.

P0= 0xdf;

wela=1;

wela=0;

retraso(5);

void teclascan()

{

{

P3=0xfe

temp= P3; /p>

temp=tempamp;0xf0;

if (temp! =0xf0)

{

demora(10);

if(temp!=0xf0)

{

temp=P3;

cambiar(temp)

{

caso 0xee:

clave=0;

wei ;

descanso

caso 0xde:

clave=1

wei ;

romper;

caso 0xbe:

>

clave=2;

wei

romper;

caso 0x7e:

clave=3; >

wei;

romper

}

mientras (temp!=0xf0)

{

temp=P3;

temp=tempamp;

temp=0xf0; }

pitido=1;

}

}

P3=0xfd

temp=P3;

temp=tempamp;0xf0;

if(temp!=0xf0)

{

demora(10);

if(temp!=0xf0)

{

temp=P3;<

cambiar(temp)

{

caso 0xed:

clave=4

wei

descanso

caso 0xdd:

clave=5;

wei ;

romper

caso 0xbd:

clave=6;

wei;

descanso

caso 0x7d:

clave=7

wei ;

romper;

romper

}

mientras(temp!=0xf0)

{

temp=P3;

temp=tempamp;

temp=0xf0

pitido=0; }

pitido=1;

}

}

P3= 0xfb

temp=P3;

temp=tempamp;0xf0;

if(temp!=0xf0)

{

demora(10);

if(temp!=0xf0)

{

temp=P3;

cambiar(temp)

{

caso 0xeb:

clave=8

wei

descanso

caso 0xdb:

p>

p>

clave=9;

wei ;

descanso

caso 0xbb:

genggai =1;

p>

wei=0;

romper;

caso 0x7b:

if(permitir)

ok=1;

romper;

}

mientras(temp! =0xf0)

{

temp=P3

temp=0xf0;

temp=temp=0;

pitido=0

}

pitido=1

}

P3=0xf7;

temp=P3;

temp=0xf0

si (temp!=0xf0)

{

demora(10);

si(temp!= 0xf0)

{

temp=P3;

cambiar(temp)

{

caso 0xe7:

reintentar=1

romper

caso 0xd7:

close=1;

romper.

romper

}

mientras; (temp!=0xf0)

{

temp=P3;

temp=tempamp;0xf0;

pitido=0;

}

pitido=1

}

}

}

}

void shumima() //asignar datos recopilados de las pulsaciones de teclas

{

if(!wanbi)

{

cambiar(wei)

{

caso 1: new1=clave

if(!new4=clave;

if(a==17) d=17;

else d=clave;

caso 5: new5=clave; =17) e=17;

else e=clave;

caso 6: nuevo6=clave

if(a==17) f =17;

De lo contrario f=clave

wanbi=1

}

}

}

void yanzheng() //verifica que la contraseña sea correcta

{

if(wanbi) //verifica solo cuando se ingresan las seis contraseñas

{

if ((new1====1))p> if((new1==old1)amp; (new2==old2)amp; (new3== old3)amp;(new4==old4)amp;(new5==old5)amp;(new6==old6))

enable=1; //Cuando la contraseña se ingresa correctamente, obtendrá la configuración permite 1

}

}

void main()

{

init() ; //Inicializar 24C02

/********** La función del siguiente subprograma es formatear el almacenamiento de contraseñas.

***********

****** Cuando llega 24c02 ***************

******* Cuando los datos almacenados en estas áreas de almacenamiento cambian debido al funcionamiento de otros programas, o cuando se olvida la contraseña, ******************* **

****** Puede eliminar la línea de comentario anterior y luego volver a compilarla y descargarla. ****************

****** Después de restaurar la contraseña a 000000, bloquee lo siguiente con ******* ** *********

****** Vuelve a compilar y descargar el programa comentado, y luego podrás usarlo normalmente************** **** *****/

// write24c02(110, 0x00);

// write24c02(111, 0x00); // Unidades de dirección 110 a 115 de; 24c02 se utilizan como contraseñas Área de almacenamiento

// write24c02(112, 0x00);

// write24c02(113, 0x00); 114, 0x00);

// write24c02(115, 0x00);

/********************* ******* **************************** ****************/

old1 =read24c02(110);

old2=read24c02(111);

old3=read24c02(112);

old4 =read24c02(113);

p>

old5=read24c02(114);

old6=read24c02(115);

mientras(1)

{

teclascan();

shumima();

yanzheng()

if( permitir) //Después de la verificación, si permitir es 1, entonces Desbloquear

{

P1=0x00

if(!genggai)

<; p> wanbi=0;

}

if(genggai) //Al presionar la tecla de cambio de contraseña S16, genggai se establecerá en 1

{

if(allow) // Solo se permite cambiar la contraseña cuando el candado está abierto

{

while(!wanbi) //Cuando la nueva no se ha establecido una contraseña de seis dígitos, permanecerá en bucle aquí

{

keyscan();

keyscan(0);

llavescan(0)=0;

}

if(allow) //Cuando se presiona la tecla de cambio de contraseña S16, esta tecla se establecerá en 1.

shumima();

if(retry|close) // Cuando se detecta que la tecla de reintento S18 o la tecla de bloqueo de contraseña S19 están cerradas, salta

{ wanbi=1;

romper

}

mostrar(a, b, c, d, e, f); >

}

}

}

if(ok) //Al cambiar la contraseña, presione esta tecla para presionar los seis dígitos nuevos Finalizar el cambio de contraseña

{ //Esta clave no es válida en otros momentos

ok=0;

genggai =0; p> old1=new1; old2=new2; old3=new3; // En este momento, se reemplazará la contraseña anterior

old4=new4; p>

La nueva contraseña se escribirá en la memoria.

escribir24c02(110, antiguo1);

escribir24c02(111, antiguo2);

escribir24c02(112, antiguo3); (113, antiguo4);

escribir24c02( 114, antiguo5);

escribir24c02( 115, antiguo6); =16; d=16; e=16; f=16;

}

if(retry) //Cuando se presiona el botón de reintento S18, se configura el reintento

{

reintento=0; wanbi=0;

a=16; c=16; ; f=16;

nuevo1=0; nuevo2=0; nuevo4=0; nuevo6=0; > if(close) // Cuando se presiona el botón de bloqueo de contraseña, la configuración se cierra

{

close=0; // Se borran todas las variables.

wei=0; wanbi=0;

permitir=0;

P1=0xff

a=16; 16; c=16; d=16; e=16; nuevo5=0.nuevo6=0; /p>

}

display(a, b, c, d, e, f //visualización en tiempo real

}

}

i.js">