Display date and time

Dependencies:   TextLCD mbed

Fork of RELOJ_CALENDARIO by Rafael Adalberto Encinas Rodriguez

Committer:
a00958821
Date:
Wed Oct 26 16:09:32 2016 +0000
Revision:
1:b2f18f7519f5
Parent:
0:647f48065f96
Lab 6 ejercicio 1 y 2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rafaelencinas94 0:647f48065f96 1 #include "mbed.h"
rafaelencinas94 0:647f48065f96 2 #include "TextLCD.h"
rafaelencinas94 0:647f48065f96 3
a00958821 1:b2f18f7519f5 4 Ticker timer; //Timer para actualizar la hora
a00958821 1:b2f18f7519f5 5 Ticker timerLCD; //Timer para imprimir en pantalla
rafaelencinas94 0:647f48065f96 6 TextLCD lcd(D2,D3,D4,D5,D6,D7);
rafaelencinas94 0:647f48065f96 7
a00958821 1:b2f18f7519f5 8 DigitalOut col1 (D8);
a00958821 1:b2f18f7519f5 9 DigitalOut col2 (D9);
a00958821 1:b2f18f7519f5 10 DigitalOut col3 (D10);
a00958821 1:b2f18f7519f5 11 DigitalIn fila1 (A5);
a00958821 1:b2f18f7519f5 12 DigitalIn fila2 (A4);
a00958821 1:b2f18f7519f5 13 DigitalIn fila3 (A3);
a00958821 1:b2f18f7519f5 14 DigitalIn fila4 (A2);
a00958821 1:b2f18f7519f5 15
a00958821 1:b2f18f7519f5 16 int sec=0; //conteo de segundo
a00958821 1:b2f18f7519f5 17 int min=0; //conteo de minutos
a00958821 1:b2f18f7519f5 18 int hora=0; //conteo de horas
a00958821 1:b2f18f7519f5 19 int dia=0; //conteo de dias
a00958821 1:b2f18f7519f5 20 int mes=0; //conteo de meses
a00958821 1:b2f18f7519f5 21 int ano=0; //conteo de años
rafaelencinas94 0:647f48065f96 22
a00958821 1:b2f18f7519f5 23 void calendario();
a00958821 1:b2f18f7519f5 24 void mostrarFecha();
a00958821 1:b2f18f7519f5 25 void apagarTeclado();
a00958821 1:b2f18f7519f5 26 int teclado();
rafaelencinas94 0:647f48065f96 27
rafaelencinas94 0:647f48065f96 28 int main() {
a00958821 1:b2f18f7519f5 29 int x;
a00958821 1:b2f18f7519f5 30 while(1){ //primero vamos a pedir el año al usuario
a00958821 1:b2f18f7519f5 31 lcd.locate(0,0); //localiza la pantalla en el primer renglon y primera columna
a00958821 1:b2f18f7519f5 32 lcd.printf("Ano: (# enter)");
a00958821 1:b2f18f7519f5 33 x = teclado(); //detecta el numero ingresado por el usuario
a00958821 1:b2f18f7519f5 34 wait(.25); //espera para el rebote del teclado
a00958821 1:b2f18f7519f5 35 if (x == 11) //Esta tecla es el enter, sale del while
a00958821 1:b2f18f7519f5 36 {
a00958821 1:b2f18f7519f5 37 break;
a00958821 1:b2f18f7519f5 38 }
a00958821 1:b2f18f7519f5 39 if (x == 10) //Esta tecla no hace nada, por lo tanto si se preciona no se hace nada
a00958821 1:b2f18f7519f5 40 {}
a00958821 1:b2f18f7519f5 41 else
a00958821 1:b2f18f7519f5 42 {
a00958821 1:b2f18f7519f5 43 ano = (ano*10) + x; //Multiplica por 10 el valor previo para agregar el siguiente digito al final
a00958821 1:b2f18f7519f5 44 }
a00958821 1:b2f18f7519f5 45 lcd.locate(0,1); // Localiza la pantalla en la segunda columna
a00958821 1:b2f18f7519f5 46 lcd.printf("%d",ano); //imprime el valor ingresado por el usuario
a00958821 1:b2f18f7519f5 47 }
a00958821 1:b2f18f7519f5 48
a00958821 1:b2f18f7519f5 49 lcd.cls(); //limpiamos la pantalla y repetirmos para mes, dia, hora y minutos
a00958821 1:b2f18f7519f5 50
a00958821 1:b2f18f7519f5 51 while(1){ //meses
a00958821 1:b2f18f7519f5 52 lcd.locate(0,0);
a00958821 1:b2f18f7519f5 53 lcd.printf("Mes: (# enter)");
a00958821 1:b2f18f7519f5 54 x = teclado();
a00958821 1:b2f18f7519f5 55 wait(.25);
a00958821 1:b2f18f7519f5 56 if (x == 11)
a00958821 1:b2f18f7519f5 57 {
a00958821 1:b2f18f7519f5 58 break;
a00958821 1:b2f18f7519f5 59 }
a00958821 1:b2f18f7519f5 60 if (x == 10)
a00958821 1:b2f18f7519f5 61 {}
a00958821 1:b2f18f7519f5 62 else
a00958821 1:b2f18f7519f5 63 {
a00958821 1:b2f18f7519f5 64 mes = (mes*10) + x;
a00958821 1:b2f18f7519f5 65 }
a00958821 1:b2f18f7519f5 66 lcd.locate(0,1);
a00958821 1:b2f18f7519f5 67 lcd.printf("%d",mes);
a00958821 1:b2f18f7519f5 68 }
a00958821 1:b2f18f7519f5 69
a00958821 1:b2f18f7519f5 70 lcd.cls();
a00958821 1:b2f18f7519f5 71
a00958821 1:b2f18f7519f5 72 while(1){ //dias
a00958821 1:b2f18f7519f5 73 lcd.locate(0,0);
a00958821 1:b2f18f7519f5 74 lcd.printf("Dia: (# enter)");
a00958821 1:b2f18f7519f5 75 x = teclado();
a00958821 1:b2f18f7519f5 76 wait(.25);
a00958821 1:b2f18f7519f5 77 if (x == 11)
a00958821 1:b2f18f7519f5 78 {
a00958821 1:b2f18f7519f5 79 break;
a00958821 1:b2f18f7519f5 80 }
a00958821 1:b2f18f7519f5 81 if (x == 10)
a00958821 1:b2f18f7519f5 82 {}
a00958821 1:b2f18f7519f5 83 else
a00958821 1:b2f18f7519f5 84 {
a00958821 1:b2f18f7519f5 85 dia = (dia*10) + x;
a00958821 1:b2f18f7519f5 86 }
a00958821 1:b2f18f7519f5 87 lcd.locate(0,1);
a00958821 1:b2f18f7519f5 88 lcd.printf("%d",dia);
a00958821 1:b2f18f7519f5 89 }
a00958821 1:b2f18f7519f5 90
a00958821 1:b2f18f7519f5 91 lcd.cls();
a00958821 1:b2f18f7519f5 92
a00958821 1:b2f18f7519f5 93 while(1){ //horas
a00958821 1:b2f18f7519f5 94 lcd.locate(0,0);
a00958821 1:b2f18f7519f5 95 lcd.printf("Hora: (# enter)");
a00958821 1:b2f18f7519f5 96 x = teclado();
a00958821 1:b2f18f7519f5 97 wait(.25);
a00958821 1:b2f18f7519f5 98 if (x == 11)
a00958821 1:b2f18f7519f5 99 {
a00958821 1:b2f18f7519f5 100 break;
a00958821 1:b2f18f7519f5 101 }
a00958821 1:b2f18f7519f5 102 if (x == 10)
a00958821 1:b2f18f7519f5 103 {}
a00958821 1:b2f18f7519f5 104 else
a00958821 1:b2f18f7519f5 105 {
a00958821 1:b2f18f7519f5 106 hora = (hora*10) + x;
a00958821 1:b2f18f7519f5 107 }
a00958821 1:b2f18f7519f5 108 lcd.locate(0,1);
a00958821 1:b2f18f7519f5 109 lcd.printf("%d",hora);
a00958821 1:b2f18f7519f5 110 }
a00958821 1:b2f18f7519f5 111
a00958821 1:b2f18f7519f5 112 lcd.cls();
a00958821 1:b2f18f7519f5 113
a00958821 1:b2f18f7519f5 114 while(1){ // minutos
a00958821 1:b2f18f7519f5 115 lcd.locate(0,0);
a00958821 1:b2f18f7519f5 116 lcd.printf("Min: (# enter)");
a00958821 1:b2f18f7519f5 117 x = teclado();
a00958821 1:b2f18f7519f5 118 wait(.25);
a00958821 1:b2f18f7519f5 119 if (x == 11)
a00958821 1:b2f18f7519f5 120 {
a00958821 1:b2f18f7519f5 121 break;
a00958821 1:b2f18f7519f5 122 }
a00958821 1:b2f18f7519f5 123 if (x == 10)
a00958821 1:b2f18f7519f5 124 {}
a00958821 1:b2f18f7519f5 125 else
a00958821 1:b2f18f7519f5 126 {
a00958821 1:b2f18f7519f5 127 min = (min*10) + x;
a00958821 1:b2f18f7519f5 128 }
a00958821 1:b2f18f7519f5 129 lcd.locate(0,1);
a00958821 1:b2f18f7519f5 130 lcd.printf("%d",min);
a00958821 1:b2f18f7519f5 131 }
a00958821 1:b2f18f7519f5 132
a00958821 1:b2f18f7519f5 133 ////////////////////////////////////////////////////////////////
a00958821 1:b2f18f7519f5 134
a00958821 1:b2f18f7519f5 135 lcd.locate(0,1);
a00958821 1:b2f18f7519f5 136 timer.attach(&calendario, 1); //es el timer que llama a la funcion que actualiza la fecha, el 1 significa que se llama cada segundo
a00958821 1:b2f18f7519f5 137 timerLCD.attach(&mostrarFecha, .1); //Este timer se usa para actualizar la pantalla, la funcion se llama cada 0.1 segundos
a00958821 1:b2f18f7519f5 138 //El timer del calendario puede ser llamado mucho mas rapido que el de la pantalla, asi logramos que el tiempo pase mas rapido
a00958821 1:b2f18f7519f5 139 //La pantalla debe estar aparte ya que necesita cierto tiempo para poder mostrar el mensaje, es por eso que no puede llamarse tan seguido
a00958821 1:b2f18f7519f5 140
a00958821 1:b2f18f7519f5 141 }
rafaelencinas94 0:647f48065f96 142
a00958821 1:b2f18f7519f5 143 int teclado()
a00958821 1:b2f18f7519f5 144 {
a00958821 1:b2f18f7519f5 145 apagarTeclado(); //Apagamos el teclado al principio por si acaso
a00958821 1:b2f18f7519f5 146 while(1){ // Loop que se repetirá infinitamente
a00958821 1:b2f18f7519f5 147
a00958821 1:b2f18f7519f5 148 col1 = 1; // Polarizamos la primera columna
a00958821 1:b2f18f7519f5 149 if (fila1 == 1){ //Verificamos el estado de la fila 1
a00958821 1:b2f18f7519f5 150 return(1);//Si la fila 1 está encendida cuando la columna 1 fue
a00958821 1:b2f18f7519f5 151 }
a00958821 1:b2f18f7519f5 152 if (fila2 == 1){ //Verificamos el estado de la fila 2
a00958821 1:b2f18f7519f5 153 return(4);//Si esta encendida imprimimos un 4
a00958821 1:b2f18f7519f5 154 }
a00958821 1:b2f18f7519f5 155 if (fila3 == 1){
a00958821 1:b2f18f7519f5 156 return(7);
a00958821 1:b2f18f7519f5 157 }
a00958821 1:b2f18f7519f5 158 if (fila4 == 1){
a00958821 1:b2f18f7519f5 159 return(10);
a00958821 1:b2f18f7519f5 160 }
a00958821 1:b2f18f7519f5 161 apagarTeclado(); //Apagamos todas las columnas
a00958821 1:b2f18f7519f5 162 col2 = 1; // Encendemos la siguiente columna y repetimos
a00958821 1:b2f18f7519f5 163 if (fila1 == 1){
a00958821 1:b2f18f7519f5 164 return(2);
a00958821 1:b2f18f7519f5 165 }
a00958821 1:b2f18f7519f5 166 if (fila2 == 1){
a00958821 1:b2f18f7519f5 167 return(5);
a00958821 1:b2f18f7519f5 168 }
a00958821 1:b2f18f7519f5 169 if (fila3 == 1){
a00958821 1:b2f18f7519f5 170 return(8);
a00958821 1:b2f18f7519f5 171 }
a00958821 1:b2f18f7519f5 172 if (fila4 == 1){
a00958821 1:b2f18f7519f5 173 return(0);
a00958821 1:b2f18f7519f5 174 }
a00958821 1:b2f18f7519f5 175 apagarTeclado();
a00958821 1:b2f18f7519f5 176 col3 = 1;
a00958821 1:b2f18f7519f5 177 if (fila1 == 1){
a00958821 1:b2f18f7519f5 178 return(3);
a00958821 1:b2f18f7519f5 179 }
a00958821 1:b2f18f7519f5 180 if (fila2 == 1){
a00958821 1:b2f18f7519f5 181 return(6);
a00958821 1:b2f18f7519f5 182 }
a00958821 1:b2f18f7519f5 183 if (fila3 == 1){
a00958821 1:b2f18f7519f5 184 return(9);
a00958821 1:b2f18f7519f5 185 }
a00958821 1:b2f18f7519f5 186 if (fila4 == 1){
a00958821 1:b2f18f7519f5 187 return(11);
a00958821 1:b2f18f7519f5 188 }
a00958821 1:b2f18f7519f5 189 apagarTeclado();
a00958821 1:b2f18f7519f5 190 }
a00958821 1:b2f18f7519f5 191 }
rafaelencinas94 0:647f48065f96 192
a00958821 1:b2f18f7519f5 193 void mostrarFecha() //Esta funcion solo se encarga de imprimir en pantalla
a00958821 1:b2f18f7519f5 194 {
a00958821 1:b2f18f7519f5 195 lcd.cls();
a00958821 1:b2f18f7519f5 196
a00958821 1:b2f18f7519f5 197 lcd.printf("%02d/%02d/%02d",ano,mes,dia); //Todas las variables son globales
a00958821 1:b2f18f7519f5 198 lcd.locate(0,1); //Imprime la fecha arriba
a00958821 1:b2f18f7519f5 199 lcd.printf("%02d:%02d:%02d",hora,min,sec); //imprime la hora abajo
a00958821 1:b2f18f7519f5 200 }
a00958821 1:b2f18f7519f5 201
a00958821 1:b2f18f7519f5 202 void calendario() //Esta funcion hace los calculos de fecha y hora
rafaelencinas94 0:647f48065f96 203 {
a00958821 1:b2f18f7519f5 204 sec=sec+1; //Cada que se llama la funcion sumamos un segundo
a00958821 1:b2f18f7519f5 205 if(sec==60) //A los 60 segundo sumamon un minutos y regresamos a 0 segundos
rafaelencinas94 0:647f48065f96 206 {
rafaelencinas94 0:647f48065f96 207 min=min+1;
rafaelencinas94 0:647f48065f96 208 sec=00;
rafaelencinas94 0:647f48065f96 209 }
a00958821 1:b2f18f7519f5 210 if(min==60) //A los 60 minutos sumamos una hora y regresamos a 0 minutos
rafaelencinas94 0:647f48065f96 211 {
a00958821 1:b2f18f7519f5 212 hora=hora+1;
rafaelencinas94 0:647f48065f96 213 min=00;
rafaelencinas94 0:647f48065f96 214 }
a00958821 1:b2f18f7519f5 215 if(hora==24) //A las 24 horas sumamos un dia y regresamos a 0 horas
rafaelencinas94 0:647f48065f96 216 {
a00958821 1:b2f18f7519f5 217 hora=0;
rafaelencinas94 0:647f48065f96 218 dia=dia+1;
rafaelencinas94 0:647f48065f96 219 }
a00958821 1:b2f18f7519f5 220 if(mes==1||mes==3||mes==5||mes==7||mes==8||mes==10||mes==12) //Estos son los meses que tienen 31 dias
a00958821 1:b2f18f7519f5 221 {
a00958821 1:b2f18f7519f5 222 if(dia==32) //A los 31 dias sumamos un mes y regresamos los dias a 1
rafaelencinas94 0:647f48065f96 223 {
rafaelencinas94 0:647f48065f96 224 dia=1;
rafaelencinas94 0:647f48065f96 225 mes=mes+1;
rafaelencinas94 0:647f48065f96 226 }
rafaelencinas94 0:647f48065f96 227 }
a00958821 1:b2f18f7519f5 228 if(mes==4||mes==6||mes==9||mes==11) //Estos son los meses con 30 dias
rafaelencinas94 0:647f48065f96 229 {
a00958821 1:b2f18f7519f5 230 if(dia==31)//A los 30 dias sumamos un mes y regresamos los dias a 1
rafaelencinas94 0:647f48065f96 231 {
rafaelencinas94 0:647f48065f96 232 dia=1;
rafaelencinas94 0:647f48065f96 233 mes=mes+1;
rafaelencinas94 0:647f48065f96 234 }
rafaelencinas94 0:647f48065f96 235 }
a00958821 1:b2f18f7519f5 236
a00958821 1:b2f18f7519f5 237 if(mes==2) //Es el unico mes con 28 dias
rafaelencinas94 0:647f48065f96 238 {
rafaelencinas94 0:647f48065f96 239
a00958821 1:b2f18f7519f5 240 if(dia==29) //A los 28 dias sumamos un mes y regresamos los dias a 1
rafaelencinas94 0:647f48065f96 241 {
rafaelencinas94 0:647f48065f96 242 dia=1;
rafaelencinas94 0:647f48065f96 243 mes=mes+1;
rafaelencinas94 0:647f48065f96 244 }
rafaelencinas94 0:647f48065f96 245 }
rafaelencinas94 0:647f48065f96 246
a00958821 1:b2f18f7519f5 247 if(mes==13) //A los 12 meses sumamos un año y regresamos los meses a 1
a00958821 1:b2f18f7519f5 248 {
rafaelencinas94 0:647f48065f96 249 mes=1;
rafaelencinas94 0:647f48065f96 250 ano=ano+1;
rafaelencinas94 0:647f48065f96 251 }
rafaelencinas94 0:647f48065f96 252 }
a00958821 1:b2f18f7519f5 253
a00958821 1:b2f18f7519f5 254 void apagarTeclado()
a00958821 1:b2f18f7519f5 255 {
a00958821 1:b2f18f7519f5 256 col1 = col2 = col3 = 0; //Apaga todas las columnas
a00958821 1:b2f18f7519f5 257 }