Tabla de contenido:

Tutorial de ensamblador AVR 9: 7 pasos
Tutorial de ensamblador AVR 9: 7 pasos

Video: Tutorial de ensamblador AVR 9: 7 pasos

Video: Tutorial de ensamblador AVR 9: 7 pasos
Video: 7.0 Curso Programación de AVR en Ensamblador (Programa #5 generar retardo "delay", LED intermitente) 2024, Noviembre
Anonim
Tutorial de ensamblador AVR 9
Tutorial de ensamblador AVR 9

Bienvenido al Tutorial 9.

Hoy mostraremos cómo controlar una pantalla de 7 segmentos y una pantalla de 4 dígitos utilizando nuestro código de lenguaje ensamblador ATmega328P y AVR. En el transcurso de hacer esto, tendremos que desviarnos sobre cómo usar la pila para reducir el número de registros que necesitamos atar. Agregaremos un par de capacitores (filtros de paso bajo) para intentar reducir el ruido en nuestro teclado. Crearemos un amplificador de voltaje a partir de un par de transistores para que nuestro interruptor de interrupción INT0 funcione mejor para los botones de voltaje más bajo en la fila inferior del teclado. Y nos golpearemos un poco la cabeza contra la pared tratando de conseguir las resistencias correctas para que la cosa funcione correctamente.

Usaremos nuestro teclado del Tutorial 7

Para hacer este tutorial, además de las cosas estándar, necesitará:

  1. Una pantalla de 7 segmentos

    www.sparkfun.com/products/8546

  2. Una pantalla de 4 dígitos

    www.sparkfun.com/products/11407

  3. Un pulsador

    www.sparkfun.com/products/97

  4. Las hojas de datos para la pantalla que se pueden descargar desde sus respectivas páginas vinculadas arriba.
  5. Un condensador cerámico de 68 pf, un par de 104 condensadores, un montón de resistencias, dos transistores NPN 2N3904.

Aquí hay un enlace a la colección completa de mis tutoriales de ensamblador AVR:

Paso 1: Cableado de la pantalla de 7 seg

Cableado de la pantalla de 7 seg
Cableado de la pantalla de 7 seg
Cableado de la pantalla de 7 seg
Cableado de la pantalla de 7 seg
Cableado de la pantalla de 7 seg
Cableado de la pantalla de 7 seg

Vamos a usar el mismo código que usamos en el Tutorial 7 para que el teclado controle la pantalla de 7 segmentos. Por lo tanto, deberá hacer una copia de eso y lo modificaremos.

Mapearemos los segmentos a los pines de nuestro microcontrolador de la siguiente manera:

(dp, g, f, e, d, c, b, a) = (PD7, PD6, PB5, PB4, PB3, PB2, PB1, PB0)

donde las letras de los segmentos se muestran en la imagen junto con el pinout correspondiente a los 5V comunes y cada uno de los segmentos de LED incluyendo el punto decimal (dp) en la parte inferior derecha de la pantalla. La razón de esto es que podemos ingresar el número completo en un solo registro y enviar ese registro a los puertos B y D para iluminar los segmentos. Como puede ver, los bits están numerados secuencialmente de 0 a 7 y, por lo tanto, se asignarán a los pines correctos sin tener que configurar y borrar bits individuales.

Como puede ver por el código que hemos adjuntado en el siguiente paso, hemos movido nuestra rutina de visualización a una macro y hemos liberado los pines SDA y SCL para uso futuro en el próximo Tutorial.

Debo agregar que debe colocar una resistencia entre el ánodo común de la pantalla y el riel de 5V. Elegí una resistencia de 330 ohmios como de costumbre, pero si lo desea, puede calcular la resistencia mínima necesaria para obtener el brillo máximo de la pantalla sin freírla. Así es como se hace:

Primero mire la hoja de datos y observe que en la primera página le da varias propiedades de la pantalla. Las cantidades importantes son la "Corriente directa" (I_f = 20mA) y la "Tensión directa" (V_f = 2.2V). Estos le dicen que desea que la caída de voltaje en la pantalla sea si la corriente es igual a la corriente directa. Esta es la corriente máxima que tomará la pantalla sin freír. En consecuencia, también es el brillo máximo que puede obtener de los segmentos.

Entonces, usemos la ley de Ohm y la regla de bucle de Kirchoff para averiguar qué resistencia mínima necesitaríamos poner en serie con la pantalla para obtener el brillo máximo. La regla de Kirchoff dice que la suma de los cambios de voltaje alrededor de un circuito cerrado en un circuito es igual a cero y la ley de Ohm dice que la caída de voltaje a través de una resistencia de resistencia R es: V = I R donde I es la corriente que fluye a través de la resistencia.

Entonces, dada una fuente de voltaje de V y dando la vuelta a nuestro circuito, tenemos:

V - V_f - I R = 0

lo que significa (V - V_f) / I = R. Entonces, la resistencia necesaria para obtener el brillo máximo (y probablemente freír los segmentos) sería:

R = (V - V_f) / I_f = (5.0V - 2.2V) /0.02A = 140 ohmios

Entonces, si quisiera, felizmente podría usar 150 ohmios sin preocupaciones. Sin embargo, creo que 140 ohmios lo hacen demasiado brillante para mi gusto, por lo que uso 330 ohmios (que es una especie de resistencia personal de Goldilocks para los LED)

Paso 2: código de ensamblaje y video

Adjunto el código de ensamblaje y un video que muestra el funcionamiento del teclado con la pantalla. Como puede ver, simplemente hemos asignado la tecla Volver a marcar a "r", la tecla flash a "F", el asterisco a "A" y el signo de almohadilla a "H". Estos podrían asignarse a varias operaciones como retroceso, ingresar y otras cosas si desea continuar usando el teclado para escribir números en pantallas LCD o pantallas de 4 dígitos. Esta vez no revisaré el código línea por línea, ya que es muy similar a lo que ya hemos hecho en tutoriales anteriores. Las diferencias son principalmente más de las mismas cosas que ya sabemos cómo hacer, como interrupciones y tablas de búsqueda. Simplemente debe revisar el código y mirar las cosas nuevas que hemos agregado y las cosas que hemos cambiado y averiguarlo a partir de ahí. Volveremos al análisis línea por línea en el próximo tutorial cuando presentemos nuevos aspectos de la codificación en lenguaje ensamblador en microcontroladores AVR.

Veamos ahora una pantalla de 4 dígitos.

Paso 3: cableado de la pantalla de 4 dígitos

Cableado de la pantalla de 4 dígitos
Cableado de la pantalla de 4 dígitos
Cableado de la pantalla de 4 dígitos
Cableado de la pantalla de 4 dígitos

Según la hoja de datos, la pantalla de 4 dígitos tiene una corriente directa de 60 mA y una tensión directa de 2,2 voltios. Entonces, con el mismo cálculo que antes, podría usar una resistencia de 47 ohmios si quisiera. En su lugar, voy a usar un … hrm … déjame ver … qué tal 330 ohmios.

La forma en que se conecta la pantalla de 4 dígitos es que hay 4 ánodos, uno para cada uno de los dígitos, y los otros pines controlan qué segmento se enciende en cada uno. Puede mostrar 4 dígitos simultáneamente porque están multiplexados. En otras palabras, al igual que hicimos con el par de dados, simplemente ciclamos la energía a través de cada uno de los ánodos por turno y los parpadeará uno tras otro. Lo hará tan rápido que nuestros ojos no verán el parpadeo y parecerá que los cuatro dígitos están encendidos. Sin embargo, solo para estar seguros, la forma en que lo codificaremos es configurando los cuatro dígitos, luego ciclando los ánodos, en lugar de configurar, mover, configurar, mover, etc. De esa manera podemos obtener una sincronización precisa entre el encendido de cada dígito.

Por ahora, probemos que todos los segmentos funcionan.

Coloque su resistencia de 330 ohmios entre el riel positivo de su tablero y el primer ánodo en la pantalla. La hoja de datos nos dice que los pines están numerados del 1 al 16 en sentido antihorario comenzando en la parte inferior izquierda (cuando mira la pantalla normalmente … con los puntos decimales en la parte inferior) y establece que los ánodos son los números de pin 6, 8, 9 y 12.

Así que conectamos el pin 6 a 5V y luego tomamos un cable negativo de su riel GND y lo introducimos en todos los otros pines y vemos que todos los segmentos se iluminan en el dígito al que corresponde (que en realidad es el segundo dígito de la derecha). Asegúrese de que los 7 segmentos y el punto decimal se iluminen.

Ahora inserte su cable GND en uno de los pines para iluminar uno de los segmentos y esta vez mueva la resistencia a los otros 3 ánodos y vea que el mismo segmento se enciende en cada uno de los otros dígitos.

¿Algo inusual?

Resulta que el pinout en la hoja de datos es incorrecto. Esto se debe a que es la hoja de datos y la configuración de pines para una pantalla de 12 pines y 4 dígitos. Es decir. uno sin dos puntos o un punto decimal superior. La pantalla que obtuve cuando la ordené es una pantalla de 16 pines y 4 dígitos. De hecho, en el mío, los ánodos del segmento están en los pines 1, 2, 6 y 8. El ánodo de los dos puntos es el pin 4 (pin 12 del cátodo) y el ánodo dp superior es el pin 10 (el cátodo es el pin 9)

Ejercicio 1: Use su resistencia y cable de tierra para trazar qué pin corresponde a qué segmento y punto decimal en la pantalla para que obtengamos los segmentos correctos iluminados cuando lo codifiquemos.

La forma en que queremos codificar el mapa de segmentos es exactamente como lo hicimos con la pantalla de 7 segmentos de un solo dígito anterior: no tenemos que cambiar nada en el código, lo único que cambiamos es cómo se conectan los cables a bordo. Simplemente conecte el pin del puerto correcto en el microcontrolador al pin correspondiente en la pantalla de 4 dígitos para que, por ejemplo, PB0 todavía vaya al pin correspondiente al segmento a, PB1 vaya al segmento B, etc.

La única diferencia es que ahora necesitamos 4 pines adicionales para los ánodos, ya que ya no podemos simplemente ir al riel de 5V. Necesitamos que el microcontrolador decida qué dígito obtiene el jugo.

Entonces usaremos PC1, PC2, PC3 y PD4 para controlar los ánodos de los 4 dígitos.

También podría seguir adelante y conectar los cables. (¡No olvide las resistencias de 330 ohmios en los cables del ánodo!)

Paso 4: codificación de la pantalla de 4 dígitos

Codificación de la pantalla de 4 dígitos
Codificación de la pantalla de 4 dígitos

Pensemos en cómo queremos codificar esta pantalla.

Nos gustaría que el usuario presione los botones del teclado y que los números aparezcan secuencialmente en la pantalla a medida que presionan cada botón. Entonces, si presiono un 1 seguido de un 2, aparecerá en la pantalla como 12. También me gustaría almacenar ese valor, 12, para uso interno, pero llegaremos a eso un poco más tarde. Por ahora, solo quiero escribir una nueva macro que tome sus pulsaciones de teclas y las muestre. Sin embargo, dado que solo tenemos 4 dígitos, quiero asegurarme de que solo le permita escribir cuatro números.

Otro problema es que la forma en que funciona la pantalla multiplexada de 4 dígitos es ciclando los ánodos de modo que cada dígito esté encendido solo durante una fracción de segundo antes de mostrar el siguiente y luego el siguiente y finalmente volver al primero de nuevo, etc. Necesito una forma de codificar esto.

También queremos que mueva el "cursor" hacia la derecha un espacio cuando escribimos el siguiente dígito. De modo que si quiero escribir 1234, por ejemplo, después de escribir el 1, el cursor se moverá para que el siguiente dígito que escriba aparezca en la siguiente pantalla de 7 segmentos y así sucesivamente. Mientras esto sucede, todavía quiero poder ver lo que he escrito, por lo que todavía tiene que recorrer los dígitos y mostrarlos.

¿Suena como una tarea difícil?

Las cosas son incluso peores. Necesitamos 4 registros más de propósito general que podamos usar para almacenar los valores actuales de los 4 dígitos que queremos mostrar (si vamos a recorrerlos, tenemos que mantenerlos almacenados en algún lugar) y el problema con esto es que tenemos estado consumiendo registros de propósito general como locos y si no tenemos cuidado no nos quedará ninguno. Por lo tanto, probablemente sea una buena idea abordar ese problema más temprano que tarde y mostrarle cómo liberar registros mediante el uso de la pila.

Así que comencemos simplificando un poco las cosas, usemos la pila y liberemos algunos registros y luego intentaremos realizar la tarea de leer y mostrar nuestros números en la pantalla de 4 dígitos.

Paso 5: Push 'n Pop

Push 'n Pop
Push 'n Pop

Hay sólo unos pocos "Registros de propósito general" que tenemos a nuestra disposición y una vez que se utilizan no hay más. Por lo tanto, es una buena práctica de programación usarlos solo para un par de variables que se usan como almacenamiento temporal que necesita para leer y escribir en puertos y SRAM con, o de lo contrario, las que necesitará en subrutinas en todas partes, por lo que nómbralos. Entonces, lo que he hecho, ahora que hemos inicializado y estamos aprendiendo a usar la pila, es revisar el código y encontrar los registros de propósito general nombrados que se usan solo dentro de una sola subrutina o interrupción y en ninguna otra parte del código y reemplazar ellos con uno de nuestros registros temporales y un empuje y pop a la pila. De hecho, si observa el código escrito para microcontroladores más pequeños, o si retrocede en el tiempo a cuando todos los chips eran más pequeños, verá solo un par de registros de propósito general que tuvieron que usarse para todo, por lo que no podría simplemente almacene un valor allí y déjelo solo, ya que seguramente necesitará ese registro para otras cosas. Entonces verá empujar y hacer estallar por todas partes en el código. Tal vez debería haber nombrado a nuestros registros temporales de propósito general AX y BX como un respetuoso reconocimiento a esos días pasados.

Un ejemplo ayudará a aclarar esto.

Observe que en nuestra interrupción completa de conversión analógica a digital ADC_int usamos un registro de propósito general que hemos llamado buttonH que usamos para cargar el valor de ADCH y compararlo con nuestra tabla de búsqueda de conversiones analógicas a pulsaciones de botones. Solo usamos este registro buttonH dentro de la subrutina ADC_int y en ningún otro lugar. Entonces, en su lugar, usaremos nuestra variable temp2 que usamos como una variable temporal que podemos usar dentro de cualquier subrutina dada y su valor no afectará nada fuera de esa subrutina (es decir, el valor que le damos en ADC_int no se usará en ninguna parte demás).

Otro ejemplo está en nuestra macro de retardo. Tenemos un registro que hemos llamado "milisegundos" que contiene nuestro tiempo de retardo en milisegundos. En este caso es en una macro y recordamos que la forma en que funciona la macro es que el ensamblador coloca todo el código de la macro en el lugar del programa donde se llama. En este caso, nos gustaría deshacernos de la variable "milisegundos" y reemplazarla con una de nuestras variables temporales. En este caso, lo haré de manera un poco diferente para mostrarle cómo, incluso si el valor de la variable se va a necesitar en otro lugar, todavía podemos usarlo usando la pila. Entonces, en lugar de milisegundos usamos "temp" y para no estropear otras cosas que también usan el valor de temp, simplemente comenzamos la macro "delay" al "presionar" temp en la pila, luego la usamos en lugar de milisegundos, y luego, al final de la macro, "sacamos" su valor anterior de la pila.

El resultado neto es que hemos "tomado prestados" temp y temp2 para uso temporal y luego los restauramos a sus valores anteriores cuando terminamos.

Aquí está la rutina de interrupción ADC_int después de realizar este cambio:

ADC_int:

empuje la temperatura; guardar temp ya que lo modificamos aquí push temp2; guardar temp2 lds temp2, ADCH; cargar tecla presionar ldi ZH, alto (2 * números) ldi ZL, bajo (2 * números) cpi temp2, 0 breq return; si los disparadores de ruido no cambian 7segnumber setkey: lpm temp, Z +; cargar desde la tabla y publicar el incremento clc cp temp2, temp; comparar la pulsación de teclas con la tabla brlo PC + 4; si ADCH es menor, inténtelo de nuevo lpm 7segnumber, Z; de lo contrario, cargue la tabla de valores clave con dígitos incluidos; incrementar el número de dígitos rjmp return; y regresa adiw ZH: ZL, 1; incrementar Z rjmp setkey; y volver al principio return: pop temp2; restaurar temp2 pop temp; restaurar temp reti

Observe que la forma en que funciona la pila es que el primero que se enciende es el último que se apaga. Como una pila de papeles. Verá que en nuestras dos primeras líneas empujamos el valor de temp a la pila, luego empujamos temp2 a la pila, luego los usamos en la subrutina para otras cosas, y finalmente los restauramos a sus valores anteriores nuevamente por primero quitando temp2 (ya que fue el último que se presionó, está en la parte superior de la pila y será el primero en el que retrocedamos) y luego haciendo estallar temp.

Así que de ahora en adelante siempre usaremos este método. La única vez que designaremos un registro para algo que no sea una variable temporal es cuando lo vamos a necesitar en todas partes. Por ejemplo, el registro llamado "overflows" es uno que usamos en varios lugares diferentes del programa y por eso nos gustaría darle un nombre. Por supuesto, todavía podríamos usarlo de la manera que lo hemos hecho con temp y temp2, ya que restauraríamos su valor una vez que hayamos terminado. Pero eso espaguetizaría demasiado las cosas. Se nombran por una razón y tenemos temp y temp2 ya designados para ese trabajo.

Paso 6: filtros de paso bajo y amplificador de voltaje

Filtros de paso bajo y amplificador de voltaje
Filtros de paso bajo y amplificador de voltaje
Filtros de paso bajo y amplificador de voltaje
Filtros de paso bajo y amplificador de voltaje

Para limpiar un poco el ruido y hacer que nuestro teclado funcione mejor, queremos agregar un par de filtros de paso bajo. Estos filtran el ruido de alta frecuencia y permiten que pase la señal de baja frecuencia. Básicamente, la forma de hacer esto es simplemente agregar un capacitor de 68 pf entre nuestra entrada analógica y tierra y también un capacitor de 0.1 microfaradios (es decir, 104) entre nuestra interrupción PD4 (INT0) y tierra. Si juega con estos mientras presiona botones en el teclado, podrá ver lo que hacen.

A continuación, queremos hacer un amplificador de voltaje. Resulta que la fila inferior de teclas en el teclado (así como la tecla de rellamada) están emitiendo un voltaje demasiado bajo para disparar la interrupción INT0. El puerto analógico es lo suficientemente sensible para leer los voltajes bajos de estas teclas, pero nuestro pin de interrupción no obtiene un borde ascendente lo suficientemente bueno como para interrumpir cuando presionamos esas teclas. Por lo tanto, nos gustaría alguna forma de asegurarnos de que un buen flanco ascendente de voltaje llegue a PD4 pero el mismo bajo voltaje llegue a ADC0. Esta es una tarea bastante difícil ya que ambas señales provienen del mismo cable de salida de nuestro teclado. Hay varias formas sofisticadas de hacer esto, pero ya no vamos a usar nuestro teclado después de este tutorial, así que vamos a juntar un método que funcione (apenas).

Primero debe conectar un botón externo para reemplazar la interrupción INT0 y controlar la pantalla manteniendo presionada una tecla en el teclado y haciendo clic en el botón. Esto tiene menos problemas con el teclado y le permitirá estar seguro de que sus voltajes están configurados correctamente en la tabla de consulta del teclado. Una vez que sepa que el teclado está cableado correctamente, elimine el botón y vuelva a colocar la interrupción INT0. Hay algunos problemas graves de ruido y voltaje al controlar el teclado de esta manera, por lo que es bueno saber que todo funciona para que los problemas futuros puedan aislarse en la tecla INT0.

Cuando conecta su teclado y su amplificador de voltaje, es muy probable que los mismos valores de resistencia que he usado no funcionen. Por lo tanto, tendrá que experimentar un poco para obtener valores que funcionen para usted.

Si miras el diagrama que he adjuntado a este paso, verás cómo va a funcionar el amplificador de voltaje. Usamos algunas resistencias y dos transistores. La forma en que funcionan los transistores (¡consulte las hojas de datos!) Es que hay un voltaje mínimo que debe ingresar al pin de la base en el transistor (el pin del medio) que lo saturará y permitirá que la corriente fluya entre el pin del colector y el emisor alfiler. En el caso del transistor 2N3904 que estamos usando aquí, el voltaje es 0.65V. Ahora estamos tomando ese voltaje de nuestra salida del teclado y no queremos cambiar esa salida, así que colocaremos una gran resistencia entre la salida del teclado y la base del primer transistor (usé 1Mohm). Lo he etiquetado como R_1 en el diagrama. Luego, queremos configurar un divisor de voltaje para que la base del transistor ya esté "casi" a 0.65 voltios y solo un poquito más lo empuje hacia arriba y lo sature. Ese pequeño bit saldrá de la salida del teclado cuando presionemos un botón. Dado que las teclas inferiores del teclado solo emiten un pequeño voltaje, debemos estar muy cerca de la saturación para que sean suficientes. Los resistores del divisor de voltaje están etiquetados como R_a y R_b en el diagrama. Usé R_a = 1Mohm y R_b = 560Kohm, pero es casi seguro que tendrás que jugar con estos números para hacerlo bien para tu configuración. Es posible que desee tener una pared cerca para golpearse la cabeza y dos o tres vasos de whisky a mano (recomendaría Laphroaig, caro, pero vale la pena si le gusta fumar. Si las cosas se ponen realmente locas, consiga una jarra de BV y acomódese para la noche)

Ahora veamos cómo los transistores nos van a dar un buen flanco ascendente al entrar en la tecla INT0 y generar nuestra interrupción de pulsación de tecla. Primero veamos lo que sucede cuando no estoy presionando una tecla. En ese caso, el primer transistor (etiquetado como T1 en el diagrama) está apagado. Por lo tanto, no fluye corriente entre los pines del colector y del emisor. Por lo tanto, la base del otro transistor (etiquetado como T2) se elevará y, por lo tanto, se saturará permitiendo que la corriente fluya entre sus pines. Esto significa que el emisor de T2 se reducirá ya que está conectado al colector, que a su vez está conectado a tierra. Por lo tanto, la salida que va a nuestro pin de interrupción de pulsación de tecla INT0 (PD4) será baja y no habrá interrupción.

Ahora, ¿qué pasa cuando presiono una tecla? Bueno, entonces la base de T1 va por encima de 0,65 V (en el caso de las teclas inferiores, ¡apenas sube por encima!) Y luego se permitirá que fluya la corriente, lo que llevará la base de T2 a un voltaje bajo y esto apagará T2. Pero vemos que cuando T2 está apagado, la salida se eleva y, por lo tanto, obtendremos una señal de 5V que va a nuestro pin INT0 y causará una interrupción.

Observe cuál es el resultado neto aquí. Si presionamos la tecla 1, obtenemos 5V yendo a PD4 sin cambiar significativamente la salida yendo a ADC0, y lo que es más importante, incluso si presionamos Asterisk, 0, Hash o Redial, también obtenemos una señal de 5V yendo a INT0 y también causando una interrupción! Esto es importante ya que si pasamos directamente de la salida del teclado al pin INT0, esas teclas casi no generan voltaje y no serán suficientes para activar ese pin de interrupción. Nuestro amplificador de voltaje ha resuelto este problema.

Paso 7: código de visualización de 4 dígitos y video

¡Eso es todo por el tutorial 9! Adjunto el código y un video que muestra la operación.

Esta será la última vez que usaremos el teclado analógico (gracias a Dios). Fue difícil de usar, pero también fue muy útil para ayudarnos a aprender sobre la conversión de analógico a digital, puertos analógicos, interrupciones, multiplexación, filtros de ruido, amplificadores de voltaje y muchos aspectos de la codificación de ensamblaje, desde tablas de búsqueda hasta temporizadores / contadores., etc. Por eso decidimos usarlo. (además, es divertido buscar cosas).

Ahora veremos la comunicación nuevamente y obtendremos nuestras pantallas de 7 segmentos y 4 dígitos para leer nuestras tiradas de dados de nuestro rodillo de dados de la misma manera que lo hicimos con nuestro analizador de registros. Esta vez usaremos la interfaz de dos cables en lugar de nuestro método de código morse pirateado.

Una vez que tenemos las comunicaciones funcionando y los rollos apareciendo en las pantallas, finalmente podemos hacer la primera pieza de nuestro producto final. Notará que sin todas las cosas del puerto analógico, nuestro código será significativamente más corto y probablemente más fácil de leer.

Para aquellos de ustedes que son ambiciosos. Aquí hay un "proyecto" que podría probar y que ciertamente tiene el conocimiento para hacer en este punto si ha seguido todos estos tutoriales hasta este punto:

Proyecto: ¡Haz una calculadora! Utilice nuestra pantalla de 4 dígitos y nuestro teclado y agregue un botón externo que actuará como una tecla "enter". Asigne el asterisco a "tiempos", el hash para "dividir" la remarcación a "más" y el destello a "menos" y escriba una rutina de calculadora que actúe como una de esas viejas calculadoras HP de "pulido inverso" que tenían todos los ingenieros. en mis tiempos. Es decir. la forma en que funcionan es que ingresas un número y presionas "Enter". Esto empuja ese número a la pila, luego ingresa un segundo número y presiona "enter", lo que empuja el segundo número a la pila. Finalmente, presiona una de las operaciones como X, /, + o - y aplicará esa operación a los dos números superiores de la pila, mostrará el resultado y empujará el resultado a la pila para que pueda usarlo nuevamente si igual que. Por ejemplo, para agregar 2 + 3, haría: 2, "ingrese", 3, "ingrese", "+" y la pantalla leerá 5. Usted sabe cómo usar la pila, la pantalla, el teclado y usted tener la mayor parte del código de fondo ya escrito. Simplemente agregue la tecla enter y las subrutinas necesarias para la calculadora. Es un poco más complicado de lo que podría pensar al principio, pero es divertido y factible.

¡Hasta la próxima!

Recomendado: