"El tubo digital muestra cíclicamente de 00 a 99, con un intervalo de visualización de 100 ms"
Ahora usemos los dos tubos digitales en el tablero experimental para hacer un experimento de visualización de números del 00 al 99 en un bucle. Primero, complete las piezas de hardware necesarias.
El tubo digital se divide en yin y yang. Ambos microcontroladores se pueden controlar, pero los métodos de control son diferentes y los códigos de visualización correspondientes de 0 a 9 también son exactamente opuestos.
En primer lugar, introduzcamos el método de control del microcontrolador de dos tubos digitales positivos. El circuito se muestra a continuación:
Los internautas pueden ver: los puertos P2.6 y P2.7 son. controlado por separado Los dígitos de decenas y unidades del tubo digital se alimentan. Cuando el puerto correspondiente pasa a un nivel bajo, el transistor de accionamiento correspondiente se enciende +5 V suministra energía a los bits correspondientes del tubo digital a través del diodo IN4148 y el controlador. Transistor en este momento, siempre que el puerto P0 envíe el código de visualización digital y el tubo digital pueda mostrar los números normalmente.
Debido a que es necesario mostrar dos números diferentes, se debe implementar mediante un método de escaneo dinámico, es decir, el dígito de las unidades se muestra durante 1 milisegundo y luego el dígito de las decenas se muestra durante 1 milisegundo, y el ciclo continúa, de modo que mientras el tiempo de escaneo sea inferior a 1/50 segundos, verá dos números diferentes mostrados de manera estable debido al efecto visual residual del ojo humano.
Ahora presentaremos un método de control del microcontrolador para el tubo digital negativo. El circuito es el siguiente:
Los internautas pueden ver: +5 V se suministran directamente al digital a través de la resistencia de 1 K. Los 8 segmentos del tubo están alimentados. Los puertos P2.6 y P2.7 controlan la fuente de alimentación de los dígitos de las decenas y las unidades del tubo digital respectivamente. Cuando el puerto correspondiente alcanza un nivel bajo, el bit correspondiente puede consumir corriente. La salida de datos por el puerto P0 del microcontrolador equivale a cortocircuitar el campo digital que el tubo digital no quiere mostrar al suelo, de modo que el tubo digital muestre el número requerido.
Los internautas pueden ver que el hardware del ** tubo digital negativo es más simple, por lo que en la producción en masa, la sobrecarga de hardware es pequeña, se ahorra el área de PCB, se reduce la carga de trabajo de soldadura y el costo total. se reduce, por lo que ** *los tubos digitales Yin son más propicios para la producción en masa. Todas las placas de prueba vendidas ahora utilizan tubos digitales ***yin.
El siguiente es un programa en lenguaje ensamblador que utiliza el tubo digital de dos dígitos de la placa experimental AT89C51 para mostrar 00~99 en secuencia:
a_bit equ 20h; el tubo digital almacena la ubicación de la memoria
p>
b_bit equ 21h;El dígito de las decenas del tubo digital se almacena en la ubicación de la memoria
temp equ 22h;El valor del contador es almacenado en la ubicación de la memoria
star: mov temp,#0;Inicializa el contador, comenzando desde 0
stlop: llama a la pantalla; llama a la subrutina de visualización
inc temp; agrega 1 al contador
mov a,temp
cjne a,#100,next; ¿Determinar si el contador está lleno de 100?
mov temp,#0; Bórralo y comienza de nuevo cuando llegue a 100
siguiente: ljmp stlop; Si no, entonces ejecuta el bucle
;Mostrar subrutina
display: mov a,temp ;Convierte el número hexadecimal en temp a decimal
mov b ,#10 ;Decimal/10=Decimal
p 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
p>
mov r0,#4
dpl1: mov r1,#250
dplop: mov a,a_bit ;Obtener el número de un solo dígito
MOVC A,@A+DPTR ;Comprueba el código de 7 segmentos del número de un solo dígito
mov p0 ,a ;Envía el código de 7 segmentos del dígito de las unidades
clr p2. 7 ;Encienda la pantalla de dígitos
acall d1ms ;Mostrar 162 microsegundos
setb p2 7;Apague la pantalla de unidades para evitar imágenes fantasma
mov a, b_bit;Obtener el dígito de las decenas
MOVC A,@A+DPTR;Verificar el código de 7 segmentos para el dígito de las decenas
mov p0,a ;Enviar código de 7 segmentos de las decenas digit
clr p2.6 ;Activar la visualización de decenas de dígitos
acall d1ms ;Mostrar 162 microsegundos p>
setb p2.6; Desactivar la visualización de decenas de dígitos para evitar fantasma
djnz r1,dplop; Ejecución de bucle 250 veces
djnz r0,dpl1; Ejecución de bucle 250X4= 1000 veces
ret
;2+2X80=162 microsegundos, el retraso se calcula según 12MHZ
D1MS: MOV R7, #80
DJNZ R7,$
RET p>
;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
end
;Si es el código de visualización del ***tubo digital yang
numtab: DB 30H,0FCH,0A2H,0A4H ,06CH,25H,21H,0BCH,20H,24H
Este es el archivo de programación del programador obtenido después de compilar el programa anterior: 205.hex