Semaforo y contador

Buenos dias, hace una semana estoy intentando hacer un cruce de semaforos con contador en pic. La verdad es que se me esta complicando muchocon el tema del multiplexado (debe ser asi). Si pueden ser tan generosos de proporcionarme un codigo que ya tengan (parecido) como para guiarme o pasarme un tutorial bien especifico donde pueda guiarme se los agradeceria mucho, ya que los que encontre solo proporcionan el .hex y no puedo ver el codigo! Gracias!
referencias:
El tiempo en que esten en rojo, verde o amarillo me da igual ya que luego lo puedo modificar en el codigo
Los display los deje sin conectar para que si alguno hace el codigo le sea mas facil acomodarlo como quiere
YQFzq
...
 

Adjuntos

  • Captura.PNG
    Captura.PNG
    63.4 KB · Visitas: 27
Hola, tengo que entregar esto mañana a la mañana y se me acabaron los recursos, ya no se que mas intentar. Me cuesta decirlo pero me doy por vencido. No logro hacer que funcione bien. Por favor alguien que sea amable y me ayude a terminar esto, no es complicado es algún problema con un if. ...
Código:
#include "C:\Users\Lauty Cavichia\Desktop\20-11\SEMAFORO.h"
int x;
INT g;
int aux=0;
int uni3=1;
int uni4=5;
int dec3=3;
int dec4=3;
int dec=3;
int dec2=3;
int uni=5;
int uni2=1;
int tiempo=10;
int display[10]={63,6,91,79,102,109,125,7,127,103};


void main()
{

   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);

   // TODO: USER CODE!!
while(1){
for (x=0;x<20;x++){
output_a(0b01);
output_e(0b01);
output_b(display[uni]);
output_d(display[uni2]);
delay_ms(tiempo);
output_a(0b10);
output_e(0b10);
output_b(display[dec]);
output_d(display[dec2]);
delay_ms(tiempo);
}
if (dec>0&&uni>4){
output_c(33);
}
uni--;

uni2--;
if (uni==-1){
dec--;
uni=9;}
if (uni2==-1){
dec2--;
uni2=9;}
if (dec<1&&uni<=4){
uni2=0;
output_e(0b01);
output_d(display[uni2]);
delay_ms(5);
output_e(0b10);
output_d(display[uni2]);
delay_ms(5);
output_c(17);
}


uni3=1;
dec3=3;
uni4=5;
dec4=3;





while (dec==0&&uni==0){

for (g=0;g<20;g++){//output_c(12);
output_a(0b01);
output_e(0b01);
output_b(display[uni3]);
output_d(display[uni4]);
delay_ms(tiempo);
output_a(0b10);
output_e(0b10);
output_b(display[dec3]);
output_d(display[dec4]);
delay_ms(tiempo);
}
if (dec4>0&&uni4>4){
output_c(12);
}

uni3--;
uni4--;
if (uni3==-1){
dec3--;
uni3=9;}
if (uni4==-1){
dec4--;
uni4=9;}
if (dec4<1&&uni4<=4){
for(aux=0;aux<10;aux++){
output_c(34);uni3=0;
output_e(0b01);
output_b(display[uni3]);
delay_ms(5);
output_e(0b10);
output_b(display[uni3]);
delay_ms(10);



}
uni=5;
dec=3;
uni2=1;
dec2=3;
aux=0;
}
}}




}
el problema es cuadno cambia a amarillo, no respeta el tiempo de 4 seg y no se como hacerlo. En el segundo while directamente no lo hace
 

Adjuntos

  • Captura.PNG
    Captura.PNG
    26.5 KB · Visitas: 17
Hola, el problema, es que algunas variables declaradas cómo INT, esperas que tomen el valor -1.
Y sólo pueden contener valores entre 0 y 255.
Las cambie a todas por signed int y nada.


Bien, las cambie para que puedan tener valores negativos, ahora funciona bien el primer amarillo pero no funcionan bien algunos numero en el display. y El segundo amarillo sigue sin funcionar, ese estoy convencido que me falta un if o algo.
 
Última edición por un moderador:
Atrás
Arriba