La Red de Conocimientos Pedagógicos - Conocimientos universitarios - Papel de calculadora simple de 51 microcontroladores

Papel de calculadora simple de 51 microcontroladores

ORG 0000H

Primera versión: MOV 78H, # 0; Inicialización: 78H contiene 0 código y el resto.

MOV 79H, #10

MOV 7AH, #10

MOV 7BH, #10

MOV 7CH, #10 p>

MOV 7DH, #10

MOV R5, # 0; R5 es el número de pulsaciones de teclas, inicialmente establecido en 0.

MOV 30H, # 0; 30H es la unidad de almacenamiento de la tecla de función, establecida en 0.

MOV 40H, #0; La unidad 40H está inicialmente configurada en 0.

MOV 41H, #0; la celda 41H está inicialmente configurada en 0.

Bucle: LCALL DIR

LCALL KEY

INC R5

Rutina de dispersión para determinar qué tecla se presionó.

S1: CJNE A, #10, S2; si no es la tecla "+", salta a S2.

LJMP es divertido; es el botón "+" para saltar a la diversión.

S2: CJNE A, #11, S3; si no es la tecla "-", salta a S3.

LJMP es divertido; es la tecla "-" para saltar a DIVERSIÓN.

S3: CJNE A, #12, S4; si no es la tecla "*", salta a S4.

LJMP es divertido; es la tecla "*" para saltar a DIVERSIÓN.

S4: CJNE A, #13, S5; si no es la tecla "/", salta a S5.

LJMP es divertido; es la tecla "/" para saltar a DIVERSIÓN.

S5: CJNE A, #14, S6; si no es la tecla "=", salta a S6.

LJMP es divertido; solo usa la tecla "=" para saltar y divertirte.

S6: CJNE A, #15, n 1; no la tecla "CL", salta a N1.

Se inicia LJMP; es la tecla "CL" y se inicia el salto.

N1: CJNE R5, #1, N2; determinar el número de veces que se presiona el botón

LJMP D11

N2: CJNE R5, #2, N3

p>

LJMP T2

N3:CJNE R5, #3, N4

LJMP T3

N4: CJNE R5, #4, N5

p>

LJMP T4

N5:CJNE R5, #5, N6

LJMP T5

N6 : CJNE R5, #6, inicio

p>

LJMP T6

MOV·R4

MOV 78H, A el valor de entrada se envía al bit de visualización; buffer.

MOV 79H, #10

MOV 7AH, #10

MOV 7BH, #10

MOV 7CH, #10 p>

MOV 7DH, #10

bucle LJMP

T2:MOV·R7

MOV B, #10

R4 MOV

MUL AB

Agregar A, R7

MOV·R4

MOV 7AH, #10

MOV 7BH, #10

MOV 7CH, #10

MOV 7DH, #10

MOV 79H, 78H uno a diez.

MOV 78H, R7; el nuevo número es de un dígito.

Bucle LJMP

T3:MOV R7, A

MOV B, #10

R4 MOV

MUL AB

Agregar A, R7

MOV·R4

MOV 7BH, #10

MOV 7CH, #10

MOV 7DH, #10

MOV 7AH, 79H diez a cien

MOV 79H, 78H uno a diez.

MOV 78H, R7; el nuevo número es de un dígito.

Bucle LJMP

T4:MOV·R7

MOV B, #10

R4 MOV

MUL AB

Agregar A, R7

MOV·R4

MOV 7CH, #10

MOV 7DH, #10

MOV 7BH, 7AH

MOV 7AH, 79H

MOV 79H, 78H

MOV 78H, R7

Carretera de circunvalación LJMP

T5:MOV R7, A

MOV B, #10

R4 MOV

MUL AB

Añadir A, R7

MOV·R4

MOV 7DH, #10

MOV 7CH, 7BH

MOV 7BH, 7AH

MOV 7BH, 7AH< / p>

MOV 7AH, 79H

MOV 79H, 78H

MOV 78H, R7

bucle LJMP

T6 :MOV R7, A

MOV B, #10

R4 MOV

MUL AB

Agregar A, R7

MOV·R4

MOV 7DH, 7CH

MOV 7CH, 7BH

MOV 7BH, 7AH

MOV 7AH, 79H

MOV 79H, 78H

MOV 78H, R7

bucle LJMP

MOV 7CH, 7BH

MOV 7BH, 7AH

MOV 7AH, 79H

MOV 79H, 78H

MOV 78H, R7

Bucle LJMP

Diversión: MOV 78H, #10

MOV 79H, #10

MOV 7AH, #10

MOV R0, 30h con el último Intercambio de teclas de función;

MOV 30H, A

MOV A, R0

CJNE A, #10, diversión 1; tecla de función de juez

LJMP ADDY "+"

FUN1:CJNE A,#11,FUN2

LJMP SUBT;"-"

FUN2:CJNE A,#12, FUN3

LJMP MULT;"*"

FUN3:CJNE A, #13, FUN4

LJMP DIVI"/"

FUN4 :CJNE A , #14, FUN5 Presione la tecla de función por primera vez, es decir, A=#0.

LJMP EQUA"="

FUN5:MOV 40H, R4; guardar el primer número

MOV R5, # 0; borrar el número de pulsaciones de teclas

p>

p>

LJMP BCD lo descompone en código bcd para su posterior visualización.

: LJMP inicia; procesamiento de desbordamiento

Eddie: MOV A, el primer número de 40H se envía al acumulador

Suma uno, R4; un segundo número

JB CY, OF; desbordamiento

MOV 40H, A; guardar este resultado

MOV R5, # 0; >

LJMP BCD

SUBT:MOV A, 40H

R4 SUBB

JB CY, OF

MOV 40H, A

MOV R5, #0

LJMP BCD

MULT:MOV A, 40H

Bahía MOV

R4 MOV

MUL AB

JB OV

MOV 40H, A

MOV R5, #0

LJMP BCD

DIVI:DIVI A·R4

Bahía MOV

MOV A, 40H

División AB

JB OV

MOV 40H, A

MOV R5, #0

LJMP BCD

Ecuación: MOV R5, #0

LJMP BCD

BCD: MOV B, #10

MOV A, 40H El resultado se envía al acumulador.

Divide el resultado de DIV AB por 10

MOV 41H, A; almacena temporalmente "negocios"

MOV A, B toma un dígito

MOV 78H, A; el número de unidad enviado al búfer de visualización.

MOV A, 41H

Regresión JZ; el resultado es de un solo dígito, devuelve LOOP.

MOV B, #10

MOV A, 41H

División AB

MOV 41H, A

MOV A, B

MOV 79H, A; búfer de visualización de diez dígitos

MOV A, 41H

Regresión JZ; , esto devolverá el bucle.

MOV 7AH, A; caché de visualización de transmisión de cientos de dígitos

Retorno: bucle LJMP

subrutina de visualización dinámica

Director: MOV·; DPTR, #TAB dirección de encabezado de decodificación de tubo digital

MOV R0, #78H dirección de bits del buffer a mostrar

MOV A, #0FEH señal de selección de bits unitarios

p >

MOV R1, A

LD1:MOV A, @R0

MOVC A, @ A+DPTR; consultar tabla

MOV P2, r 1; * * *La selección de bits de palabra del tubo de ánodo se envía al puerto P2.

MOV P0,A; el código de campo se envía al puerto P0.

LCALL retardo 1 ms; ajuste de retardo subrutina 1 ms

INC R0R0 apunta al siguiente módulo.

MOV A, r 1;

JNB ACC.5, LD2 determina si se envían 6 dígitos.

RL A; apunta al siguiente bit

MOV R1, A; la señal de selección de bit se almacena nuevamente en R3.

SJMP LD 1; salta para mostrar el siguiente número.

LD2:RET; regresa después de enviar 6 números.

TAB:DB 0C0H, 0F9H, 0A4H, 0B0H, 099H, 092H, 082H, 0F8H, 80H, 90H, 0FFH* * *Tabla de decodificación de ánodos

Retraso 1 milisegundo: MOV R6 , 2do

LOOP1: MOV R7, #248

no se proporciona lo contrario a menos que se especifique lo contrario

Bucle 2: DJNZ R7, Loop 2

>

DJNZ R6, LOOP1

Remojar en agua para suavizar

TECLA: LCALL KS; subrutina de tecla de detección de llamadas

JNZ k 1; para continuar.

LCALL DELAY2 rebote de retardo de llamada con tecla sin llave

Pantalla dinámica de llamada ACALL DIR

tecla AJMP para regresar al botón de detección continua

k 1; :LCALL retardo 2; hay una fluctuación de retardo del botón.

LCALL KS luego llama a la subrutina de detección perla-perla.

JNZ K2 confirma que hay un botón para pasar al siguiente paso.

Pantalla dinámica de llamada ACALL DIR

Tecla AJMP; presione la tecla No para regresar y continuar con la detección.

K2:MOV R2, # 0EFH envía el valor escaneado a R2 para su almacenamiento temporal.

MOV R3, #00H envía el valor de la primera columna a R3 para su almacenamiento temporal.

K3:MOV P1, R2; envía el valor de R2 al puerto P1.

L0:JB P1.0, l 1; P1.0 es igual a 1. Salta a L1.

MOV A,#00H envía la primera línea de valores a ACC.

AJMP LK salta al controlador de valores clave

L1:JB P1.1, L2; P1.1 es igual a 1 y salta a L2.

MOV A, #04H envía el valor de la segunda fila a ACC.

AJMP LK salta al controlador de valores clave

L2:JB P1.2, L3; P1.2 es igual a 1 y salta a L3.

MOV A, #08H envía el valor de la tercera línea a ACC.

AJMP LK salta al controlador de valores clave

L3:JB P1.3, siguiente; P1.3 es igual a 1 para saltar a la página siguiente.

MOV A, # 0CH envía el valor de la cuarta línea a ACC.

LK: agregue uno, R3; se envía el valor clave después de agregar el valor de la fila y el valor de la columna.

Envíe el valor en ACC a la pila para almacenamiento temporal.

K4:LCALL retardo 2; llama al programa antirrebote de retardo.

LCALL KS llama al programa de detección de claves

JNZ K4; la clave no se suelta y continúa volviendo al estado de detección.

POP ACC envía valor de pila a ACC

MOV·DPTR,#keyboard

MOVC A,@A+DPTR

Remojo en agua Hacer suave

Siguiente: se envía el valor de la columna INC R3 más 1

MOV A, R2;

JNB acelera 7, ajusta; después de escanear, ve a la tecla para el siguiente escaneo.

RL A; El escaneo aún no se ha completado. Mueva el valor una posición hacia la izquierda para escanear la siguiente columna.

MOV·R2; Envía el valor ACC a R2 para almacenamiento temporal.

AJMP K3 salta a K3 para continuar.

KS:MOV P1, # 0FH establece P1, los cuatro bits superiores son 0 y los cuatro bits inferiores son 1.

MOV A, p 1; leer el puerto P1.

XRL A,#0FH distingue el valor en del valor en o

La subrutina RET devuelve

KEYTAB: DB 1, 2, 3, 10, 4 , 5, 6, 11, 7, 8, 9, 12, 15, 0, 14, 13; tabla de valores clave

Retraso 2: MOV R6, # 2H Subprograma de antirrebote de retardo

LP1: MOV R7, #0FAH

LP2: DJNZ R7, LP2

DJNZ R6, LP1

Remojar en agua para suavizar

p>

Fin