Paso 4:
4 - multiplexadas a través de registro de cambio de Arduino / Atmega 328 / botón contador
Botones incrementar y disminuir un contador entre cero y ocho
Código
Contador de 7 segmentos LED, Multiplexión usando 74HC595 8 bit shift register, incremento contador cero ocho a cero a través de interruptores de botón
Código mangled juntos de estas fuentes - fellas gracias
http://www.Sweeting.org/Mark/blog/2011/11/27/Arduino-74hc595-shift-register-and-a-7-Segment-LED-display
http://thecustomgeek.com/2011/06/29/Multiplexing-for-a-7-Year-Old/
const int latchPin = 5; PIN conectado al Pin 12 del 74HC595 (Latch)
const int dataPin = 6; PIN conectado al Pin 14 del 74HC595 (datos)
const int clockPin = 7; PIN conectado al Pin 11 del 74HC595 (reloj)
int upPin = 12; pulsador conectado al pin 12
int downPin = 13; pulsador conectado al pin 12
int currUpState = 1; inicializar currUpState tan alto
int currDownState = 1; inicializar currDownState tan alto
int prevUpState = 0;
int prevDownState = 0;
int contador = 0; inicializar contador de cero
números del byte const [10] = / / describir cada dígito en pantalla segmentos 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
{
B11111100,
B01100000,
B11011010,
B11110010,
B01100110,
B10110110,
B10111110,
B11100000,
B11111110,
B11100110,
};
void setup()
{
pinMode (latchPin, salida); Set de pins de SR a la salida
pinMode (clockPin, salida);
pinMode (dataPin, salida);
pinMode (upPin, entrada); Juegos pin 12 como entrada de pulsador
pinMode (downPin, entrada); Juegos pin 13 como entrada de pulsador
}
void loop()
{
currUpState = digitalRead(upPin);
Si (prevUpState! = currUpState) / / ha cambiado el estado de
{/ / ALTO a bajo o viceversa
prevUpState = currUpState;
Si (currUpState == HIGH) / / si se presiona el botón
contador ++; incrementar el contador en uno
Delay(1);
}
if(Counter > 8)
contador = 1;
Show(Numbers[Counter]); Mostrar el dígito actual
currDownState = digitalRead(downPin);
Si (prevDownState! = currDownState) / / ha cambiado el estado de
{/ / ALTO a bajo o viceversa
prevDownState = currDownState;
Si (currDownState == HIGH) / / si se presiona el botón
contador = 1; decremento el contador por uno
Delay(1);
}
if(Counter < 0)
contador ++;
Show(Numbers[Counter]); Mostrar el dígito actual
}
void Mostrar (número de bytes)
{
Usar un bucle y un AND bit a bit para pasar cada bit que compone
los siete segmentos pantalla (de izquierda a derecha, A = > G) y
para ver si debe estar en o no
para (int j = 0; j < = 7; j ++)
{
byte toWrite = número de & (B10000000 >> j);
{if(!toWrite)}
continuar;
} / / Si todos los bits son 0 entonces no hay punto de escribir en el registro de desplazamiento, para salir y pasar al siguiente segmento.
shiftIt(toWrite); De lo contrario cambia de puesto en el registro
}
}
void shiftIt (datos del octeto)
{
digitalWrite (latchPin, bajo); Definir latchPin baja durante estos 8 bits de sincronización el registro
para (int k = 0; k < = 7; k ++)
{
digitalWrite (clockPin, LOW); clockPin baja antes de enviar un poco
Si (datos & (1 << k))
{
digitalWrite (dataPin, HIGH); "encender"
}
otra cosa
{
digitalWrite (dataPin, LOW); "apague"
}
digitalWrite (clockPin, HIGH); y del reloj de la broca
}
digitalWrite (clockPin, LOW); dejar de cambiar los datos
digitalWrite (latchPin, HIGH); establecer latchPin en alto para bloquear y enviar datos
}