Red de conocimiento informático - Consumibles informáticos - Titlelt;lt;Diseño e implementación de recordatorio de cuenta regresiva para competencia basado en microcomputadora de un solo chip (STC89C52)gt;gt;, por favor ayúdenme a escribir el programa de programación necesario

Titlelt;lt;Diseño e implementación de recordatorio de cuenta regresiva para competencia basado en microcomputadora de un solo chip (STC89C52)gt;gt;, por favor ayúdenme a escribir el programa de programación necesario

; lo adapté del sitio web del Laboratorio de Producción Electrónica. El diagrama del circuito es el de la placa de prueba de 51 microcontroladores, siempre que el LED P1.0, el botón de dial de 4 dígitos, el zumbador, K1 y. K2 se conservan. Un sistema mínimo de interruptores, circuitos de visualización, circuitos estabilizadores de voltaje y microcontroladores es suficiente.

; un temporizador de cuenta regresiva que puede configurar la hora, puede elegir 5/15/20/30/35/ Cuenta regresiva de 45/50 minutos

p>

;El tiempo de cuenta regresiva se controla mediante los 2/3/4 dígitos del interruptor DIP de cuatro dígitos,

;El segundo dígito indica 5 minutos, el tercer dígito indica 15 minutos y el cuarto dígito indica 30 minutos.

Se puede generar una cuenta regresiva de 5/15/20/30/35/45/50 minutos mediante diferentes combinaciones

; p>

; El diodo emisor de luz externo del puerto P1.0 es el LED de estado, el LED siempre está encendido cuando el cronometraje no ha comenzado y el LED parpadea durante el proceso de cronometraje

; K1 es el botón de inicio, K2 es el botón de parada

a_bit?equ?20h?; tubo digital El dígito se almacena en la ubicación de la memoria

b_bit?equ?21h?; las decenas de dígitos del tubo digital se almacenan en la ubicación de la memoria

temp?equ?22h?; el valor del contador se almacena en la ubicación de la memoria

;Inicialización de encendido

MOV?P3, #0FFH; inicializa el puerto P3, configurado en nivel alto para entrada clave

MOV?P0, #0FFH Uso El tubo digital de visualización de tiempo se apaga

<; p>CLR?P1.0; enciende el indicador LED

; espera la entrada del teclado

INICIO: JB?P3.6, $ Bucle para determinar si el botón de inicio K1 está presionado?

ACALL?DELAY10; Retraso de 10 milisegundos para el rebote del contacto

JB?P3.6, INICIO Si hay interferencia, regresa

JNB?P3; .6, $; Espere a que se suelte el botón

; Lea el estado del interruptor DIP para obtener el tiempo de cuenta regresiva

SET: MOV?A, # 0; A

JB?P2.0, A1; determine si el segundo bit del interruptor DIP está activado. Si está activado, agregue 5 a A (el valor aquí puede modificarlo usted mismo). /p>

ADD?A, #5

A1: JB?P2.1, A2; determine si el tercer bit del interruptor DIP está activado. Si está activado, agregue 15. a A (este valor lo puede modificar usted mismo)

ADD?A, #15

A2: JB?P2.2, A3 determina si el cuarto bit del DIP; El interruptor está activado, actívelo. Simplemente agregue 30 a A (el valor aquí puede modificarlo usted mismo)

ADD?A, #30

A3: MOV?TEMP, A

; en este momento el valor en TEMP es el tiempo de cuenta regresiva

El programa para mostrar el tiempo en el tubo digital

pantalla: CLR?P2 .4; libera el relé 1 e inicia el cronometraje (el relé está en estado de succión cuando se enciende la alimentación) Estado cerrado) (Dado que está utilizando un recordatorio de cuenta regresiva para la competencia, no necesita un relé y puede ignorarlo)

CLR?P2.3; libera el relé 2 y inicia el tiempo (el relé está en estado cerrado al arrancar)

MOV?R2, #120

AB: MOV?R3, #250

TIME1: mov?a, temp?; Cambiar el valor hexadecimal en temp ¿Convertir números del sistema a decimal?

mov?b, #10 ?; Decimal/10=decimal

div?ab

mov ?b_bit, a?; El dígito de las decenas está en a

mov?a_bit, b? ; El dígito de las unidades está en b

mov?dptr, #numtab?; Especifique la dirección inicial de la búsqueda en la tabla

mov?r0,#4;

?

dpl1: ?mov?r1, #250?;

dplop: ?mov?a, a_bit?; Toma el dígito único

MOVC?A , @A DPTR?; Verifique el código de 7 segmentos del dígito único

mov?p0, a?; Envíe el código de 7 segmentos del dígito único

clr?p2 .7?;Abrir visualización de dígitos de unidades

ACALL?DELY1; Visualización durante 1 milisegundo

setb?p2.7; Desactivar visualización de dígitos de unidades para evitar imágenes fantasma

mov?a, b_bit ?;Obtener el dígito de las decenas

MOVC?A,@A DPTR?;Comprueba los 7 segmentos del dígito de las decenas

mov?p0,a?; Enviar los 7 segmentos del código de las decenas

clr?p2.6?; activar la visualización de las decenas

ACALL?DELY1 durante 1 milisegundo

setb?p2.6; Desactive la visualización de decenas de dígitos para evitar imágenes fantasma

; inserte un segmento de programa para determinar si hay entrada clave durante el proceso de cronometraje

C1: JB? .6, B1

ACALL? DELAY10; Retraso de 10 milisegundos para eliminar la fluctuación

JB?P3.6, C1

JNB?P3.6, $; Espere a que se suelte el botón

AJMP? SET

B1: JB?P3.7, M33

ACALL?DELAY10;

JB?P3.7, B1

p>

JNB?P3.7, $; Espere a que se suelte el botón

AJMP?OVER

M33: djnz?r3, TIME1?; Ejecución del bucle 250 veces en 2 milisegundos, el tiempo es de aproximadamente 0,5 segundos

CPL?P1.0; Haga que el LED parpadee una vez cada 1 segundo

djnz?r2, AB?; Ejecución del bucle 120 veces, el tiempo es 1 minuto

DEC?TEMP; Resta 1 del tiempo de tiempo después de un minuto.

MOV?A, TEMP

JNZ?DISPLAY; Determinar si el valor de TEMP es 0? ¿No es 0? ¿Ciclo?

; Finalizar el tiempo

OVER: CLR? P1.0; la luz indicadora LED está siempre encendida

SETB?P2.4; el relé 1 está cerrado. Cuando finaliza el temporizador, vuelve al estado en el que estaba encendido

SETB?P2.3; El relé 2 se cierra, cuando finaliza el temporizador, vuelve al estado en el que se encendió

SETB?P2.5; una bocina que sonará cuando se acabe el tiempo programado. Por supuesto, también puedes personalizar algunos métodos de recordatorio

ACALL?DELAY10;

ACALL?DELAY10;

ACALL?DELAY10;

ACALL?DELAY10;

ACALL?DELAY10;

AJMP?START Volver al estado de inicialización de encendido

<; p>; subrutina de retardo de 1 milisegundo

DELY1: MOV?R4, #2

D1: MOV?R5, #248

DJNZ?R5, $

DJNZ?R4, D1

RET

; subrutina de retardo de 10 milisegundos

DELAY10: MOV?R4, #20

D2: MOV?R5, #248

DJNZ?R5, $

DJNZ?R4, D2

RET

; El código de visualización negativo del tubo digital de 7 segmentos de 0 a 9 en el tablero experimental

numtab:?DB?0CFH, 03H, 5DH, 5BH, 93H, 0DAH, 0DEH, 43H, 0DFH, 0DBH

fin