Programación MCU del contestador automático
# include ltreg 51.h gt;
# include ltintrins.h gt
#Definición de entero sin signo uint
#Definición carácter sin firmar uchar
tabla de códigos uchar[16] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x 00 };///Gong
/************************************ *************************************
*Nombre: Delay_1ms()
*Función: subrutina de retardo, el tiempo de retardo es 1 ms * x.
*Entrada: X (número de retrasos por milisegundo)
*Salida: Ninguna
************** ************************************************** * *******/
retraso nulo _ 1 milisegundo (uinti)//retraso de 1 milisegundo
{
uchar x, j;
p>for(j = 0;j lti;j)
for(x = 0;x lt=148;x);
} p>
/********************************************* **** **********************
*Nombre: Key Scan()
*Función: Leer claves. La siguiente subrutina se procesa de acuerdo con el método básico de procesamiento del teclado matricial.
*Entrada: Ninguna
*Salida: Valor clave
******************** ************************************************* ***** */
escaneo de clave uchar (no válido)
{
uchar i, j, temp, Buffer[4] = {0xfe, 0xfd, 0xfb, 0xf 7 }; //Hacer que cada fila del teclado matricial sea baja.
for(j = 0; j lt4; j )
{
p 1 = Búfer[j];
temp = 0x 10;
for(I = 0;ilt4;i)
{
If (! (p 1 amp; Temp)) //Sentencia A Cierto comportamiento del puerto P1 es de 4 bits alto y bajo.
{
return(I j * 4); //Código de clave de retorno
}
temp lt lt= 1; /p>
}
}
}
/****************** * **************************************************
*Nombre: Main()
*Función: Función principal
*Entrada: Ninguna
*Salida: Ninguna
************************************************ *************************/
Gerente general no válido (no válido)
{
uchar Key _ Value//Leer valor de clave
int k = 0;
while(1)
{
p 1 = 0xf 0;
if(P1!= 0xf0) //Determina si el botón está presionado.
{
delay _ 1 ms(20); //Elimina el jitter al presionar la tecla
if(P1!= 0xf0) //Determina si el Se pulsa la tecla por segunda vez.
{
delay _ 1 ms(20); //Elimina el jitter al presionar la tecla
if(P1!= 0xf0) //Determina si el Se pulsa la tecla por tercera vez.
{
k;
clave _ Valor = clave scan();
}
}
}
Si (k==1)
{
P0 = tabla [valor clave]
P2 = 0x 07;
}
if(Key_Value==15)
{
k = 0;
P0 = tabla [valor clave];
P2 = 0x
}
}
} p>