Reloj Digital Programable.

Hola amigos. Estoy realizando un reloj programable con 6 display 7 segmentos. El problema con el multiplexeo es que los displays parpadean. Ademas de eso quiero anexarle unos pulsadores para programar cada Hora-Minuto-Segundo. Agradezco su ayuda ..
PD: No se como detener el display de las horas (El del pin 3 de tal manera que el reloj llegue hasta 12 am o pm y salte a 1 am o pm de nuevo)
Gracias! :stuck_out_tongue: Anexo codigo:

int contador1=0; // Contadores para Aumentar el tiempo
int contador2=0;
int contador3=0;
int contador4=0;
int contador5=0;
int contador6=0;

int retener=0;// Retiene cada digito el tiempo (segundo, minuto, hora)
int segundo=5;//TIEMPO DE MULTIPLEXEO
int minuto=4;//
int hora=3;//

void setup() {
pinMode(2,OUTPUT);// Display horas
pinMode(3,OUTPUT); // Display horas
pinMode(4, OUTPUT); // Display minutos
pinMode(5, OUTPUT);// Display minutos
pinMode(6, OUTPUT);// Display segundos
pinMode (7, OUTPUT);//Display segundos
pinMode(8, OUTPUT);// BCD
pinMode(9, OUTPUT);// BCD
pinMode(10,OUTPUT);// BCD
pinMode(11,OUTPUT);// BCD
}
void loop(){
// Ciclos Para que empieze a pasar el tiempo
for (int contador5=0;contador5<2;contador5++){
for(int contador6=0;contador6<10;contador6++){
for(int contador1=0;contador1<7; contador1++){
for(int contador2=0; contador2<10; contador2++){
for(int contador3=0;contador3<6; contador3++){
for (int contador4=0;contador4<10; contador4++){
for (int retener=0;retener<1;retener++){
// Encendiendo los displays
digitalWrite(3,HIGH);
display6(contador6);
digitalWrite(3,LOW);
digitalWrite(2,HIGH);
display5(contador5);
digitalWrite(2,LOW);
digitalWrite(5,HIGH);
display2(contador2);
digitalWrite(5,LOW);
digitalWrite(4,HIGH);
display1(contador1);
digitalWrite(4,LOW);
digitalWrite(7,HIGH);
display4(contador4);
digitalWrite(7,LOW);
digitalWrite(6,HIGH);
display3(contador3);
digitalWrite(6,LOW);
}
}
}
}
}
}
}
}
void display6(int contador6){
if(contador6==0)
{
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
delay(hora);
}
if(contador6==1)
{
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,HIGH);
delay(hora);
}
if(contador6==2)
{
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,HIGH);
digitalWrite(11,LOW);
delay(hora);
}
if(contador6==3)
{
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
delay(hora);
}
if(contador6==4)
{
digitalWrite(8,LOW);
digitalWrite(9,HIGH);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
delay(hora);
}
if(contador6==5)
{
digitalWrite(8,LOW);
digitalWrite(9,HIGH);
digitalWrite(10,LOW);
digitalWrite(11,HIGH);
delay(hora);
}
if(contador6==6)
{
digitalWrite(8,LOW);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,LOW);
delay(hora);
}
if(contador6==7)
{
digitalWrite(8,LOW);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
delay(hora);
}
if(contador6==8)
{
digitalWrite(8,HIGH);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
delay(hora);
}
if(contador6==9)
{
digitalWrite(8,HIGH);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,HIGH);
delay(hora);
}
}
void display5(int contador5){
if(contador5==0)
{
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
delay(hora);
}
if(contador5==1)
{
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,HIGH);
delay(hora);
}
}

Continuacion de codigo:

void display2(int contador2){
if(contador2==0)
{
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
delay(minuto);
}
if(contador2==1)
{
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,HIGH);
delay(minuto);
}
if(contador2==2)
{
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,HIGH);
digitalWrite(11,LOW);
delay(minuto);
}
if(contador2==3)
{
digitalWrite(9,LOW);
digitalWrite(9,LOW);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
delay(minuto);
}
if(contador2==4)
{
digitalWrite(8,LOW);
digitalWrite(9,HIGH);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
delay(minuto);
}
if(contador2==5)
{
digitalWrite(8,LOW);
digitalWrite(9,HIGH);
digitalWrite(10,LOW);
digitalWrite(11,HIGH);
delay(minuto);
}
if(contador2==6)
{
digitalWrite(8,LOW);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,LOW);
delay(minuto);
}
if(contador2==7)
{
digitalWrite(8,LOW);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
delay(minuto);
}
if(contador2==8)
{
digitalWrite(8,HIGH);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
delay(minuto);
}
if(contador2==9)
{
digitalWrite(14,HIGH);
digitalWrite(15,LOW);
digitalWrite(16,LOW);
digitalWrite(17,HIGH);
delay(minuto);
}
}
void display1(int contador1){
if(contador1==0)
{
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
delay(minuto);
}
if(contador1==1)
{
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,HIGH);
delay(minuto);
}
if(contador1==2)
{
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,HIGH);
digitalWrite(11,LOW);
delay(minuto);
}
if(contador1==3)
{
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
delay(minuto);
}
if(contador1==4)
{
digitalWrite(8,LOW);
digitalWrite(9,HIGH);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
delay(minuto);
}
if(contador1==5)
{
digitalWrite(8,LOW);
digitalWrite(9,HIGH);
digitalWrite(10,LOW);
digitalWrite(11,HIGH);
delay(minuto);
}
if(contador1==6)
{
digitalWrite(8,LOW);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,LOW);
delay(minuto);
}
if(contador1==7)
{
digitalWrite(8,LOW);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
delay(minuto);
}
if(contador1==8)
{
digitalWrite(8,HIGH);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
delay(minuto);
}
if(contador1==9)
{
digitalWrite(8,HIGH);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,HIGH);
delay(minuto);
}
}

void display4(int contador4){
if(contador4==0)
{
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
delay(segundo);
}
if(contador4==1)
{
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,HIGH);
delay(segundo);
}
if(contador4==2)
{
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,HIGH);
digitalWrite(11,LOW);
delay(segundo);
}
if(contador4==3)
{
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
delay(segundo);
}
if(contador4==4)
{
digitalWrite(8,LOW);
digitalWrite(9,HIGH);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
delay(segundo);
}
if(contador4==5)
{
digitalWrite(8,LOW);
digitalWrite(9,HIGH);
digitalWrite(10,LOW);
digitalWrite(11,HIGH);
delay(segundo);
}
if(contador4==6)
{
digitalWrite(8,LOW);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,LOW);
delay(segundo);
}
if(contador4==7)
{
digitalWrite(8,LOW);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
delay(segundo);
}
if(contador4==8)
{
digitalWrite(8,HIGH);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
delay(segundo);
}
if(contador4==9)
{
digitalWrite(8,HIGH);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,HIGH);
delay(segundo);
}
}

void display3(int contador3){
if(contador3==0)
{
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
delay(segundo);
}
if(contador3==1)
{
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,HIGH);
delay(segundo);
}
if(contador3==2)
{
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,HIGH);
digitalWrite(11,LOW);
delay(segundo);
}
if(contador3==3)
{
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
delay(segundo);
}
if(contador3==4)
{
digitalWrite(8,LOW);
digitalWrite(9,HIGH);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
delay(segundo);
}
if(contador3==5)
{
digitalWrite(8,LOW);
digitalWrite(9,HIGH);
digitalWrite(10,LOW);
digitalWrite(11,HIGH);
delay(segundo);
}
if(contador3==6)
{
digitalWrite(8,LOW);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,LOW);
delay(segundo);
}
}

Es que esa programacion es un "churro" del 20 :disappointed_relieved:

Debias de aprender a crear "defines" y "matrices" por un lado y el empleo de bucles "for" y evitar la redundancia.

Por otro lado, estas multiplexando, no puedes emplear delays...

Por otro lado mas tienes un conversor bcd a 7 segmentos, emplea el latch

Por cierto, para poner codigo en el foro emplea el boton que pone "insert Code" cuando escribes el post.

Como consejo, aunque no soy experto ni mucho menos, pero mi consejo sería que uses unos ShiftRegister, con 1 por cada display de 7 Segmentos, no sólo optimizarás el código, sino que será mucho más rápido y no tendrás necesidad de liarte con la "multiplexión"

Amigo, buenos dias, serias tan amable de enviarme el codigo que utilizaste y el diseño en el simulador (ambos los diseños y codigos finales) por favor, me va servir muchisimo en el colegio. te lo agradecere infinitamente

mi correo tvitrust@gmail.com

Mira la fecha del último msg Apr 13, 2013, 02:39 am
nadie te va a responder