Utilice lenguaje C para escribir un programa de calculadora basado en el microcontrolador 89c51. ¡El puerto p1 es un teclado 4*4 y el puerto P0 controla el tubo digital yin!
include lt; reg52.hgt; //Incluye archivo de encabezado
#define uchar unsigned char
#define uint unsigned int
unsigned char const dofly[]={0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80} //0-F, viene el tubo digital; Muestra el valor de la tecla presionada.
ucharkeyscan(void); //Función de escaneo del teclado de matriz principal.
retraso nulo(uint i);
void main()
{
tecla uchar;
P2=0x00;
P3=0xff; //1 tubo digital se ilumina y presiona el botón correspondiente, los caracteres del botón se mostrarán
mientras(1)
{
key=keyscan(); // Llamar al escaneo del teclado,
switch(key)
{
caso 0xee: P2 =dofly[0]; //c k1
caso 0xed: P2=dofly[1]; //d k2
caso 0xeb: P2; =dofly[2 ]; romper; //e k3
caso 0xe7: P2=dofly[4]; ]; romper; //8
caso 0xdd: P2=dofly[5]; //9
caso 0xdb: P2=dofly[6]; a
caso 0xd7: P2=dofly[7]; romper;
caso 0xbe: P2=dofly[8]; //4
caso; 0xbd: P2= dofly[9]; romper; //5
caso 0xbb: P2=dofly[10]; //6
caso 0xb7: P2=dofly[ 11]; romper;
caso 0x7e: P2=dofly[12]; romper;
caso 0x7d: P2=dofly[13];
caso 0x7b: P2=dofly[14]; //2
caso 0x77: P2=dofly[15]; //3
//b //7/ /0 Presione la tecla correspondiente para mostrar el valor del código correspondiente. El principio es la combinación de cuatro dígitos altos en una columna y cuatro dígitos bajos en una columna
//. 0111 1110 7e 0 significa 0 después de presionar la tecla, 1 significa que no se presiona ninguna tecla. Es decir, P3.7 y P3.1 están conectados al nivel bajo, que es la tecla S1
//Otros se pueden deducir por analogía.
/*caso 0x7d: P2=dofly[1]; //1
caso 0x7b: P2=dofly[2];
caso 0x77: P2=dofly[3]; //3
caso 0xbe: P2=dofly[4]; //4
caso 0xbd: P2=dofly[5]; romper; //5
caso 0xbb: P2=dofly[6]; //6
caso 0xb7: P2=dofly[7] ; romper; //7
caso 0xde: P2=dofly[8]; //8
caso 0xdd: P2=dofly[9];
caso 0xdb: P2=dofly[10]; //a
caso 0xd7: P2=dofly[11]; //b
*/
}
}
}
uchar keycan(void)//Función de escaneo de teclado, usando inversión de filas y columnas escaneo Por ejemplo: fila de bajo potencial, columna alta de cuatro dígitos
{
uchar cord_h, cord_l; //fila y valores de fila
P1=0x0f; /row La salida de la línea es toda 0
cord_h=P1amp; //Lee el valor de la línea de la columna
if(cord_h!=0x0f) //Primero detecta si el botón es presionado
p>{
delay(100); //Rebote
if(cord_h!=0x0f)
{ p>
cord_h=P1amp; 0x0f; //Lee el valor de la línea colgante
P1=cord_h|0xf0; //Muestra el valor de la línea de la columna actual
cord_l=P1amp; 0xf0; //Leer Ingrese el valor de la línea mentira
return(cord_l cord_h); //El último valor del código de combinación de teclado
}
}return(0xff) ); //Devuelve el valor
}
void delay(uint i)//función de retardo
{
while(i) --);
p>
}