El pestillo y el tubo digital de ocho bits crean un reloj electrónico
El principio de utilizar un tubo digital de 8 dígitos para mostrar la hora es básicamente el mismo que el de un tubo digital de 4 dígitos.
Diagrama de simulación:
Programa código fuente:
Este programa se ha producido mediante simulación de software y hardware en línea. org 0000h; Dirección de entrada de interrupción sjmp main; ¿Saltar al programa principal org 000bh? ;Saltar a la organización del programa de interrupción T0 001bh? ;Dirección de entrada de interrupción T1 ljmp inti1? ;Saltar a la organización del programa de interrupción T1 0030h
main:mov tmod,#11h ;Establecer T0 y T1 en modo 1 p>
mov ie,#8ah? ;Habilitar T0 y T1 para permitir interrupciones mov th0,#4ch? ;Asignar a T0 un valor inicial de 50 ms mov tl0,#00h mov th1,#4ch? de 50ms mov tl1,#00h mov sp,# 60h ;Establecer puntero de pila mov 38h,#00 ;Valor inicial de los minutos de alarma mov 39h,#00 ;Valor inicial del reloj de alarma mov 31h,#00 ;Valor inicial de los segundos de tiempo mov 32h,#00 ;Valor inicial de minutos de tiempo mov 33h,# 00 ;Valor inicial de tiempo setb tr0 ;Iniciar temporizador T0 setb tr1 ;Iniciar temporizador T1
bucle:lcall display ;Programa de visualización de tiempo de llamada
lcall keysan ;Botón de ajuste de tiempo de llamada lcall keynz; Llame al botón de control del despertador
ajmp loop
inti0:push psw?; proteger la escena push acc clr ea?; desactivar la interrupción mov th0, #4ch ;Reasignar el valor inicial del tiempo T0 mov tl0,#00h inc 3ah ;3ah es la unidad de conteo de 50 ms mov a,3ah cjne a,#20,out ;Si el conteo de 1 segundo llega a mov 3ah,#00; borrar los 50 ms contando el valor inicial inc 31h; segundos más 1 mov a,31h cjne a,#60,out;60 segundos contando hasta mov 31h,#00 inc 32h; Minutos más 1 mov a,32h cjne a,#60,out ;60 minutos contando Si llega a mov 32h, #00 inc 33h; Suma 1 cuando mov a,33h cjne a, #24, out? 33h, #00
salida a las 24: setb ea ; Activar interrupción
pop acc; Explota el puntero de la pila y restaura la escena pop psw reti
<; p>inti1:push psw?; Empuja el puntero de la pila y restaura la escena push acc clr ea mov th1,# 4ch?;Reasignar el valor inicial de sincronización T1 mov tl1,#00h inc 71h? ¿71h es la unidad de conteo de 50 ms mov a, 71h cjne a,#20,out1 mov 71h,#00 mov a,32h ;Sentencia del despertador cjne a, 38h,out1 ;Juez mov a,33h cjne a,39h,out1 a la hora de la alarma;Juez clr p1.0 en el momento de la alarma;Borrar p1.0 en el tiempo de espera de la alarma1:setb ea?;Abrir interrupción pop accpop psw
reti ;interrupción retorno
<p>display:mov a,31h?; Mostrar segundos mov b,#10 div ab
mov 20h,a ; Poner el dígito de las decenas en la unidad de 20h mov 21h,b? y el resto Poner en la unidad 21h
disp1:? mov a,20h ;Mostrar decenas de dígitos de segundos
mov dptr,#table movc a,@a+dptr ;¿Cambiar el contenido? del contenido de la tabla A +, el resultado se almacena nuevamente en A mov p0,a?; entregue A al puerto P0 clr p2.6?; borre p2.6, encienda el séptimo tubo digital lcall del1ms Llame a la subrutina de retardo de 1 ms setb; p2.6? ;Apagar el séptimo tubo digital
disp2:? mov a,21h ;Mostrar las unidades de segundos
mov dptr,#table movc a,@a+ dptr mov p0,a clr p2.7 lcall del1ms setb p2.7
disp4:? mov a,32h ;visualización de puntos
mov b,#10 div ab mov 22h,a mov 23h,b p>
disp5:? mov a,22h ;mostrar en decenas de dígitos
mov dptr,#table movc a,@a+dptr mov p0,a clr p2.3 lcall del1ms setb p2.3
disp6:? mov a,23h? ;mostrar en unidades
mov dptr,#table movc a,@a+dptr mov p0,a clr p2 .4 lcall del1ms setb p2.4
disp7:? mov a,33h? ;mostrar
mov b,#10 div ab mov 24h,a mov 25h,b
disp8:? mov a,24h ; pantalla de diez dígitos
mov dptr,#table movc a,@a+dptr mov p0,a clr p2.0 lcall del1ms setb p2.0 p>
disp9:? mov a,25h? ;Visualización de dígitos de las horas
mov dptr,#table movc a,@a+dptr mov p0,a clr p2.1 lcall del1ms setb p2. 1 p>
disp10: mov 34h,#0bfh ;"-"display
mov a,34h
mov p0,a clr p2.5 lcall del1ms setb p2.5
disp11: mov 35h,#0bfh ;"-"display
mov a,35h mov p0,a clr p2.2 lcall del1ms setb p2.2 ret
display1:mov a,38h? ;Despertador mostrado en minutos
mov b,#10 div ab mov 26h,a mov 27h,b d1:mov a,26h ;Despertador se muestra en decenas de dígitos
p>mov dptr,#table movc a,@a+dptr mov p0,a clr p2.3 lcall del1ms setb p2.3 d2:mov a,27h;El despertador muestra mov dp en unidades
tr,#table movc a,@a+dptr mov p0,a clr p2.4 lcall del1ms setb p2.4
dispnz: mov a,39h ;Se muestra durante el despertador
mov b,#10 div ab mov 28h,a mov 29h,b d5: mov a,28h ;El dígito de las decenas se muestra durante la alarma
mov dptr,#table movc a,@a+ dptr mov p0, a clr p2.0 lcall del1ms setb p2.0 d6: mov a,29h ;El dígito de las unidades se muestra durante la alarma
mov dptr,#table movc a,@a+dptr mov p0,a clr p2. 1 lcall del1ms setb p2.1
mov 35h,#0bfh ;"-"mostrar
mov a,35h mov p0,a clr p2. 2 lcall del1ms setb p2.2 ? ret?
table:db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h ;Número 0—9
del1ms:mov r7, #10? ;subrutina de retardo de 1ms
del1: mov r6,#50
del2:djnz r6,del2
djnz r7 ,del1 ret p>
del20ms: mov r5,#40; subrutina de retardo de 20 ms
del3: mov r4,#250
del4: djnz r4,del4 djnz r5 ,del3 ret
keysan:jnb p3.1,key1 ;Botón para agregar 1 a segundos jnb p3.2,key2 ;Botón para agregar 1 a minutos
jnb p3.3, key3 ;Botón para agregar 1 a segundos
sjmp keyout
key1: lcall del20ms jb p3.1,keyout jnb p3.1,$ inc 31h ;agregar 1 en segundos mov a? ,31h cjne a,#60,keyout mov 31h,#00 sjmp keyout
key2:lcall del20ms
jb p3.2,keyout jnb p3.2,$ inc 32h ; punto más 1 mov a,32h cjne a, #60,keyout mov 32h,#00 sjmp keyout
key3:lcall del20ms
jb p3.3,keyout jnb p3.3, $ inc 33h; agregue 1 mov a, 33h cjne a,#24,keyout mov 33h,#00 sjmp keyout
keyout:ret
keynz:jnb p3.4,keynz4; muestra el despertador y puede modificar y mostrar la hora actual
jnb p3.7,keynz5
jnb p3.5,nz3
jnb p3.6, nz4
sjmp nzout
p>nzout:ret
nz2:lcall display1
jnb p3.5,nz3 jnb p3.6 ,nz4
>
keynz4:jnb p3.4,nz2 sjmp nzout
nz3:lcall del20ms
jb p3.5,nzout jnb p3.5,$
inc 38h mov a,38h cjne a,#60,nzout mov 38h,#00 sjmp nzout
nz4:lcall del20ms
jb p3.6,nzout jnb p3.6, $ inc 39h mov a,39h cjne a,#24,nzout mov 39h,#00 sjmp keyout
keynz5:jb p3.7,nzout
jnb p3.7,$ setb p1.0 sjmp nzout
fin