Necesidad urgente: ¿una cerradura con código electrónico compuesta por un teclado 4×4 y una pantalla de tubo digital de 8 dígitos?
El circuito de visualización está compuesto por válvulas digitales de 8 bits. Al ingresar la contraseña, solo se muestra "8". Cuando ingresa la cantidad de dígitos de la contraseña y presiona la tecla Intro, la contraseña ingresada se compara con la contraseña establecida. Si el código es correcto, la puerta se abrirá. Aquí, el LED se enciende durante un segundo como recordatorio y al mismo tiempo emite un sonido de "ding dong". Si la contraseña es incorrecta, la tecla se prohibirá durante 3 segundos y sonará una alarma de "bip, bip" al mismo tiempo; si se sigue presionando la tecla dentro de los 3 segundos, se prohibirá la entrada de la tecla durante 3 segundos nuevamente;
2. Diagrama esquemático del circuito
Figura 4.33.1
3. Conexión del hardware en la placa del sistema
(1).Uso El cable de 8 núcleos conecta p0.0-p0.7 en el área "Sistema MCU" al terminal abcdefgh en el área "Pantalla digital dinámica".
(2) Utilice un cable de 8 núcleos para conectar p2.0-p2.7 en el área "Sistema SCM" al terminal s1s2s3s4s5s6s7s8 en el área "Pantalla digital dinámica".
(3) Utilice un cable de 8 núcleos para conectar p3.0-p3.7 en el área "Sistema MCU" al terminal R1R23R4C1C2C3C4 en el área "Teclado matricial 4×4".
(4) Utilice un cable para conectar p1.0 en el área "Sistema de microcomputadora de chip único" al terminal l2 en el área "Ocho módulos LED".
(5) Utilice un cable para conectar p1.7 en el área "Sistema MCU" al terminal spk in en el área "Módulo de amplificación de audio".
(6) Conecte la salida de altavoz en el área "Módulo de amplificación de audio" al altavoz.
4. Contenido de programación
(1) .Tecnología de reconocimiento de teclado matricial 4 × 4: este aspecto se ha discutido antes y no se repetirá aquí.
(2) Display de 8 dígitos. Al inicializar, se mostrará "P", luego ingrese una contraseña de hasta 6 dígitos. Después de ingresar la contraseña, presione Enter para comparar la contraseña y luego proporcione la información correspondiente. Durante el proceso de ingreso de la contraseña, la pantalla solo muestra "8". . Cuando el número de entradas digitales supere las 6, se emitirá un mensaje de alarma. Durante el proceso de ingreso de la contraseña, si comete un error, puede usar la tecla "del" para eliminar el número incorrecto que acaba de ingresar.
(3). La distribución de funciones de las teclas del teclado matricial 4×4 se muestra en la Figura 4.33.2:
Figura 4.33.2
5. Programa fuente de lenguaje c
# include ltat89x52.h gt
Unsigned char ps[]={1, 2, 3, 4, 5};
Ninguno Código de carácter de símbolo dispbit[]={0xfe, 0xfd, 0xfb, 0xf7,
0xef, 0xdf, 0xbf, 0x7f};
Código de carácter sin firmar dispcode[]={0x3f, 0x06 , 0x5b, 0x4f, 0x66,
0x6d, 0x7d, 0x07, 0x7f, 0x6f,
0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71,
0x00, 0x40, 0x73, 0x ff};
Carbón sin firmar dispbuf[8]={18, 16, 16, 16, 16, 16, 16};
Ninguno Carácter firmado recuento de visualización;
recuento de caracteres sin firmar
temperatura de caracteres sin firmar;
clave de caracteres sin firmar;
recuento de teclas de caracteres sin firmar
Carácter sin firmar PS len = 5;
Carácter sin firmar getps[6];
bit keyoverflag
Indicador de error de bit
bit bandera derecha;
unsigned int segundos 3;
unsigned int aa, bb
unsigned int cc
bit okflag
p>bit alarmflag
indicador de prohibición de bits;
char unsigned oka, okb
Administrador no válido (no válido)
{
Carácter sin firmar I, j;
tmod = 0x 01
th0 = (65536 -500)/256;
tl0 =(65536-500) 256;
tr0 = 1;
et0 = 1;
ea = 1;
mientras( 1)
{
p3 = 0xff
P3_4 = 0;
temp = p3
Temperatura=temperatura amp0x0f
if (temp!=0x0f)
{
for(I = 10;i gt0;i-)
for(j = 248;j gt0;j-);
temp = p3
Temperatura = temperatura amp0x0f
if (temp! =0x0f)
{
temp = p3
Temperatura = temperatura amp0x0f
Interruptor (temperatura)
{
Caso 0x0e:
clave = 7;
Rotura;
Caso 0x0d:
clave = 8;
Rotura;
Caso 0x0b:
clave = 9;
Rotura;
Caso 0x07 :
clave = 10
descanso;
}
temp = p3
p 1 _ 1 = ~ p 1 _ 1;
Si ((key gt= 0) soy
p; amp(clave lt10))
{
if(recuento de claves lt;6)
{
getps[recuento de claves ]= clave;
disp buf[recuento de claves 2]= 19;
}
recuento de claves;
if(recuento de claves= =6)
{
recuento de claves = 6;
}
si no (recuento de claves gt; 6)
{
recuento de claves = 6;
keyeverflag = 1; //Desbordamiento de claves
}
}< / p>
else if(key == 12)//Eliminar clave
{
if(key count gt; 0)
{ p>
recuento de claves-;
getps[recuento de claves]= 0;
disp buf[recuento de claves 2]= 16;
}
Otro
{
keyeverflag = 1;
}
}
más if(key==15)//ingresar clave
{
if(keycount!=pslen)
{
indicador de error = 1;
bandera derecha = 0;
Segundo 3 = 0;
}
Otros
{
for(I = 0; i ltkeycounti )
{
if(getps[i]!=ps[i])
{
i = recuento de claves
indicador de error = 1;
indicador derecho = 0
segundos 3 = 0;
Ir a;
}
}
indicador de error = 0;
indicador derecho = 1;
a: I = recuento de claves;
}
}
Temperatura = temperatura amp0x0f
while( temp!=0x0f)
{
temp = p3
temperatura = temperatura amp0x0f
}
keyeverflag = 0; //?
}
}
p3 = 0xff
P3 _ 5 = 0;
temp = p3
Temperatura = temperatura amp0x0f
if (temp! =0x0f)
{
for(I = 10;i gt0;i-)
for(j = 248;j gt0;j-);
temp = p3
Temperatura = temperatura amp0x0f
if (temp!=0x0f)
{
temp = p3
temperatura = temperatura amp0x0f
interruptor(temperatura)
{
Caso 0x0e:
clave = 4;
>Pausa;
Caso 0x0d:
clave = 5;
Pausa;
Caso 0x0b:
clave = 6;
Descanso
Caso 0x07:
descanso
; }
temp = p3
p 1 _ 1 = ~ p 1 _ 1
if ((clave gt= 0) amp; amp(clave lt10; ))
{
if(recuento de claves lt; 6)
{
getps[recuento de claves]= clave; p> p>
disp buf[recuento de claves 2]= 19;
}
recuento de claves;
if(keycount==6)< /p >
{
recuento de claves = 6
}
si no (recuento de claves gt; 6)
{
recuento de claves = 6;
keyeverflag = 1; //Desbordamiento de claves
}
}
else if(key == 12)//Eliminar clave
{
if(key count gt; 0)
{
recuento de claves-;
getps[recuento de claves]= 0;
disp buf[recuento de claves 2]= 16;
}
Otro
{
keyeverflag = 1;
}
}
else if(key= =15)//ingrese la clave
{
if(keycount!=pslen)
{
indicador de error = 1;
bandera derecha = 0;
Segundo 3 = 0;
}
Otros
{
for(I = 0; i ltkeycounti )
{
if(getps[i]!=ps[i])
{
i = recuento de claves
indicador de error = 1;
indicador derecho = 0;
segundos
Ir a a4;
}
}
indicador de error = 0;
indicador derecho = 1;
a4: I = recuento de claves;
}
}
Temperatura = temperatura amp0x0f
mientras(temp! =0x0f)
{
temp = p3
Temperatura=temperatura amp0x0f
}
keyeverflag = 0 ;//?
}
}
p3 = 0xff
P3_6 = 0;
temp = p3
Temperatura=temperatura amp0x0f
if (temp!=0x0f)
{
for(I =
10;i gt0;i-)
for(j = 248;j gt0;j-);
temp = p3
Temperatura = temperatura amp0x0f
if (temp!=0x0f)
{
temp = p3
Temperatura=temperatura amp0x0f
cambiar (temperatura)
{
Caso 0x0e:
clave = 1;
Rotura;
Caso 0x0d :
clave = 2;
Romper
Caso 0x0b:
clave = 3
Romper; ;
Caso 0x07:
clave = 12;
Roto;
}
temp = p3
p 1 _ 1 = ~ p 1 _ 1;
If ((key gt= 0) amp; amp(key lt10))
{ p>
if(recuento de claves lt; 6)
{
getps[recuento de claves]= clave;
disp buf[recuento de claves 2] = 19;
}
recuento de claves;
if(keycount==6)
{
recuento de claves = 6;
}
si no (recuento de claves gt; 6)
{
recuento de claves = 6;
keyeverflag = 1; //Desbordamiento de clave
}
}
else if(key == 12)//Eliminar clave de contraseña
{
if(recuento de claves gt; 0)
{
recuento de claves-;
getps [recuento de claves]= 0;
disp buf[recuento de claves 2]= 16;
}
Otros
{< / p>
keyeverflag = 1;
}
}
else if(key==15)//tecla enter
{
if(keycount!=pslen)
{
indicador de error = 1;
indicador derecho = 0; p>
Segundos 3 = 0;
}
Otro
{
for(I = 0; i ltkeycounti )
{
if(getps[i]! =ps[i])
{
i = recuento de claves
indicador de error = 1;
indicador derecho = 0; p>
p>
Segundos 3 = 0;
Ir a a3;
}
}
error bandera = 0;
bandera derecha = 1;
a3: I = recuento de claves
}
}
Temperatura = Temperatura amp0x0f
mientras(temp!=0x0f)
{<
/p>
temp = p3
Temperatura = temperatura amp0x0f
}
keyeverflag = 0; //
}
}
p3 = 0xff
P3 _ 7 = 0
temp = p3
Temperatura = temperatura amp0x0f
if (temp!=0x0f)
{
for(I = 10;i gt0;i-)
for(j = 248; j gt0; j-);
temp = p3
Temperatura = temperatura amp0x0f
if (temp!=0x0f) p>
{
temp = p3
Temperatura=temperatura amp0x0f
Interruptor (temperatura)
{
Caso 0x0e:
clave = 0;
Rotura;
Caso 0x0d:
clave = 13;
Pausa;
Caso 0x0b:
clave = 14;
Pausa;
Caso 0x07:
tecla = 15;
romper;
}
temp = p3
p 1 _ 1 = ~ p 1 _ 1;
if ((key gt= 0) amp; amp(key lt10))
{
if(key count lt; 6) p> p>
{
getps[recuento de claves]= clave;
disp buf[recuento de claves 2]= 19;
} p>
recuento de claves;
if(keycount==6)
{
recuento de claves = 6;
} p>
else if(key count gt; 6)
{
key count = 6;
keyeverflag = 1 //Clave; desbordamiento
}
}
else if(key == 12)//Tecla Eliminar
{
if(recuento de claves gt; 0)
{
recuento de claves-;
getps[recuento de claves]= 0;
disp buf[recuento de claves 2]= 16;
}
Otros
{
keyeverflag = 1;
}
}
else if(key==15)//ingresar clave
{
if(keycount! =pslen)
{
bandera de error = 1;
bandera derecha = 0;
Segundos 3 = 0;
}
Otro
{
for(I = 0; iltkeycounti)
{
if(getps[i]!=ps[i])
{
i = recuento de claves
indicador de error = 1
;
bandera derecha = 0;
Segundo 3 = 0;
Ir a a2;
}
}
indicador de error = 0;
indicador derecho = 1;
a2: I = recuento de claves
} p>
}
Temperatura = temperatura amp0x0f
mientras(temp!=0x0f)
{
temp = p3
Temperatura = temperatura amp0x0f
}
keyeverflag = 0; //p>
}
} p>
}
}
void t0(void) usa 0 para interrumpir 1
{
th0 =(65536 - 500)/256;
tl0 =(65536-500) 256;
recuento de destellos;
if(flashcount==8)
{
recuento de destellos = 0;
P0 = código de visualización[disp buf[recuento de visualización]];
p2 = bit de visualización[recuento de visualización] ] ;
recuento de visualización ;
if(dispcount==8)
{
dispcount = 0;
}
}
if((indicador de error = = 1) amp; amp(rightflag==0))
{
b b ;
if (bb==800)
{
bb = 0;
bandera de alarma = ~ bandera de alarma p >
}
if(bandera de alarma = = 1)//Señal de alarma sonora
{
p 1 _ 7 = ~ p 1 _ 7 ;
}
aa ;
if(aa == 800)//Señal de alarma luminosa
{
aa = 0;
p 1 _ 0 = ~ p 1 _ 0;
}
segundo 3;
if (segundo3==6400)
{
Segundo 3 = 0;
bandera de error = 0
bandera derecha = 0; ;
bandera de alarma = 0
bb = 0
aa = 0; }
else if((indicador de error == 0) amp; amp(rightflag==1))
{
p 1 _ 0 = 0;
cc ;
if(cc lt; 1000)
{
ok bandera = 1;
}
si no(cc lt; 2000)
{
ok flag = 0;
}
Otros
{
indicador de error = 0;
derecha
bandera = 0;
p 1 _ 7 = 1;
cc = 0;
oka = 0; ;
ok bandera = 0;
p 1 _ 0 = 1;
}
if(okflag==1)
{
oka;
si (oka==2)
{
oka = 0;
p 1 _ 7 = ~ p 1 _ 7
}
}
Otros
{
ok b ;
si(okb==3)
{
okb = 0;
p 1 _ 7 = ~ p 1 _ 7
}
}
}
if(keyoverflag==1) p> p>
{
p 1_7 = ~p 1_7
}
}
;