En este tutorial construiré una calculadora simple de dos dígitos con un microcontrolador 8051(89c51,89c52). La calculadora toma dos dígitos y un operador como entrada y produce una salida. La entrada se realiza a través del teclado numérico de 4x4 y la salida se muestra en una pantalla LCD de 16x2 caracteres. La calculadora de bricolaje puede realizar cuatro operaciones de suma, resta, negación y división.
Calculadora con Keil IDE, microcontrolador 8051 y LCD 16×2
Requisito de hardware del proyecto
- Un microcontrolador 89c52 o 89c51
- Protoboard o PCB (Fabricación de circuitos)
- LCD de 16×2 (visualización de texto)
- Teclado 4×4 (obteniendo entrada)
- Potenciómetro (para configurar el contraste de la pantalla LCD)
- Cristal (11,0592 MHz)
Calculadora con diagrama de circuito del microcontrolador 8051.
El puerto 1 del microcontrolador 8051 está interconectado con un teclado numérico 4×4. Los cuatro bits inferiores de la puerta 8051-1 son filas de barrido del teclado 4x4 y los cuatro bits superiores son culombios de barrido del teclado 4x4. El puerto 1 se utiliza como puerto de entrada. La pantalla LCD de 16 × 2 está interconectada con el microcontrolador 8051 en modo de 8 bits. La pantalla LCD de 16×2 está conectada al puerto 2 del microcontrolador 89c51. El oscilador de 20 MHz se utiliza para proporcionar una fuente de reloj al microcontrolador 89c52. El resto de conexiones son fuente de alimentación para el microcontrolador y configuración del botón de reset.
Calculadora con microcontrolador 8051(89c51,89c52)
Código de proyecto de calculadora 8051
Lea la explicación con atención porque cubre todos los puntos importantes del código y cada declaración del código se explica brevemente. Suponemos que ya está familiarizado con la sintaxis del lenguaje c/c++. De lo contrario, primero realice algunos tutoriales de programación en C/C++ y familiarícese con la sintaxis del lenguaje de programación C/C++.
Comenzando desde el principio, la primera línea de código. No olvide incluir el archivo de encabezado reg51.h para todos sus proyectos que contengan un microcontrolador 8051(89c51,89c52). Este archivo de encabezado es muy importante. El compilador Keil primero verifica este archivo de encabezado en su código. Si está presente, el compilador compila su código; la ausencia de este archivo de encabezado generará un error. A continuación se muestran algunas declaraciones de funciones.
Funciones en la calculadora Código 8051
void lcdcmd (carácter sin firmar)
- Envío de COMANDOS al LCD. (Si no conoce los comandos, simplemente haga clic en la palabra de comandos)
void lcddata (carácter sin firmar)
- Envío de DATOS al LCD. (Si no conoce los datos, simplemente haga clic en la palabra de datos)
anular MSDelay (int sin firmar)
void disp_num(núm flotante)
- Visualización del número en la pantalla LCD después del cálculo.
int get_num(char ch)
- Transformar carácter en número
lcdinit vacío
- Inicializando el controlador del chipset LCD. (haga clic en el enlace para ver qué significa Inicializar LCD)
char scan_key (nulo)
- Escaneando un número en el teclado.
Función principal de la calculadora Código 8051
Puse el cuerpo de la función principal en un bucle while continuo, para poder ejecutar la calculadora para siempre. La función lcdinit inicializa el controlador del chipset lcd con algunos comandos lcd necesarios (no entendí, simplemente haga clic en el enlace y obtendrá un buen tutorial sobre cómo inicializar el lcd). Luego, en el bucle while, estoy imprimiendo la cadena en la pantalla LCD ENTER 1 NO =. Ingrese el número deseado en el teclado. La instrucción key=scan_key es la tecla de escaneo que presiona en el teclado. La función scan_key devuelve un carácter que presionó en el teclado. k2=get_num(key) está convirtiendo la clave devuelta por la función scan_key en un dígito.
Scan_key está leyendo la clave como carácter. Para realizar la operación aritmética sobre la clave tenemos que convertirla en un número. get_num(key) está haciendo este trabajo por nosotros. Entonces, la función lcddata imprime el carácter en la pantalla LCD y el comando lcdcmd (0x01) borra todo el contenido de la pantalla LCD.
La siguiente cadena está impresa en la pantalla LCD y dice operador =. Hay que ingresar al operador y se repiten todos los pasos anteriores. Aparece la siguiente cadena que dice Ingrese 2 no = Simplemente escriba el no. Ahora ve una declaración de cambio que está tomando una decisión, si el operador ingresado es +, irá a la función disp_num(K1+k2) sumando los dos números que acaba de ingresar. Para el operador – irá a negación y para otros operadores irá a ellos. Enviar comandos y datos a la pantalla LCD es una función muy importante, sus breves detalles están disponibles en la función de datos y comandos de la pantalla LCD. Que la función de retraso para retrasar el proceso es muy importante. Se puede entender esto ejecutando código incrustado en equipos de hardware. scan_key La función se explica en el siguiente enlace Programación del Teclado 4×4.
La función disp_num muestra nuestro número calculado en una pantalla LCD de 16 × 2.
En las funciones, se declaran algunas matrices de caracteres. Las cadenas en matrices de caracteres se muestran en una pantalla LCD de 16 × 2 durante el funcionamiento de la calculadora con microcontrolador 8051. De hecho, se comunican con el usuario, solicitando información y resultados. También estoy usando registros de memoria interna del microcontrolador 8051(89c51,89c52) o sfr .
Los sfr son ubicaciones de memoria directa para puertos, registros y temporizadores de microcontroladores 8051. Sfr ldata=0xA0 accede al puerto 2 del microcontrolador. 0xA0 es Sfr para el puerto 2. Ahora ldata es una variable que apunta al puerto 2 del microcontrolador. Luego se declaran algunos pines. La pantalla LCD está controlada por el puerto 3# pines 5,6,7. Los pines de datos del LCD están conectados al puerto 2 del microcontrolador. El puerto 1 comprueba líneas y culombios desde el teclado 4x4.
Ahora bien, ¿cómo está funcionando?
Primero, estoy convirtiendo mi número flotante en un número entero mediante entumecido=(int)num. Entonces estoy comprobando si num es menor que 0 o si es negativo. Si el número es negativo, lo multiplico por -1 y lo hago positivo. Luego envíe – firme en la pantalla LCD porque el valor calculado está en el formato –. Si el valor es mayor que 10, encuentro diez dígitos dividiendo entumecido/10. Ahora, si el tendígito no es igual a 0, lo muestro en la pantalla LCD. Datos LCD (décimo dígito + 0x30). Ustedes están pensando en lo que esto significa. De hecho, cuando divido entumecido/10, el valor devuelto para TEnthdigit está en formato ASCII porque TenthDigit es una variable de carácter, así que para convertir un valor ASCII en un carácter simplemente agréguele 0x30 o 48 porque esos son los valores donde los dígitos comienzan. A diferencia del dígito de la unidad num-TenthDigit*10, nos dará el dígito de la unidad en formato ASCII para agregarle el valor 0x30. Si no le agrega 0x30 (hexadecimal) o 48 (decimal), la pantalla LCD mostrará algunos caracteres especiales. Los caracteres iniciales de la tabla ASCII. El valor decimal se calcula y también se imprime en la pantalla LCD utilizando el mismo método. Simplemente copie el código que hizo que el circuito de hardware escribiera el código en el microcontrolador 8051 (89c51,89c52) y verifique su creación.
Matrices de caracteres y sfr utilizadas en funciones de calculadora
A continuación se muestran algunos proyectos más sobre cómo hacer calculadoras de dos dígitos con microcontroladores. Puede encontrar códigos fuente gratuitos y diagramas de circuitos de los proyectos en los tutoriales. Haga clic en los botones a continuación para visitar los tutoriales.
Calculadora de dos dígitos con Arduino Uno
Descargue archivos de proyecto, código (C++, Hex) compilado en keil U-vision 4. Danos tu opinión sobre el proyecto. Si tiene alguna pregunta, escríbala en la sección de comentarios a continuación.
Mira el vídeo del proyecto aquí……
Código de calculadora (899c52) Microcontrolador