Esto es sólo un pequeño instructivo para ayudar a las personas rápidamente utilizar un display de 7 segmentos con un Arduino u otro microcontrolador. Estas pantallas requieren 8 lineas de datos y que es un poco mucho sacrificio en la mayoría de los microcontroladores, por lo que hay una mejor manera: con un registro de cambio HC595 o HCT595. En ese caso la pantalla sólo tiene 3 líneas de datos.
Ahora puede ser un poco difícil para el principiante averiguar qué pins para conectar con lo que y entonces cómo obtener los números apropiados para iluminar, pero si nos atenemos a algunas reglas del juego, es bastante fácil. (Nota. revisé la HCT595 mayoría de los lugares es sustancialmente más caro que el HC595, a menos que u realmente necesidad/quiere/tiene la versión HCT, escoger la versión HC.)
Para una cosa... realmente no importa qué pines de la pantalla de 7 segmentos se conecta a la datapins de la 595, porque puede ordenar todo en el código del programa, pero es más fácil adherirse a algunas conexiones estándar.
Si nos fijamos en el diagrama de la pantalla, usted verá que los segmentos tienen un nombre más o menos estandarizado: A-G y DP. si conectas la 595 como sigue:
Q0 -> A
Q1 -> B
Q2 -> C
Q3 -> D
Q4 -> E
Q5 -> F
Q6 -> G
Q7 -> DP
entonces la codificación se convierte estandardizada así.
Determinar a que pin corresponde a qué segmento se hace rápidamente con un multímetro, así como establecer si tiene display de ánodo común o cátodo común. Un vistazo a la parte trasera generalmente ya te dice lo que es la conexión común. Esto es muy a menudo el medio perno en la parte superior e inferior.
Como el segmento de 7 pantalla - como LED - realmente no puede tomar el total de 5 voltios de la mayoría de los micro controladores, es necesaria una resistencia en cada línea. Yo uso 470 Ohm. ES posible utilizar sólo una resistencia en la línea común, pero entonces la intensidad de la luz será diferente dependiendo de la cantidad de segmentos que trabajan.
Todo esto es fácil soldar en algunos perf-tablero como se muestra en la imagen, obviamente si su pin lay-out difiere de la mía, tienes que cambiar las conexiones... o enviar un valor diferente a la HC595. El circuito que te di es para un display de cátodo común, pero por supuesto para un display de ánodo común el principio es el mismo, aunque eso se conecta el común ánodo a + Vcc.
El código es bastante auto explicativo. Obviamente uno no puede enviar sólo un carácter '0' o '9' a la pantalla para obtener el número deseado. Cada número requiere una cantidad específica de segmentos de encenderá y que se corresponde con determinados puertos de 595 a ser alta o baja. Tan por ejemplo para el '8' necesita todos los segmentos de línea, excepto el punto decimal y según nuestra forma estandarizada de conectar, que requiere el número 127 que envíe la 595 (127 = 01111111 = todos los segmentos excepto dp). Si desea que el '8' y la DP, enviar el número 255.
Así que lo más fácil es simplemente crear un array con los valores deseados para cada número y utilizar el número como un índice de esa matriz. Así que si usted quiere un '0' utilizar miembros '0' de la matriz (63), para el 1 utilizas miembro 1 de la matriz (valor 6) etc.
Si quieres el punto digital luz así, simplemente añadir '128' al valor que se envía.
The coding then is as follows /* Using the 74HC595 shift register with a 7 segment display */ int latchpin = 5;// connect to pin 12 on the '595 int clockpin = 7; // connect to pin 11 on the '595 int datapin = 6; // connect to pin 14 on the '595 // the array contains the binary value to make digits 0-9// uncomment the proper line for common cathode or common anode int segment[10] = {63,6,91,79,102,109,125,7,127,111 }; // for common cathode //int segment[10] = {192,249,164,176,153,146,130,248,128,144 }; // for common anode //These values are always the right ones if you follow the rule of Q0->A, Q1->B etc. void setup() { pinMode(latchpin, OUTPUT); pinMode(clockpin, OUTPUT); pinMode(datapin, OUTPUT); } void loop() { digitalWrite(latchpin, LOW); shiftOut(datapin, clockpin, MSBFIRST, 0); // clear the display digitalWrite(latchpin, HIGH); delay(1000); for (int lus=0; lus<10; lus++) // counts from 0 to 9, using the values in the array // those values correspond to the binary outputs 0~9 // to get the digital point: add 128 { digitalWrite(latchpin, LOW); shiftOut(datapin, clockpin, MSBFIRST, segment[lus]+128); digitalWrite(latchpin, HIGH); delay(800); } digitalWrite(latchpin, LOW); shiftOut(datapin, clockpin, MSBFIRST, 0); // clear the display digitalWrite(latchpin, HIGH); delay(800); digitalWrite(latchpin, LOW); shiftOut(datapin, clockpin, MSBFIRST, 128); // light the decimal point digitalWrite(latchpin, HIGH); delay(800); }