Multiplexación de 7 segmentos muestra con Arduino y registros de cambio (3 / 5 paso)

Paso 3: Tiempo de código!

Por ahora, usted probablemente tiene una idea de cómo código de su programa basado en su esquema.

Para empezar te aquí es un esquema simple que mostrará 456 con decimales en forma de retraso de tiempo para demostrar la multiplexación. También hice flexible para dar cabida a diversas configuraciones que tenga. La fuente también está disponible en la parte inferior para descargar. Asegúrese de entender el código en primer lugar, y luego copiar y pegar en un dibujo nuevo. A continuación, realizar los ajustes necesarios a las variables y asignaciones de las patillas ya que pueden ser diferentes en su situación. Una vez hecho esto, sube a la Arduino.

Una cosa que debe tener en cuenta es la dirección del flujo de datos. Si te acuerdas de mi esquema, la izquierda más cambio de registro recibirá el primer byte pero descargará los datos de la SER a si se recibe otro byte. Por lo tanto, si usted quiere enviar 11111111 al dígito del extremo derecho, tendría que cambiar a 11111111 y 00000000 y finalmente 00000000. No te preocupes, esto es manejado automáticamente por el código.

CÓDIGO DE INICIO

/*
Código para interfaz con displays de 7 segmentos
método de multiplexación
y el cambio de TPIC6B595 registro (1 dígito)
Por K.O.
*/

Asignaciones de pines (debe cambiar estos)
const int CLK = 9;           Conectado al pin de TPIC 13: SRCLK (también conocido como reloj)
const int cierre = 10;          Conectado al pin de TPIC 12: RCLK (también conocido como cierre-carga-CS/SS...)
const int OE = 11;          Conectado al pin de TPIC 9: OE (salida activar)
const int duda = 12;          Conectado al pin de TPIC 3: SER (aka MOSI)

Patrones de números (0-9)
Drenajes de 0-7 deben estar conectados a los segmentos A-DP respectivamente ***
const numTable de bytes [] =
{
B11111100,
B01100000,
B11011010,
B11110010,
B01100110,
B10110110,
B10111110,
B11100000,
B11111110,
B11110110
};

Variables globales
int numDevices = 1;                       El número de dígitos x Mostrar módulos va a usar
int maxDisplays = 3;                      La muestra máximo que se podía acomodar (ver Nota 1)
int maxDigits = 3;                        Las cifras máxima por que va a mostrar display de módulo (cada SR puede manejar un máximo de 8 dígitos)
int SRData [3] [3];                         La ubicación de almacenamiento para la información de dígitos. Debemos especificar una matriz fija en tiempo de compilación (ver Nota 2)
depuración booleano = true;                     Cambie a true para imprimir mensajes
int delayTime = 1000;                     Opcional (sólo para demostrar la multiplexación)

/*
Notas
1. se recomienda utilizar una fuente externa para evitar oversource el microcontrolador/que se hunde
o si necesita alto voltaje, alta corriente muestra. Este código se activa o desactivar todos los segmentos de un dígito para *** cada *** Mostrar.
Por lo tanto, si uso 2 x 3 dígitos muestra todos mostrando un 8 + DP, el consumo máximo será:
20 mA (corriente delantera lo desea) * 8 (segmentos que están en) * 2 (pantallas que muestran información idéntica) = 320mA
2. la primera dimensión debe ser igual a maxDisplays. La segunda dimensión debe ser igual al número de dígitos
*/

void setup()
{
Serial.Begin(9600);

Modos de juego pin
pinMode(CLK,OUTPUT);
pinMode(LATCH,OUTPUT);
pinMode (duda, salida);
pinMode (OE, salida);

Init Display de 7 segmentos
digitalWrite(OE,LOW);        Permite la operación de SR
initializeSRData();          Prepara SR y borra datos en línea serial

Prueba
setDigit(0,0,4,true);
setDigit(0,1,5,true);
setDigit(0,2,6,true);
}

void loop()
{
refreshDisplay();            Recorre todas las pantallas y dígitos
}

=== Funciones de SR Inicio ===
void initializeSRData()
{
Escáner de pantalla (repite a través de cada módulo de la pantalla)
digitalWrite(LATCH,LOW);      Dice SRs todos que eso uController está enviando datos

para (dispID int = 0; dispID < maxDisplays; dispID ++)
{
Escáner de dígitos (repite a través de cada SR (dígitos) en un módulo de pantalla)
para (int cifras = 0; dígitos < maxDigits; dígitos ++)
{
Borra cualquier basura en la línea serie
shiftOut(DOUT,CLK,LSBFIRST,0);          Cambiar a 0s a todas las pantallas
SRData [dispID] [cifras] = 0;              Almacena un 0 para cada dígito entonces su totalmente apagado
}
}
digitalWrite(LATCH,HIGH);      Cuenta SRs todos que eso uController se hace envío de datos
}

void printSRData()
{
if(!debug)
retorno;

Serial.println ("impresión SR datos...");

Escáner de pantalla
para (dispID int = 0; dispID < maxDisplays; dispID ++)
{
Serial.Print ("ver #");
Serial.println(dispID);

Escáner de dígitos
para (int cifras = 0; dígitos < maxDigits; dígitos ++)
{
Serial.Print ("dígitos");
Serial.Print(digit);
Serial.Print(":");
Serial.println(SRData[dispID][Digit],bin);
}
Serial.println();
}
}

void setDigit (int dispID dígito int, int valor, boolean dp)
{
Comprobador de parámetro
Si (dispID < 0 || dispID > = numDevices)
{
Serial.println ("identificador dispID OoB!");         OoB = fuera de los límites
retorno;
}

Si (dígitos < 0 || dígitos > maxDigits)
{
Serial.println ("dígito OoB!");
retorno;
}

Si (valor < 0 || valor > 9)
{
Serial.println ("valor no válido!");
retorno;
}

valor = numTable [valor];

Dp de la palanca si es necesario
if(DP)
valor | = B00000001;          Se convierte en el primer dígito binario (segmento) con una máscara de bits OR

Almacenar los dígitos
SRData [dispID] [cifras] = valor;

if(debug)
printSRData();
}

void setSegments (int dispID, int dígitos, valor de byte)
{
Comprobador de parámetro
Si (dispID < 0 || dispID > = numDevices)
{
Serial.println ("identificador dispID OoB!");
retorno;
}

Si (dígitos < 0 || dígitos > maxDigits)
{
Serial.println ("dígito OoB!");
retorno;
}

Si (valor < 0 || valor > 255)
{
Serial.println ("bytes no válida!");
retorno;
}

Almacenar los dígitos
SRData [dispID] [cifras] = valor;

if(debug)
printSRData();
}

void clearDisplay(int dispID)
{
initializeSRData();
refreshDisplay();
}

void refreshDisplay()
{
Escáner de dígitos
para (int cifras = 0; dígitos < maxDigits; dígitos ++)
{
Escáner de pantalla
digitalWrite(LATCH,LOW);
para (int dispID = numDevices - 1; dispID > = 0; dispID--)
{
Los dígitos blanker (cambios a 0s para corregir dígitos antes de enviar datos de segmento a dígito deseado)
para (int espacios = (maxDigits - 1 - dígito); blancos > 0; blancos--)
shiftOut(DOUT,CLK,LSBFIRST,0);

shiftOut(DOUT,CLK,LSBFIRST,SRData[dispID][digit]);

Dígitos después blanker (cambios a 0s a dígitos restantes)
para (int espacios = dígitos; blancos > 0; blancos--)
shiftOut(DOUT,CLK,LSBFIRST,0);
}
digitalWrite(LATCH,HIGH);

Demuestra la operación multiplexación
Delay(delayTime);
delayTime-= 10;
Si (delayTime < = 0)
delayTime = 0;
}
}

=== Funciones de SR extremo ===

CÓDIGO FINAL

Artículos Relacionados

Con 4 dígitos, 7 segmentos display con arduino

Con 4 dígitos, 7 segmentos display con arduino

En este tutorial mostrará usted cómo utilizar un display de 7 segmentos con 4 dígitos utilizando arduino. Algunas cosas básicas que me gustaría señalar es que esta casi todo de los pines digitales en el arduino uno, leonardo, los tableros con 13 pine
Diferentes métodos de conducción 7 exhibiciones de segmento LED con Arduino

Diferentes métodos de conducción 7 exhibiciones de segmento LED con Arduino

me gustaría mostrar algunos métodos diferentes para conectar displays de 7 segmentos LED con un Arduino o Atmega 328 IC. Sólo son simples contra códigos ya sea automáticamente cuenta mediante el código incrementados o disminuye a través de un par de
Tutorial para principiantes: control de matriz de LED con 2 595 registros de cambio y medidor

Tutorial para principiantes: control de matriz de LED con 2 595 registros de cambio y medidor

Estoy recien comenzando con Arduino y el instructables de amandaghassaei me ayudó mucho. En su segunda tutorialabout entradas y salidas, ella explica cómo utilizar registros de desplazamiento y cómo controlar una matriz de LED por multiplexación. En
Cómo hacer una pantalla LED de 7 segmentos con Arduino

Cómo hacer una pantalla LED de 7 segmentos con Arduino

Voy a mostrarte cómo hacer un 7 segmentos display con LEDS. Combinan con Arduino para crear cuentas regresivas, texto simple y mucho más. Me gusta hacer proyectos originales. He buscado en el conjunto de instructables y no encontrar uno como este. De
Monitor de sistema con Arduino y pantalla de 7 segmentos

Monitor de sistema con Arduino y pantalla de 7 segmentos

Recientemente tengo una computadora nueva y comenzó a jugar a juegos de video. Me gusta controlar mi sistema al tener la pantalla llena de juegos: Quiero ver mi temperatura GPU y mi cantidad de RAM utilizado (Minecraft FTB come mucho, como 3-6 GB!).T
Control simple gráfico de barras de LED con Arduino

Control simple gráfico de barras de LED con Arduino

en este tutorial te mostraré cómo controlar simple 10 matriz de gráfico de barras LED con Arduino o Arduino clon MCU y MAX7219 (también funciona con MAX7221) chip de controlador de LED.Aquí tenemos en vídeo de producto terminado en acciónSobre matric
Construir tu Robot de Streaming de Video en Internet controlado con Arduino y frambuesa Pi

Construir tu Robot de Streaming de Video en Internet controlado con Arduino y frambuesa Pi

< el instructivo y el código están listos. ¡ Disfrute! Dejo un comentario Comentarios! >Yo soy (aka LiquidCrystalDisplay / Italia), un estudiante de 14 años de aprendizaje de Israel en el Max Shein secundaria para matemáticas y ciencia avanzada. Est
LED amanecer / amanecer despertador, luz nocturna y luz seguridad - compatible con Arduino

LED amanecer / amanecer despertador, luz nocturna y luz seguridad - compatible con Arduino

como las noches alargadas gradualmente en otoño 2011, descubrí los placeres del Arduino y pensó que sería una buena manera de implementar algo que he querido durante mucho tiempo - una manera suave para despertar en la mañana de un invierno.  Lamenta
7 segmentos Display en Arduino

7 segmentos Display en Arduino

Este instructable muestra cómo mostrar 0-9 dígitos de 7 segmentos Mostrar utilizando Arduino.Lo que usted necesita:Arduino Uno 37 exhibición de segmento siete2 x 220 Ohm resistenciasCables de puentePaso 1: Hacer conexiones Conecte las clavijas que se
Niños de pantalla temporizador con Arduino

Niños de pantalla temporizador con Arduino

Este dispositivo da un padre realmente robusto medio de controlar la cantidad de tiempo en pantalla (TV / DVD / consola) los niños tienen cada día. Trabaja por tener un interruptor de tiempo inteligente que controla la señal HDMI pasando entre un dis
Un reloj de 15 LED RGB con Arduino base

Un reloj de 15 LED RGB con Arduino base

El reloj RGB utiliza el modelo de composición de color RGB usado en todas las pantallas color. Este modelo utiliza tres colores 'básicos', es decir, rojos, verdes y azules, para construir cualquier otro 'compuesto' color del espectro. Con reloj RGB,
Automatización casera con Arduino... Y JavaScript!

Automatización casera con Arduino... Y JavaScript!

En este instructable (mi primera una realidad), te guiará para realizar la automatización en su hogar con Arduino, sí, no tan nueva... Pero también se incluyen JavaScript, usando Node.js y una impresionante biblioteca con Arduino llamado johnny cinco
Cerradura puerta con Arduino

Cerradura puerta con Arduino

Aquí estamos con la clásica cerradura RFID. Es clásico en ese sentido todo, "Vivir en el futuro y tomar por sentado en este momento". En este tutorial, vamos a establecer un pestillo de puerta que puede abrirse con el golpe de una etiqueta RFID!
Una esfera levitando gira se ilumina y parpadea con Arduino

Una esfera levitando gira se ilumina y parpadea con Arduino

Una estrella de la muerte poco levitando en Instructables me invitó al nuevo proyecto con Arduino. Tres políticas se decidió y se mantuvieron para diferenciarlo del precursor.Hacerlo yo misma con Ready-Made no (o menos).Guardar el girar.Que brillan y