
Display date and time
Fork of RELOJ_CALENDARIO by
Revision 1:b2f18f7519f5, committed 2016-10-26
- Comitter:
- a00958821
- Date:
- Wed Oct 26 16:09:32 2016 +0000
- Parent:
- 0:647f48065f96
- Commit message:
- Lab 6 ejercicio 1 y 2
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
mbed.bld | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Wed Oct 26 03:46:59 2016 +0000 +++ b/main.cpp Wed Oct 26 16:09:32 2016 +0000 @@ -1,145 +1,257 @@ #include "mbed.h" #include "TextLCD.h" - - -//------------------------------------ -// Hyperterminal configuration -// 9600 bauds, 8-bit data, no parity -//------------------------------------ - -Serial pc(SERIAL_TX, SERIAL_RX); -Ticker timer; +Ticker timer; //Timer para actualizar la hora +Ticker timerLCD; //Timer para imprimir en pantalla TextLCD lcd(D2,D3,D4,D5,D6,D7); -DigitalOut myled(LED1); -int sec=57; -int min=59; -int hor=23; -int dia=24; -int mes=3; -int ano=1999; -int p; -int q; -int r; -int bis; -void calc(); +DigitalOut col1 (D8); +DigitalOut col2 (D9); +DigitalOut col3 (D10); +DigitalIn fila1 (A5); +DigitalIn fila2 (A4); +DigitalIn fila3 (A3); +DigitalIn fila4 (A2); + +int sec=0; //conteo de segundo +int min=0; //conteo de minutos +int hora=0; //conteo de horas +int dia=0; //conteo de dias +int mes=0; //conteo de meses +int ano=0; //conteo de años +void calendario(); +void mostrarFecha(); +void apagarTeclado(); +int teclado(); int main() { + int x; + while(1){ //primero vamos a pedir el año al usuario + lcd.locate(0,0); //localiza la pantalla en el primer renglon y primera columna + lcd.printf("Ano: (# enter)"); + x = teclado(); //detecta el numero ingresado por el usuario + wait(.25); //espera para el rebote del teclado + if (x == 11) //Esta tecla es el enter, sale del while + { + break; + } + if (x == 10) //Esta tecla no hace nada, por lo tanto si se preciona no se hace nada + {} + else + { + ano = (ano*10) + x; //Multiplica por 10 el valor previo para agregar el siguiente digito al final + } + lcd.locate(0,1); // Localiza la pantalla en la segunda columna + lcd.printf("%d",ano); //imprime el valor ingresado por el usuario + } + + lcd.cls(); //limpiamos la pantalla y repetirmos para mes, dia, hora y minutos + + while(1){ //meses + lcd.locate(0,0); + lcd.printf("Mes: (# enter)"); + x = teclado(); + wait(.25); + if (x == 11) + { + break; + } + if (x == 10) + {} + else + { + mes = (mes*10) + x; + } + lcd.locate(0,1); + lcd.printf("%d",mes); + } + + lcd.cls(); + + while(1){ //dias + lcd.locate(0,0); + lcd.printf("Dia: (# enter)"); + x = teclado(); + wait(.25); + if (x == 11) + { + break; + } + if (x == 10) + {} + else + { + dia = (dia*10) + x; + } + lcd.locate(0,1); + lcd.printf("%d",dia); + } + + lcd.cls(); + + while(1){ //horas + lcd.locate(0,0); + lcd.printf("Hora: (# enter)"); + x = teclado(); + wait(.25); + if (x == 11) + { + break; + } + if (x == 10) + {} + else + { + hora = (hora*10) + x; + } + lcd.locate(0,1); + lcd.printf("%d",hora); + } + + lcd.cls(); + + while(1){ // minutos + lcd.locate(0,0); + lcd.printf("Min: (# enter)"); + x = teclado(); + wait(.25); + if (x == 11) + { + break; + } + if (x == 10) + {} + else + { + min = (min*10) + x; + } + lcd.locate(0,1); + lcd.printf("%d",min); + } + + //////////////////////////////////////////////////////////////// + + lcd.locate(0,1); + timer.attach(&calendario, 1); //es el timer que llama a la funcion que actualiza la fecha, el 1 significa que se llama cada segundo + timerLCD.attach(&mostrarFecha, .1); //Este timer se usa para actualizar la pantalla, la funcion se llama cada 0.1 segundos + //El timer del calendario puede ser llamado mucho mas rapido que el de la pantalla, asi logramos que el tiempo pase mas rapido + //La pantalla debe estar aparte ya que necesita cierto tiempo para poder mostrar el mensaje, es por eso que no puede llamarse tan seguido + + } - timer.attach(&calc, 1); -myled = 1; - } - +int teclado() +{ + apagarTeclado(); //Apagamos el teclado al principio por si acaso + while(1){ // Loop que se repetirá infinitamente + + col1 = 1; // Polarizamos la primera columna + if (fila1 == 1){ //Verificamos el estado de la fila 1 + return(1);//Si la fila 1 está encendida cuando la columna 1 fue + } + if (fila2 == 1){ //Verificamos el estado de la fila 2 + return(4);//Si esta encendida imprimimos un 4 + } + if (fila3 == 1){ + return(7); + } + if (fila4 == 1){ + return(10); + } + apagarTeclado(); //Apagamos todas las columnas + col2 = 1; // Encendemos la siguiente columna y repetimos + if (fila1 == 1){ + return(2); + } + if (fila2 == 1){ + return(5); + } + if (fila3 == 1){ + return(8); + } + if (fila4 == 1){ + return(0); + } + apagarTeclado(); + col3 = 1; + if (fila1 == 1){ + return(3); + } + if (fila2 == 1){ + return(6); + } + if (fila3 == 1){ + return(9); + } + if (fila4 == 1){ + return(11); + } + apagarTeclado(); + } +} -void calc() +void mostrarFecha() //Esta funcion solo se encarga de imprimir en pantalla +{ + lcd.cls(); + + lcd.printf("%02d/%02d/%02d",ano,mes,dia); //Todas las variables son globales + lcd.locate(0,1); //Imprime la fecha arriba + lcd.printf("%02d:%02d:%02d",hora,min,sec); //imprime la hora abajo +} + +void calendario() //Esta funcion hace los calculos de fecha y hora { - myled = !myled; - sec=sec+1; - if(sec==60) + sec=sec+1; //Cada que se llama la funcion sumamos un segundo + if(sec==60) //A los 60 segundo sumamon un minutos y regresamos a 0 segundos { min=min+1; sec=00; } - if(min==60) + if(min==60) //A los 60 minutos sumamos una hora y regresamos a 0 minutos { - hor=hor+1; + hora=hora+1; min=00; } - if(hor==24) + if(hora==24) //A las 24 horas sumamos un dia y regresamos a 0 horas { - hor=0; + hora=0; dia=dia+1; } - // checar si es año bisiesto, vamoa hacer unos calculos alv >:v - if(ano%4==0) - { - p=1; - } - else - { - p=0; - } - - if(ano%100==0) - { - q=0; - } - else - { - q=1; - } - if(ano%400==0) - { - r=1; - } - else - { - r=0; - } - if(p*(q+r)>=1) - { - bis=1; - } - else - { - bis=0; - } - // si bis=1 es bisieto, febrero tiene 29 dias - //if para checar si es mes de 30 o 31 dias - if(mes==1||mes==3||mes==5||mes==7||mes==8||mes==10||mes==12) - { - if(dia==32) + if(mes==1||mes==3||mes==5||mes==7||mes==8||mes==10||mes==12) //Estos son los meses que tienen 31 dias + { + if(dia==32) //A los 31 dias sumamos un mes y regresamos los dias a 1 { dia=1; mes=mes+1; } } - if(mes==4||mes==6||mes==9||mes==11) + if(mes==4||mes==6||mes==9||mes==11) //Estos son los meses con 30 dias { - if(dia==31) + if(dia==31)//A los 30 dias sumamos un mes y regresamos los dias a 1 { dia=1; mes=mes+1; } } - if(bis==0)//año no bisiesto - { - if(mes==2) + + if(mes==2) //Es el unico mes con 28 dias { - if(dia==29) + if(dia==29) //A los 28 dias sumamos un mes y regresamos los dias a 1 { dia=1; mes=mes+1; } } - } - if(bis==1) - { - if(mes==2) - { - - if(dia==30) - { - dia=1; - mes=mes+1; - } - } - } - if(mes==13) - { + if(mes==13) //A los 12 meses sumamos un año y regresamos los meses a 1 + { mes=1; ano=ano+1; } - - - lcd.cls(); - - lcd.printf("%02d/%02d/%02d",ano,mes,dia); - lcd.locate(0,1); - lcd.printf("%02d:%02d:%02d",hor,min,sec); - } + +void apagarTeclado() +{ + col1 = col2 = col3 = 0; //Apaga todas las columnas +} \ No newline at end of file
--- a/mbed.bld Wed Oct 26 03:46:59 2016 +0000 +++ b/mbed.bld Wed Oct 26 16:09:32 2016 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/mbed_official/code/mbed/builds/abea610beb85 \ No newline at end of file +http://mbed.org/users/mbed_official/code/mbed/builds/25aea2a3f4e3 \ No newline at end of file