Como parte del proyecto tengo un display de 4 dígitos de 7 segmentos que me muestran un tiempo. Al final, mi proyecto tiene más cosas de las esperadas (con lo que usaba todas las entradas y salidas posibles y tengo que ganar entradas y salidas de alguna manera.he ahorrado 5 entradas usando una sola analogica para los diferentes pulsadores que tengo. Ahora quiero ganar salidas. Mi display usa 11 salidas (7 segmentos y 4 de control (el punto lo he hecho fijo por hardware) Había pensado en ganar 3 salidas, que las usaría con un multiplexor para tener las 5 que necesito. Estas 3 salidas saldrían de las salidas de los 7 segmentos. Usaría 4 salidas y un conversor bcd7 segmentos del tipo :74ls48 o 74LS247 – 74LS248 – 74LS249.
Ahora bien, el software.. ahrora mismo esta es la parte de codigo del display
byte Digit[10][8] =
{ { 0,0,0,0,0,0,1,0 }, // 0
{ 1,0,0,1,1,1,1,0 }, // 1
{ 0,0,1,0,0,1,0,0 }, // 2
{ 0,0,0,0,1,1,0,0 }, // 3
{ 1,0,0,1,1,0,0,0 }, // 4
{ 0,1,0,0,1,0,0,0 }, // 5
{ 0,1,0,0,0,0,0,0 }, // 6
{ 0,0,0,1,1,1,1,0 }, // 7
{ 0,0,0,0,0,0,0,0 }, // 8
{ 0,0,0,1,1,0,0,0 } // 9
};
void Display(int pos, int N){
digitalWrite(9 ,LOW); // Apaga todos los digitos
digitalWrite(10,LOW);
digitalWrite(11,LOW);
digitalWrite(12,LOW);
for (int i= 0 ; i<8 ; i++)
digitalWrite(i+2 , Digit[N][i]) ;
digitalWrite(pos + 9, HIGH); // Enciende el digito pos
}
como no se me dan muy bien las arrays... ¿debería ser así?:
byte Digit[10][4] = {
{ 0,0,0,0 }, // 0
{ 0,0,0,1 }, // 1
{ 0,0,1,0 }, // 2
{ 0,0,1,1 }, // 3
{ 0,1,0,0 }, // 4
{ 0,1,0,1 }, // 5
{ 0,1,1,0 }, // 6
{ 0,1,1,1 }, // 7
{ 1,0,0,0 }, // 8
{ 1,0,0,1 } // 9
};
void Display(int pos, int N){
digitalWrite(9 ,LOW); // Apaga todos los digitos
digitalWrite(10,LOW);
digitalWrite(11,LOW);
digitalWrite(12,LOW);
for (int i= 0 ; i<8 ; i++) // me voy moviendo por el array
digitalWrite(i+5 , Digit[N][i]) ; // empiezo la salida en la salida 5
digitalWrite(pos + 9, HIGH); // Enciende el digito pos
}
Usaría las salidas 5,6,7,8 para el BCD y las salidas 9,10,11,12 para el control