¡El experto en contestador automático que sabe cómo ensamblar el microcontrolador AT89S52 ya está aquí!
LED1 EQU 30H; Definir tubo digital 1 para visualizar variables numéricas
LED2 EQU 31H; Definir tubo digital 2 para visualizar variables numéricas
LED3 EQU 32H; tubo digital 3 Mostrar variables numéricas
LED4 EQU 33H; Defina el tubo digital 4 para mostrar variables digitales
LedT0 EQU 34H Defina qué marca de tubo digital se muestra actualmente
ORG 0000H; Iniciar
LJMP START;Ingresar al programa principal
ORG 000BH;Ingresar la interrupción del temporizador 0
LJMP INT_TO
ORG 0030H
INICIO:
MOV SP,#60H;Inicializar puntero de pila
MOV TMOD,#01H;Establecer T0 en modo de temporización de 16 bits.
MOV TH0,#0F6H ;Inicializa el temporizador en 2.
MOV TL0,#03BH ;
SETB TR0 ;Inicia el conteo del temporizador 0
SETB ET0; Habilitar interrupción del temporizador 0
CLR TF0; Borrar indicador de interrupción del temporizador 0
SETB EA; Habilitar interrupción general
MOV LedT0, #1H; Inicialice el indicador LED para que el tubo digital 1 se muestre por primera vez en la interrupción
MOV DPTR, #TABLE Inicialice el puntero de datos DPTR
MAIN:
< p; >MOV LED1,#10h; Inicialice los valores de 4 tubos digitales y los 4 tubos digitales comenzarán a mostrar "".MOV LED2,#10h
MOV LED3,#10h
MOV LED4,#10h
SCAN: ;Lazo principal, presione Presione SW5 una vez, el valor del tubo digital No. 4 aumenta en 1
JB P3.3, ¿tecla SCAN1?
CALL DELAY10MS ;Vaya a la fluctuación del botón
JB P3.3,SCAN1 ;Confirmar nuevamente
MOV P1,#0FEH ;Encienda el LED del puerto P1
MOV LED3,#0H; Display 01 a los dos tubos digitales
MOV LED4,#1H
CPL P2.3 ;Sonido de zumbador
LLAMADA D100MS
CPL P2.3
LCALL SCAN4 ;Esperando borrar el estado de captura de llamadas
JNB P3.3,$ ;Esperando liberar el botón
SCAN1:
JB P3.4, SCAN2 ;¿Botón presionado?
CALL DELAY10MS ;Ir a fluctuación de tecla
JB P3.4,SCAN2 ;Confirmar nuevamente
MOV P1,#0FDH
MOV LED3,#0H
MOV LED4,#2H
CPL P2.
LLAMADA D100MS
CPL P2.3
LCALL SCAN4
JNB P3.4,$ ;Esperando para soltarme
SCAN2:
JB P3.5,SCAN3 ;¿Tienes una llave?
CALL DELAY10MS ;Ir a fluctuación de tecla
JB P3.5,SCAN3 ;Confirmar nuevamente
MOV P1,#0FBH
MOV LED3,#0H
MOV LED4,#3H
CPL P2.
LLAMADA D100MS
CPL P2.3
LCALL SCAN4
JNB P3.5,$ ;Esperando para soltarme
SCAN3:
JB P3.6,SCAN ;¿Tienes una llave?
CALL DELAY10MS ;Ir a fluctuación de tecla
JB P3.6,SCAN ;Confirmar nuevamente
MOV P1,#0F7H
MOV LED3,#0H
MOV LED4,#4H
CPL P2.3
LLAMADA D100MS
CPL P2.3
LCALL SCAN4
JNB P3.6,$ ;Esperar a soltar
LJMP SCAN
SCAN4: ;Lazo principal, tecla SW5 presionada una vez, el dígito 4 aumenta en 1
JNB P3.7,SCAN4 ;¿Hay alguna tecla presionada?
CALL DELAY10MS ;Ir a fluctuación de teclas
JB P3.7,SCAN4 ;Confirmar nuevamente
MOV P1,#0FFH
MOV LED3,#10
H
MOV LED4,#10H
CPL P2.3
LLAMADA D100MS
CPL P2.3
JNB P3.7,$ ;espera para soltar
LJMP SCAN
D100MS:
MOV R0,#10
D100 :CALL DELAY10MS
DJNZ R0,D100 <
RET
delay10ms:; función de retardo, retardo 10ms
mov r7,#20
d1:mov r6,#250
djnz r6,$
djnz r7,d1
ret
INT_TO: ;Controlador de interrupciones del temporizador 0. Controlador de interrupciones del temporizador 0
PUSH ACC ;Proteger campo
PUSH PSW
CLR TF0 ;Borrar indicador de interrupción del temporizador 0
MOV TH0, #0F6H ;Reinicializa el temporizador 2.5MS
MOV TL0,#03BH ;
MOV LED1 ;Si el bit de bandera es igual a 1, procesa la salida de visualización del tubo digital 1
MOVC A,@A+DPTR; Utilice el valor de la variable LED1 para obtener la tabla, de modo que la salida del tubo digital 1 sea el valor del tubo digital LED1
MOV P0,A; Cambie el valor de la tabla de búsqueda. El valor se envía al puerto P0, de modo que el valor de visualización del tubo digital 1 sea LED1
CLR P2.4 Encienda la pantalla LED1
>MOV LedT0,#2; Cambie el indicador LED a 2, la siguiente interrupción manejará la visualización LED2
LJMP INT_T0_END Salta a la posición final de la interrupción de la pantalla LED
INT_T0_2; :
MOV A,LedT0;Entregue LedT0 a A para que lo juzgue
CJNE A,#2,INT_T0_3 ;Si el bit de bandera no es igual a 2, salte al final de el programa de visualización del tubo digital 3
MOV A,LED2; el mismo proceso que el tubo digital 1
MOV A,@A+DPTR
MOV A ,@A+DPTR
MOV P0 ,A
CLR P2.5
MOV LedT0,#3 ;Cambia el bit de bandera del tubo digital a 3 , y la siguiente interrupción procesará la visualización del tubo digital 3
LJMP INT_T0_END
INT_T0_3:
MOV A,LedT0; tubo a A, que es LedT0. Entregue LedT0 a A para prepararse para el juicio.
CJNE A, #3, INT_T0_4 Si el bit de bandera no es igual a 3, salte al programa de visualización del tubo digital 4;
MOV A, LED3 ; El mismo procesamiento que el del tubo digital 0
MOVC A,@A+DPTR
MOV P0,A
CJNE A,@A+DPTR
CJNE A,@A+DPTR
MOV P0,A