Cronómetro del botón MCU
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 p>
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 p>
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