TICK EQU 10000
T100US EQU 156
LEDBUF EQU 20H
C100US EQU 30H
DBUF EQU 40H
TEMP EQU 50H
COUNT EQU 60H
BUFSTORE EQU 61H
DIN BIT P3.4
CLK BIT P3.5
//////////Constante de tiempo////
ORG 0000H
LJMP PRINCIPAL
////Transferir al programa principal///
ORG 000BH
////Interrumpir entrada/////////
LJMP T01NT
ORG 1000H
///Los siguientes criterios clave ///
K00: ACALL DELAY
MOV A , P1
CJNE A, #0FFH, K01
LLAVE LJMP
K01: CJNE A, #0FEH, K02
CPL 21H .0
CLAVE LJMP
K02: CJNE A, #0FDH, K03
CPL 21H.1
LLAVE LJMP
K03: CJNE A, #0FBH, LLAVE
CPL 21H.2
LLAVE LJMP
T01NT:
PUSH PSW ///Empujar en la pila
MOV A, C100US 1
JNZ GOON //A no es 00H y saltar para ejecutar GOON
DEC C100US
GOON:
DEC C100US 1
MOV A, C100US
ORL A, C100US 1
SALIDA JNZ //Si el contador no es cero, devuelve
MOV C100US, #4EH
MOV C100US 1, #20H ///Tiempo 2 segundos
CLAVE: MOV P1, #0FFH //Configuración de la interfaz P1
MOV A, P1
CJNE A, #0FFH, K00 ///Ir al criterio de clave
CLR C
MOV C, 21H.2 //Modo de evaluación
JNC MODE //Modo de evaluación,
CY es cero y entra en alternancia de ciclo
MOV LEDBUF, BUFSTORE
MOV C, 21H.1 //Juzga la velocidad
JNC OUTPHL //Juzga la velocidad , CY Si es cero, transfiera a alta velocidad
CLR C
MOV C, 21H.0 //Juicio de dirección
JNC OUTPSR //Juzgar dirección, si CY es cero, transfiera a alta velocidad Muévase lentamente hacia la derecha
OUTPSL: //Muévase lentamente hacia la izquierda
SETB 21H.0
SETB 21H.1 p>
MOV A , LEDBUF
RL A
MOV LEDBUF, A
MOV BUFSTORE, LEDBUF
INICIO1: / //Mueve lentamente el número hacia la izquierda Pantalla del tubo
MOV DBUF 7, #07H
MOV DBUF 6, #06H
MOV DBUF 5, #05H p>
MOV DBUF 4, #04H
MOV DBUF 3, #03H
MOV DBUF 2, #02H
MOV DBUF 1, #01H
MOV DBUF, #00H
DISP LJMP
SALIDA LJMP
SALIDA:
POP PSW // Pop
RETI //Retorno de interrupción
MODO: SALIDA LJMP
OUTPSR: ///Desplazamiento lento a la derecha
CLR 21H.0
SETB 21H.1
MOV A, LEDBUF
RR A
MOV LEDBUF,A
MOV BUFSTORE, LEDBUF
p>START2: //Mueva lentamente la pantalla del tubo digital hacia la derecha
MOV DBUF 7, #0FH
MOV DBUF 6, # 0EH
MOV DBUF 5, #0DH
MOV DBUF 4, #0CH
MOV DBUF 3, #0BH
MOV DBUF 2 , #0AH
MOV DBUF 1, #09H
MOV DBUF, #08H
DISP LJMP
SALIDA LJMP
OUTPHL: //movimiento rápido hacia la izquierda
MOV C
100US, #27H
MOV C100US 1, #10H // Temporizador 1 segundo
MOV C, 21H.0
JNC OUTPHR
SETB 21H.0
CLR 21H.1
MOV A, LEDBUF
RL A
MOV LEDBUF, A
MOV BUFSTORE, LEDBUF
START3: //Mueve rápidamente la pantalla del tubo digital hacia la izquierda
MOV DBUF 7, #017H
MOV DBUF 6, # 016H
MOV DBUF 5, #015H
MOV DBUF 4, #014H
MOV DBUF 3, #013H
MOV DBUF 2, #012H
MOV DBUF 1, #011H
MOV DBUF, #010H
DISP LJMP
SALIDA SJMP
OUTPHR: //Desplazamiento rápido a la derecha
CLR 21H.0
CLR 21H.1
MOV A, LEDBUF
RR A
MOV LEDBUF, A
MOV BUFSTORE, LEDBUF
START4: //Mueve rápidamente la pantalla del tubo digital hacia la derecha
MOV DBUF 7, #01FH
MOV DBUF 6, #01EH
MOV DBUF 5, #01DH
MOV DBUF 4, #01CH
MOV DBUF 3, #01BH
MOV DBUF 2, #01AH
MOV DBUF 1, #019H
MOV DBUF, #018H
LJMP DISP
SALIDA: INC COUNT
MOV A, COUNT
CJNE A, #01H, PART2
MOV P2, # 7EH
MOV LEDBUF, P2
LJMP START5
PARTE2: CJNE A, #02H, PARTE3
MOV P2, #0BDH
MOV LEDBUF, P2
LJMP START5
PARTE3: CJNE A, #03H, PARTE 4
MOV P2 , #0DBH
MOV LEDBUF, P2
LJMP INICIO5
> PARTE 4: CJNE A, #04H, PARTE 5
MOV P2, #0E7H
MOV LEDBUF, P2
LJMP START5
PARTE 5 :CJNE A, #05H, PARTE 6
MOV P2, #0DBH
MOV LEDBUF, P2
LJMP START5
PARTE 6: CJNE A, #06H, PARTE7
MOV P2, #0BDH
MOV LEDBUF, P2
LJMP START5
PARTE7: CJNE A, #07, PARTE 8
MOV P2, #07EH
MOV LEDBUF, P2
LJMP START5
PARTE 8: CJNE A, #07 ,PARTE9
MOV P2, #0FFH
MOV LEDBUF, P2
LJMP START5
PARTE 9: CJNE A, #08H, PARTE 10
MOV P2, #55H
MOV LEDBUF, P2
LJMP START5
PARTE10: CJNE A, #09H, PARTE11 p>
p>
MOV P2, #0AAH
MOV LEDBUF, P2
LJMP START5
PARTE 11: CJNE A, #0AH, PART12
MOV P2, #0C3H
MOV LEDBUF, P2
LJMP START5
PARTE12: CJNE A, #0BH, PART13
MOV P2, #77H
MOV LEDBUF, P2
LJMP START5
PARTE13: CJNE A, #0CH, PART14
MOV P2, #0BBH
MOV LEDBUF, P2
LJMP START5
PARTE14: CJNE A, #0DH, PARTE15
MOV P2, #0DDH
MOV LEDBUF, P2
LJMP START5
PARTE15: CJNE A, #0DH, PARTE16
MOV P2, #0EEH
MOV LEDBUF, P2
LJMP START5
PARTE16: RECUENTO DE MOV, #01H
LJMP START5 p>
/////Fin del patrón/////////
INICIO5: MOV DBUF 7, #027H //Pantalla de tubo digital
MOV DBUF 6, #026H
MOV DBUF 5, #025H
MOV DBUF 4, #024H
MOV DBUF 3, #023H
MOV DBUF 2, #022H
MOV DBUF 1, #021H
MOV DBUF, #020H
LJMP DISP
MAIN: //Programa principal
SETB 21H.0 //Establecer valor inicial
SETB 21H.1
SETB 21H.2
CLR COUNT
MOV TMOD, #02H //Modo 2, temporizador
MOV TH0, #T100US
MOV TL0, #T100US
MOV IE, #10000010B
SETB TR0 //Iniciar cronometraje
MOV A, #0FEH
MOV LEDBUF, A
MOV BUFSTORE, A
MOV P2, A
MOV C100US, # 27H
MOV C100US 1, #10H
BUCLE:
MOV B, 20H
MOV P2, B
LJMP LOOP
DISP: //Pantalla de tubo digital estática
MOV R0, #DBUF
MOV R1, #TEMP
MOV R2, #8
DP10:
MOV DPTR, #SEGTAB
MOV A, @R0
MOVC A, @A DPTR
MOV @R1, A
INC R0
INC R1
DJNZ R2, DP10
MOV R0 , #TEMP
MOV R1, #8
DP12:
MOV R2, #8
MOV A, @R0< / p>
DP13:
RLC A
MOV DIN, C
CLR CLK
SETB CLK
DJNZ R2, DP13
INC R0
DJNZ R1, DP12
SALIDA LJMP
SEGTAB:
DB 6DH, 80H, 40H, 40H, 38H, 79H, 38H, 31H
DB 6DH, 80H, 40H, 40H, 77H, 30H, 6FH, 74H
DB 76H, 80H, 40H, 40H, 38H, 79H, 38H, 31H
DB 76H, 80H , 40H, 40H, 77H, 30H, 6FH, 74H
DB 40H, 40H, 6FH, 3FH, 3FH, 5EH, 40H, 40H
RETI
DELAY: MOV R4, #02H
AA1: MOV R5, #0F8H
AA: NOP
NOP
DJNZ R5, AA
DJNZ R4, AA1
RET
END