Display date and time

Dependencies:   TextLCD mbed

Fork of RELOJ_CALENDARIO by Rafael Adalberto Encinas Rodriguez

Files at this revision

API Documentation at this revision

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