[Aprendizaje de STC MCU] Lección 7: Tubo digital estático / dinámico de control de microordenador de un solo chip

[Intrusión del resumen del curso del Sr. Zhu]


La primera parte, lista de capítulos

1.7.1. ¿Qué es un tubo digital?

1.7.2. Accionamiento preliminar del tubo digital estático

1.7.3. Números de visualización de tubos digitales estáticos

1.7.4. Deje que el tubo digital muestre 0 af en secuencia

1.7.5. Tubo digital dinámico

1.7.6.38 Introducción al decodificador

1.7.7. Programación de la pantalla de tubo digital dinámico combate real 1

1.7.8. Programación de la pantalla de tubo digital dinámico combate real 2


Segunda parte, Registro del aula


1.7.1. ¿Qué es un tubo digital?


1.7.1.1. Observe la
apariencia del tubo digital (1) en varios aspectos

Resultados de la imagen de tubo digital


(2) Función: el tubo nixie es un dispositivo de visualización, que se utiliza para mostrar números: ¡más utilizado en ocasiones industriales!
(3) Clasificación: único (1 dígito), fila (2 dígitos, 4 dígitos, 8 dígitos)


1.7.1.2. Principio de funcionamiento
(1) Principio de apagado (en realidad, el LED de iluminación interno)

Hay 8 LED en un tubo digital.


(2) El principio de mostrar números (o incluso texto): use el encendido y apagado del LED interno para mostrar o no los trazos externos que componen los números. Lo que la gente ve son números diferentes. ¡Es muy similar a la iluminación! Por ejemplo, lo siguiente: display 2, 8

Resultados de la imagen de tubo digital

1.7.1.3, tubo digital de ánodo común y cátodo común
(1) la diferencia en los métodos de conducción

Debe quedar claro que los 8 LED dentro de un tubo nixie se controlan de forma independiente . Si los polos positivos de 8 LED están conectados a VCC (los polos negativos están conectados a diferentes pines de la MCU), esta conexión se llama ánodo común (luces LED en la lección anterior). Por el contrario, si los polos negativos de 8 LED se conectan entre sí y luego se conectan a GND (los polos positivos están conectados respectivamente a diferentes pines del microcontrolador), se le llama cátodo común. Ambos métodos de conexión pueden controlar la pantalla del tubo digital, pero el programa MCU utilizado para mostrar es diferente (el MCU 0 está encendido cuando el ánodo es común y el 1 del MCU está encendido cuando el cátodo es común ).


(2) Diferencia en los requisitos de corriente del variador

Si el tubo digital (en realidad LED) está conectado de acuerdo con el ánodo común, el microcontrolador puede conducir directamente la pantalla. Si el cátodo común está conectado, el microcontrolador no se puede conducir directamente porque la corriente proporcionada por el puerto IO del microcontrolador no es suficiente para impulsar la pantalla LED dentro del tubo digital. Circuito para proporcionar un chip de unidad de alta corriente para resolver. ( Consulte el esquema de la versión anterior 74HC573).


1.7.1.4 Tubos digitales estáticos y dinámicos: De hecho, todos son iguales, ¡todos son tubos digitales! ¡El método de visualización es diferente!
(1) Diferencia de uso 

¡Tubo digital separado de cara estática, fila dinámica!
(2) Diferencia de conexión de circuito


1.7.2. Accionamiento preliminar del tubo digital estático


1.7.2.1 Análisis esquemático
1.7.2.2 Cableado
(1) Conclusión: El puerto P0 del microcontrolador está conectado directamente al cátodo del tubo digital de ánodo común . Por lo tanto, cuando el microcontrolador emite 0, el tubo nixie está encendido , y cuando emite 1, el tubo nixie está apagado . El resultado de la verificación experimental está bien.


1.7.2.3. La programación de la iluminación es igual que la luz pequeña
(1) P0 = 0x0; 8 segmentos están todos encendidos
(2) P0 = 0xff; 8 segmentos están todos apagados
(3) P0 = 0x0f; 4 segmentos están encendidos y 4 segmentos están apagados
(4) P0 = 0xfe ;

1.7.2.4. Verifique que el número de segmento del tubo digital en el diagrama esquemático sea correcto
(1) Los 8 segmentos del tubo digital son en realidad 8 LED, correspondientes a los 8 pines del puerto IO P0 (P0.0, P0.1 ···· P0 .7) Entonces, ¿quién corresponde a quién?
  Mire la imagen
(2) Teóricamente, puede analizar el diagrama esquemático y el método de cableado para adivinar la relación correspondiente (el código de segmento del tubo digital) . Propenso a errores
(3) En el combate real, normalmente escribes tu propio código para probar.
    P0 = 0xfe; // 11111110 P0.0 salida 0 medición actual corresponde al segmento del tubo nixie a
    P0 = 0xfd; // 11111101 P0.1 salida 0 medición actual corresponde al segmento b
    P0 = 0xfb; // 11111011 P0.2 salida 0 medición real corresponde al segmento c
    P0 = 0xf7; // 11110111 P0.3 salida 0 medida actual correspondiente al segmento d
    P0 = 0xef; // 11101111 P0.4 salida 0 medida actual correspondiente al segmento e
    P0 = 0xdf; // 11011111 P0.5 salida 0 medida actual correspondiente al segmento f
    P0 = 0xbf; // 10111111 P0.6 salida 0 medición actual corresponde al segmento g
    P0 = 0x7f; // 01111111 P0.7 salida 0 medición actual corresponde al segmento dp
    
Nota: Entre los 8 bits binarios del puerto P0, el bit alto corresponde a P0.7 y el bit bajo corresponde a P0.0

1.7.2.5 Pensamiento: ¿Cómo muestra los números el tubo digital?
(1) El tubo nixie muestra los números, de hecho, el tubo nixie ilumina los segmentos correspondientes. De hecho, se trata de hacer que el pin correspondiente de la salida del puerto IO sea 0 (otros pines, salida 1), que en realidad corresponde a un número binario de 8 bits.
(2) La conclusión es: el puerto P0 genera una cantidad apropiada de bytes y el tubo digital mostrará el número correspondiente. Cada número tendrá un número binario de 8 bits correspondiente, la clave es obtener el número binario de 8 bits.
Por ejemplo: para obtener "A", siempre que los segmentos d y dp estén desactivados, es decir: 0x88 // 10001000


1.7.3. Números de visualización de tubos digitales estáticos


1.7.3.1. La adquisición de código digital (código de segmento)
significa que si queremos mostrar un número, tenemos que saber qué segmentos son necesarios para mostrar el número, por lo que la siguiente tabla es la iluminación de diferentes luces LED de tubo digital correspondientes a diferentes números, y correspondientes El código de segmento binario y hexadecimal que debe emitir el puerto IO de la MCU conectada.

要显示的数字  数码管亮的LED                段码二进制   十六进制
0               abcdef                  11000000    0xC0
1               bc                      11111001    0xf9
2               abdeg                   10100100    0xA4
3               abcdgh                  10110000    0xb0
4               bcfg                    10011001    0x99
5               acdfg                   10010010    0x92
6               acdefg                  10000010    0x82
7               abc                     11111000    0xf8
8               abcdefg                 10000000    0x80    
9               abcdfg                  10010000    0x90
A               abcefg                  10001000    0x88
b               cdefg                   10000011    0x83
C               adef                    11000110    0xc6
d               bcdeg                   10100001    0xA1
E               adefg                   10000110    0x86
F               aefg                    10001110    0x8e


1.7.3.2, verificación de programación

Solo elige algunas pantallas ~

Utilice el puerto P0 para conectar el pin del tubo digital (J8), cree un nuevo proyecto, el siguiente código puede realizar el número de pantalla del tubo digital estático 0

#include <reg51.h>


void main(void)
{
    while(1)
    {
        P0 = 0xC0;
    }
}

fenómeno:

1.7.3.3. Conclusión
(1) Diferentes tablas de códigos digitales (códigos de segmento) pueden ser completamente diferentes
(2) Diferentes tablas de códigos pueden ser completamente diferentes para el mismo modo de cableado de tubos digitales
(3) Una vez confirmado el hardware, el experimento se puede llevar a cabo mediante depuración. Determinar la tabla de códigos

¡Los números cambiarán, los métodos no cambiarán!


1.7.4. Deje que el tubo digital muestre 0 af en secuencia


1.7.4.1. Forma estúpida: estado dividido estado
+ retraso, el código es el siguiente:

#include<reg52.h>

void delay(void)
{
	unsigned char i = 200;
	unsigned char j = 300;
	
	while(i--)
		while(j--);
}
void main()
{
		while(1)
		{

			P0 = 0xc0;		//0
			delay();
			
			P0 = 0xf9;		//1
			delay();
			
			P0 = 0xa4;		//2
			delay();
			
			P0 = 0xb0;		//3
			delay();
			
			P0 = 0x99;		//4
			delay();
			
			P0 = 0x92;		//5
			delay();
			
			P0 = 0x82;		//6
			delay();
			
			P0 = 0xf8;		//7
			delay();
			
			P0 = 0x80;		//8
			delay();
			
			P0 = 0x90;		//9
			delay();
			
			P0 = 0x88;		//A
			delay();
			
			P0 = 0x83;		//b
			delay();
			
			P0 = 0xc6;		//C
			delay();
			
			P0 = 0xa1;		//d
			delay();
			
			P0 = 0x86;		//E
			delay();
			
			P0 = 0x8e;		//F
			delay();	
		}
}


1.7.4.2. Método de actualización: usar matriz

#include<reg52.h>

//利用数组来显示静态数码管数字
void delay(void)
{
	unsigned char i = 200;
	unsigned char j = 300;
	
	while(i--)
		while(j--);
}

void main()
{
		unsigned char val[16] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e};
		unsigned char i = 0;
		
		while(1)
		{
				for(i = 0;i<16;i++)
				{
						P0 = val[i];
						delay();
				}
		}
}

Antes de la siguiente clase, pregúntese si debe adaptar el código anterior: deje que el tubo digital muestre solo números pares (0,2,4 ...), no números impares
1.7.4.3. Resumen
(1) Se utilizan diferentes características del lenguaje C en diferentes lugares, que pueden simplificarse Programación
(2) La matriz del lenguaje C comienza desde 0, preste atención a no cruzar el límite, esto es muy importante


1.7.5. Tubo digital dinámico


1.7.5.1 Defectos del método de conducción del tubo nixie estático
(1) La ventaja es que la unidad es simple y directa, y es fácil de programar.
(2) El defecto es que cada tubo nixie necesita 1 puerto, y el puerto del microordenador de un solo chip no es suficiente.
Solución: Utilice el modo dinámico para conducir múltiples Tubo digital


1.7.5.2 ¿Qué es un tubo digital dinámico?
(1) El tubo digital o el tubo digital original (tanto ánodo común como cátodo común). Recuerde: el tubo digital tiene 2 extremos: COM (común) y extremo de segmento, como se muestra en la figura siguiente :

Este es un tubo digital de cátodo común  


(2) Un lado del código de segmento (J6) todavía está conectado a un puerto MCU


(3) COM (polo común) está conectado a un puerto IO del microordenador de un solo chip, y el COM de varios tubos digitales en serie está conectado a un puerto IO. Un COM es un nivel común, que es diferente de estático y está conectado directamente a VCC / GND.
Análisis y comparación de estática y dinámica Tubo Nixie, encontró que la diferencia esencial es: en el tubo digital estático, siempre que se proporcione el código de segmento, el tubo digital debe funcionar (la pantalla solo depende del extremo del código del segmento), y el extremo del código de segmento del tubo nixie dinámico necesita que el extremo COM coopere. Enciende el tubo digital .

1.7.5.3. Cómo funciona el tubo digital dinámico (somos el tubo digital dinámico de cátodo común)
(1) En un cierto período de tiempo, solo un tubo digital en la fila de tubos digitales está funcionando y los otros están descansando (no trabajando). Nota ¡No lo dudes, te lo explicaré más tarde! !
(2) El terminal COM selecciona qué tubo digital trabajar , el terminal de segmento emite el código de segmento del tubo digital que se mostrará; retraso; el terminal COM selecciona el siguiente tubo digital para trabajar, y el terminal de segmento cambia para emitir este tubo digital para mostrar El código de segmento del número; retraso; el terminal COM selecciona el siguiente tubo digital para trabajar ······
(3) Cambie rápidamente el tubo digital de trabajo, entonces lo que la gente ve es que todos los tubos digitales son brillantes (de hecho, el brillo es Más bajo que la unidad estática). Persistencia de la visión

Averigüe 2 puntos:
primero, todos los tubos digitales están encendidos al mismo tiempo en la vista macroscópica, por lo que la gente piensa que todos los tubos digitales funcionan al mismo tiempo, por lo que se pueden combinar varios tubos digitales para mostrar (por ejemplo, la pantalla 12345678 )
. Los tubos nixie se iluminan secuencialmente, podemos enviar diferentes códigos de segmento a diferentes tubos nixie, por lo que diferentes tubos nixie pueden mostrar diferentes números. Por tanto, la pantalla equivalente a 8 tubos digitales es independiente.


1.7.6.38 Introducción al decodificador

1.7.8.1 Por qué introducir el decodificador 38
(1) La función del decodificador 38: utilice 3 puertos IO para controlar 8 salidas.

CBA     对应Yx(x:0-7) 
000        0
001        1
010        2
011        3
100        4
101        5
110        6
111        7

3位到8位的映射(编码)

¿Cuál es la salida, y el primer pin se baja?
(2) Importancia de conducir el tubo digital con decodificador 38: después de usar el decodificador 38, podemos usar 3 entradas de decodificador 38 para controlar códigos de 8 bits de tubo digital , de modo que solo se necesitan 3 + 8 en total = 11 pines IO pueden manejar 8 tubos digitales dinámicos.

El pin J10 del decodificador 38 se puede conectar directamente a J1 del tubo digital dinámico.
Diagrama esquemático:

Mapa físico:
 


1.7.8.2, hoja de datos 74LS138
(1) se enfoca en comprender la tabla de verdad

 


(2) G1, G2A y G2B son los pines de habilitación
(3) ABC es el terminal de codificación, Y0-Y7 es el terminal de salida


1.7.7. Programación de la pantalla de tubo digital dinámico combate real 1

El objetivo de esta sección: primer experimento para obtener la tabla de códigos de segmento del tubo digital
1.7.7.1 Cableado
(1) Determinación del cableado: P0 se conecta a J6, P2.0-P2.2 se conecta al terminal ABC del decodificador 38 y J10 se conecta a J1
(2) P2.2-P2.4: 000 El tubo nixie 0 está encendido, 001 El primer tubo nixie está encendido ...
(3) El terminal de código de segmento proporciona diferentes valores para probar para obtener la tabla de códigos de segmento

Paso 1: Primera prueba P0.0-P0.7 y abcdefg ¿Cómo se corresponden?
Conclusión de la prueba experimental: P2.0 - P2.2: 000 es el primer tubo digital, ¡111 es el octavo tubo digital!
                         P0.0 corresponde a a (P0.1 corresponde a b ····· P0.7 corresponde a dp)

显示      对应段           P0二进制        对应十六进制
0         abcdef           00111111         0x3f
1         bc               00000110         0x06
2         abdeg            01011011         0x5b
3         abcdg            01001111         0x4f
4         bcfg             01100110         0x66
5         acdfg            01101101         0x6d
6         acdefg           01111101         0x7d
7         abc              00000111         0x07
8         abcdefg          01111111         0x7f
9         abcdfg           01101111         0x6f
A         abcefg           01110111         0x77
b         cdefg            01111100         0x7c
C         adef             00111001         0x39
d         bcdeg            01011110         0x5e
E         adefg            01111001         0x79
F         aefg             01110001         0x71

Tabla de códigos de segmento: 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71

1.7.7.2, variables de bits de definición de sbit

(1) antes de la programación son todas Para operar directamente un puerto IO, puede usar el nombre del puerto (P0, P1) para operar los 8 pines de un puerto IO como un todo. Pero este método no puede controlar un solo puerto IO.
(2) Hoy en día, la programación requiere una operación separada de un pin IO, como P3.4, pero el lenguaje C no se reconoce si escribe P3.4 directamente, y debe usar la palabra clave sbit para definir un pin. ¡También lo usamos en la primera clase!
sbit SER = P3 ^ 4;

1.7.7.3, introducción de definición macro y typedef
uchar, u8

typedef unsigned char u8;

#define uchar unsigned char

 Nota: #define y typedef deben escribirse lo más adelante posible.


1.7.8. Programación de la pantalla de tubo digital dinámico combate real 2

Objetivo de esta sección: utilizar el decodificador 38 y el tubo digital dinámico para realizar la pantalla de 8 tubos digitales conectados 12345678
(1) Idea de programación: primero seleccione el primer tubo digital, luego envíe el código de segmento 1 al final del código de segmento y luego espere un momento; Luego cambie para seleccionar el segundo tubo nixie, y luego envíe el código de segmento de 2 al final del código de segmento, y luego espere un tiempo; hasta que se muestre el octavo tubo nixie, es un ciclo; este ciclo es un bucle infinito.
Nota: El retraso debe ser el correcto, no solo no puede ser detectado por los ojos, sino también para garantizar que todos los tubos digitales estén encendidos al mismo tiempo.

Conclusiones experimentales:
1. El tiempo de retraso es demasiado largo, de lo contrario los números parpadearán.
2. Después de acortar el tiempo, hay tres problemas: el primero es que la luz no es lo suficientemente brillante, el segundo es que la oscuridad no es lo suficientemente oscura y el tercero es que uno de los números (1) es obviamente defectuoso.

Razón: ¡Los códigos de segmento de diferentes números se superponen!

Solución:  deje en blanco cada vez que encienda cada tubo digital y cambie al siguiente.
Blanking: Después de que se termina cada luz, el código de segmento es todo 0, ¡de modo que todos los segmentos no están iluminados! // P0 = 0x00;

La primera mejora del programa: coloque el código del segmento en la matriz para verificar la matriz.
Mejora del segundo paso: use la caja del interruptor para el código de opción COM

/**************************************************************************************
接线说明: 单片机-->动态数码管模块(具体接线图可见开发攻略对应实验的“实验现象”章节)
				J22-->J6
				P22-->J9(A)
				P23-->J9(B)
				P24-->J9(C)		
注意事项:																				  
***************************************************************************************/

#include "reg51.h"			

typedef unsigned char u8;

sbit LSA=P2^0;
sbit LSB=P2^1;
sbit LSC=P2^2;

u8 smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值


void delay(unsigned char i)
{
	while(i--);	
}

/*******************************************************************************
* 函 数 名         : DigDisplay
* 函数功能		   : 数码管动态扫描函数,循环扫描8个数码管显示
*******************************************************************************/
void DigDisplay()
{
	u8 i;
	for(i=0;i<8;i++)
	{
		switch(i)	 //位选,选择点亮的数码管,
		{
			case(0):
				LSA=0;LSB=0;LSC=0; break;//显示第0位
			case(1):
				LSA=1;LSB=0;LSC=0; break;//显示第1位
			case(2):
				LSA=0;LSB=1;LSC=0; break;//显示第2位
			case(3):
				LSA=1;LSB=1;LSC=0; break;//显示第3位
			case(4):
				LSA=0;LSB=0;LSC=1; break;//显示第4位
			case(5):
				LSA=1;LSB=0;LSC=1; break;//显示第5位
			case(6):
				LSA=0;LSB=1;LSC=1; break;//显示第6位
			case(7):
				LSA=1;LSB=1;LSC=1; break;//显示第7位	
		}
		P0=smgduan[i];//发送段码
		delay(100); //间隔一段时间扫描	
		P0=0x00;//消隐
	}
}

void main()
{	
	while(1)
	{	
		DigDisplay();  //数码管显示函数	
	}		
}

Enlace de descarga del programa para esta lección: tubo digital

¡Esta lección ha terminado!
 

Supongo que te gusta

Origin blog.csdn.net/qq_27148893/article/details/109441396
Recomendado
Clasificación