Sie sind auf Seite 1von 12

#define config PORTA.

RA0 /*Configuracion Reloj*/

#define up PORTA.RA1 /*Aumentar Valor Reloj*/

#define down PORTA.RA2 /*Reducir Valor Reloj*/

#define set PORTA.RA3 /*Establecer el Display*/

#define configA PORTA.RA4 /*Configuracion Alarma*/

#define Aoff PORTA.RA5 /*Apagar Alarma*/

int i, horas=11, minutos=59, segundos=50, unidad_s,decena_s, unidad_m, decena_m,


unidad_h, decena_h; /*Variables Unidades Decenas de Segundos, Minutos y Horas*/

int pm=1; /*LED PM*/

int pos=0; /*Posicion Displays */

int contador=0; /*Contador para el tiempo*/

const tiempo=10; /*Constante para Establecer el delay */

int seg=0,hor=0,min=0,sA=0,mA=-1,hA=-1,pmA=-1; /*Variables Alarma*/

int cont1=0;

int al=0;

int ac=0;

void display_Hora(); /*Mostrar Hora*/

void tabla(int valor); /*Establecer el numero que se presentará en el Display*/

void config_hora(); /*Configurar Hora*/

void comprobarA(); /*Comparar la hora de la alarma con la hora del display*/

void config_A(); /*Configurar Alarma*/

void main() {

ADCON1 = 0x07; /*Puerto "A" y "E" trabajará de manera digital*/

TRISA = 0xff; /*A entrada*/

TRISB = 0x00; /*B salida*/

TRISC = 0x00; /*C salida*/

TRISD = 0x00; /*D salida*/

PORTB = 0x00; /*Inicialización Salida*/


PORTC = 0x02;

PORTD = 0x00;

while(1){

if(configA==0&&config==0){

ac=0;

if(configA==1){

ac=2;

if(config==1){

ac=1;

switch(ac){

case 0:

display_Hora();

break;

case 1:

config_hora();

break;

case 2:

config_A();

break;

comprobarA();

if(Aoff==1){

sA=-1;

mA=-1;

hA=-1;

pmA=-1;

if(pm==0){ /*Pm es 0, C es 2, Se apaga el LED*/

PORTC = 0x04;
}else { /*Pm es 1, C es 4, Se enciende el LED*/

PORTC = 0x02;

}}

void config_A(){

sA=0;

mA=0;

hA=0;

pmA=0;

pos=1;

while(configA==1){

switch(pos){

case 1: delay_ms(tiempo); /*Delay de 10ms*/

PORTB=8;

tabla(mA%10);

delay_ms(tiempo); /*Delay de 10ms*/

PORTB=4;

tabla(mA/10);

if(up==1){

while(up==1);

mA++;

if(mA>59){

mA=0;

if(down==1){

while(down==1);

mA--;

if(mA<0){
mA=59;

break;

case 2: delay_ms(tiempo); /*Delay de 10ms*/

PORTB=2;

tabla(hA%10);

delay_ms(tiempo); /*Delay de 10ms*/

PORTB=1;

tabla(hA/10);

if(up==1){

while(up==1);

hA++;

if(hA>11){

hA=0;

if(down==1){

while(down==1);

hA--;

if(hA<0){

hA=11;

break;

case 3: delay_ms(tiempo);

delay_ms(tiempo);

while(up==1){

if(pmA==0){ /*Si Pm es 0, C es 2*/

PORTC = 0x02;

}else { /*Si Pm es 1, C es 4*/


PORTC = 0x04;

pmA=0;}}

while(down==1){

if(pmA==0){ /*Si Pm es 0, C es 2*/

PORTC = 0x02;

pmA=1;

}else { /*Si Pm es 1, C es 4*/

PORTC = 0x04;

pmA=0;}

break;

if(set==1){

while(set==1);

pos++; /*Siguiente display*/

if(pos>3)

pos=1;

if(pos<1)

pos=3;

delay_ms(tiempo);

cont1++;

if(cont1==2){

contador++;

if(contador==16){ /*Si contador es 16 se aumentara un segundo*/

contador=0;

segundos++;

if(segundos==60){ /*Si segundos es 60 se aumentara un minuto*/

segundos=0;

minutos++;

if(minutos == 60){ /*Si minutos es 60 se aumentara una hora*/


minutos=0;

horas++;

if(horas==12){ /*Si horas son 12 se reiniciaran a 0*/

horas=0;

if(pm==0){

PORTC = 0x02; /*Si Pm es 0, C es 2*/

pm=1;

}else {

PORTC = 0x04; /*Si Pm es 1, C es 4*/

pm=0;

} }

void config_hora(){

while(config==1){

switch(pos){ /*Mover por display*/

case 0: unidad_s = segundos%10; /*Residuo de los segundos*/

PORTB = 32; /*Primer caso=Ultimo display, Derecha son las unidades


de los segundos*/

tabla(unidad_s); /*Mostrar unidad segundos*/

delay_ms(tiempo); /*Delay de 10ms*/

decena_s = segundos/10; /*Cociente de los segundos*/

PORTB = 16;

tabla(decena_s);

if(up==1){
while(up==1); /*Mientras la variable up sea 1*/

segundos++;

if(segundos>59){

segundos=0;

if(down==1){

while(down==1); /*Mientras la variable down sea 1*/

segundos--;

if(segundos<0){

segundos=59;

break;

case 1: unidad_m = minutos%10;

decena_m = minutos/10;

PORTB=8;

tabla(unidad_m);

delay_ms(tiempo);

PORTB=4;

tabla(decena_m);

if(up==1){

while(up==1);

minutos++;

if(minutos>59){

minutos=0;

if(down==1){

while(down==1);
minutos--;

if(minutos<0){

minutos=59;

break;

case 2: unidad_h = horas%10;

decena_h = horas/10;

PORTB=2;

tabla(unidad_h);

delay_ms(tiempo);

PORTB=1;

tabla(decena_h);

if(up==1){

while(up==1);

horas++;

if(horas>11){

horas=0;

if(down==1){

while(down==1);

horas--;

if(horas<0){

horas=11;

break;

case 3:

while(up==1){

if(pm==0){ /*Si Pm es 0, C es 2*/


PORTC = 0x02;

pm=1;

}else { /*Si Pm es 1, C es 4*/

PORTC = 0x04;

pm=0;}}

while(down==1){

if(pm==0){ /*Si Pm es 0, C es 2*/

PORTC = 0x02;

pm=1;

}else { /*Si Pm es 1, C es 4*/

PORTC = 0x04;

pm=0;}

break;

if(set==1){

while(set==1);

pos++; /*Siguiente display */

if(pos>3)

pos=0;

}}}

void display_Hora(){

unidad_s = segundos%10; /*Residuo de los segundos*/

decena_s = segundos/10; /*Cociente de los segundos*/

unidad_m = minutos%10;

decena_m = minutos/10;

unidad_h = horas%10;

decena_h = horas/10;
PORTB = 1; /*Decenas de horas*/

tabla(decena_h);

delay_ms(tiempo);

PORTB = 2; /*Unidad hora*/

tabla(unidad_h);

delay_ms(tiempo);

PORTB = 4; /*Decena minutos*/

tabla(decena_m);

delay_ms(tiempo);

PORTB = 8; /*Unidad minutos*/

tabla(unidad_m);

delay_ms(tiempo);

PORTB = 16; /*Decena segundos*/

tabla(decena_s);

delay_ms(tiempo);

PORTB = 32; /*Unidad segundos*/

tabla(unidad_s);

delay_ms(tiempo);

contador++;

if(contador==16){

contador=0;

segundos++;

if(segundos==60){

segundos=0;
minutos++;

if(al==1){

PORTC=0x08;}

if(minutos == 60){

minutos=0;

horas++;

if(horas==12){

horas=0;

if(pm==0){

PORTC = 0x02;

pm=1;

}else {

PORTC = 0x04;

pm=0;

}}}}}

void comprobarA(){

if(mA==minutos){

if(hA==horas){

if(pmA==pm){

if(pm==0){

PORTC = 0xC;

}else{

PORTC = 0xA;

}}}

void tabla(int valor){ /*Envia el valor para mostrar en el display*/

switch(valor){
case 0: PORTD= 192; break; /*1100 0000*/

case 1: PORTD= 249; break; /*1111 1001*/

case 2: PORTD= 164; break; /*1010 0100*/

case 3: PORTD= 176; break; /*1011 0000*/

case 4: PORTD= 153; break; /*1001 1001*/

case 5: PORTD= 146; break; /*1001 0010*/

case 6: PORTD= 130; break; /*1000 0010*/

case 7: PORTD= 248; break; /*1111 1000*/

case 8: PORTD= 128; break; /*1000 0000*/

case 9: PORTD= 152; break; /*1001 1000*/

Das könnte Ihnen auch gefallen