Cronómetro del botón MCU

Programa de diseño de cronómetro

Utilice 89C51, oscilador de cristal externo, circuito de reinicio, dos tubos digitales y dos botones para hacer un cronómetro electrónico. El requisito específico es utilizar los botones para iniciar y detener el reloj electrónico, y. Los botones se pueden utilizar para diseñar el tiempo de cuenta atrás (como 10S, 20S, 60S) e iniciar la función de cuenta atrás. Una de las dos funciones anteriores se puede seleccionar usando los botones.

3. Código de programa:

A_BIT EQU 20H; El dígito de las unidades del tubo digital se almacena en la ubicación de la memoria.

B_BIT EQU 21H; del tubo digital se almacena en la ubicación de la memoria

TEMP EQU 22H; el valor del contador se almacena en la ubicación de la memoria de inicialización

MOV P3, #0FFH; puerto y configúrelo en nivel alto para la entrada clave

MOV P0, #0FFH Apague el tubo digital de visualización de tiempo

CLR F0

CLR F1

MOV DPTR, #NUMTAB; Especificar Buscar la dirección inicial de la tabla

; esperar la entrada clave

; .

MOV P3, #0FFH; Inicialice el puerto P3, configúrelo en nivel alto y espere la entrada clave

MOV P0, #0FFH Apague el tubo digital de visualización de la hora

INICIO: JB P3.6, ciclo INICIO1; para determinar si se presiona el botón de inicio K1.

ACALL DELAY10; retraso de 10 milisegundos para desactivación de contacto

JB P3.6, INICIO; regreso si hay interferencia

JNB P3.6, $; para que se suelte el botón

LJMP GN1; Función 2 INICIO1 Si se presiona el botón 2: JB P3.7, INICIO; ¿Se presiona el botón de inicio K2?

ACALL DELAY10; Retraso de 10 milisegundos para desactivación de contacto

JB P3.7, START1; retorno si hay interferencia

JNB P3.7, $

LJMP GN2; Programa de tiempo del cronómetro con pantalla de tubo digital

GN1: ;Inicializar primero

S1: MOV A, #0

MOV TEMP , A

GOON1: MOV R2, #2

JS1: MOV R3, #250

TIME1: MOV A, TEMP Cambiar dieciséis en TEMP Convertir número base a decimal; número

MOV B, #10; 10 número decimal/10 =DIV AB

MOV B_BIT, A; el décimo dígito está en A

MOV A_BIT, B; el primer dígito está en B LCALL DPLOP1; inserte segmentos durante el proceso de sincronización para determinar si hay entrada clave

C1: JB P3.6, B1

ACALL DELAY10; 10 milisegundos

JB P3.6, C1

JNB P3.6, $; esperar a que se suelte la tecla

CPL F0

ZT1 : ; MOV P3, #0FFH; Inicialice el puerto P3 y configúrelo en nivel alto para la entrada clave

JB P3.6, $; ¿Bucle para determinar si se debe presionar el botón de inicio K1?

ACALL DELAY10; retardo de rebote de contacto de 10 ms

JB P3.6, ZT1; regresa si hay interferencia

JNB P3.6, $; suelte

LCALL DPLOP1

B1: JB P3.7, LOOP1

ACALL DELAY10; retraso de 10 milisegundos

JB P3. B1

JNB P3.7, $; esperando que se suelte el botón

AJMP OVERLOOP1: DJNZ R3, TIME1; 250 ciclos en 2 milisegundos, aproximadamente 0,5 segundos

DJNZ R2, JS1; ejecución del bucle 2 veces, el tiempo es 1 segundo INC TEMP; un segundo completo al tiempo más 1

MOV A, TEMP

CLR C

SUBB A, #60

JNZ GOON1; determina si el valor de TEMP es 60 ¿No es 60 bucle

ACALL?

OVER

JB P3.7, B1

JNB P3.7, $; esperar a que se suelte la tecla

AJMP OVERLOOP2: DJNZ R3, TIME2; 250 veces, aproximadamente 0,5 segundos cada vez

DJNZ R2, JS2; realice un ciclo 2 veces DEC TEMP en 1 segundo. El tiempo disminuye en 1 después de un segundo completo

MOV A, TEMP<. /p>

JNZ GOON2; determina si el valor TEMP es 0, no 0 bucle

ACALL OVER

RET

; >

OVER: AJMP START; vuelve al estado de inicialización de encendido;

AJMP START.Subrutina de retardo de 1 ms

DELY1: MOV R4, #2

D1: MOV R5, #248

DJNZ R5, $

DJNZ R4, D1

RET subrutina de retardo de 10 ms

RETARDO10: MOV R4, #20