Red de conocimiento informático - Descarga de software - 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!

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)

{

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>

}