![](/media/cache/profiles/Pass2.jpg.50x50_q85.jpg)
KL25Z program that calculates the difference in days, hours, minutes, between two dates. Needs a terminal on the PC side to communicate with the program. Terminal must have local echo on. Terminal Data input needs some improvement.
Diff: main.cpp
- Revision:
- 3:add864dd8eab
- Parent:
- 2:1d24f233ac26
- Child:
- 4:b0884b059d7e
diff -r 1d24f233ac26 -r add864dd8eab main.cpp --- a/main.cpp Wed May 13 14:17:28 2015 +0000 +++ b/main.cpp Fri May 22 08:58:12 2015 +0000 @@ -3,9 +3,12 @@ LESEM ENAUTICA 2014 Luis Sousa aluno 11001 */ -#include <stdio.h> +//#include <stdio.h> +#include "mbed.h" +Serial pc(USBTX, USBRX); +int readkbd(void); int bissexto(int ano); int dias_do_mes(int ano,int mes); int dias_do_ano(int ano); @@ -29,6 +32,7 @@ int continuar=1; do { + printf("\r\n"); printf("%c[2J",27); //clrscr(); printf(" ----------------------------------------------------\r\n"); @@ -40,36 +44,40 @@ printf("\n\nIntroducao da Data 1\r\n"); do { printf("\r\nIntroduza o ano da Data 1: (%d-%d): ",limite_ano_min,limite_ano_max); - scanf("%d",&ano_dt1); + //scanf("%d",&ano_dt1); + ano_dt1=readkbd(); if (!((ano_dt1>=limite_ano_min)&&(ano_dt1<=limite_ano_max))) printf("\r\nO ano tem de estar compreendido entre %d e %d ",limite_ano_min,limite_ano_max); } while(!((ano_dt1>=limite_ano_min)&&(ano_dt1<=limite_ano_max))); do { printf("\r\nIntroduza o mes da Data 1: (%d-%d): ",1,12); - scanf("%d",&mes_dt1); + //scanf("%d",&mes_dt1); + mes_dt1=readkbd(); if (!((mes_dt1>=1)&&(mes_dt1<=12))) printf("\r\nO mes tem de estar compreendido entre %d e %d ",1,12); - } while(!((mes_dt1>=1)&&(mes_dt1<=12))); do { printf("\r\nIntroduza o dia da Data 1: (%d-%d): ",1,dias_do_mes(ano_dt1,mes_dt1)); - scanf("%d",&dia_dt1); + //scanf("%d",&dia_dt1); + dia_dt1=readkbd(); if (!((dia_dt1>=1) && (dia_dt1 <= dias_do_mes(ano_dt1,mes_dt1)))) printf("\r\nO dia tem de estar compreendido entre %d e %d ",1,dias_do_mes(ano_dt1,mes_dt1)); } while(!((dia_dt1>=1) && (dia_dt1 <= dias_do_mes(ano_dt1,mes_dt1)))); do { printf("\r\nIntroduza a hora da Data 1: (%d-%d): ",0,23); - scanf("%d",&hora_dt1); + //scanf("%d",&hora_dt1); + hora_dt1=readkbd(); if (!((hora_dt1>=0) && (hora_dt1 <= 23))) printf("\r\nA hora tem de estar compreendida entre %d e %d ",0,23); } while(!((hora_dt1>=0) && (hora_dt1 <= 23))); do { printf("\r\nIntroduza os minutos da Data 1: (%d-%d): ",0,59); - scanf("%d",&min_dt1); + //scanf("%d",&min_dt1); + min_dt1=readkbd(); if (!((min_dt1>=0) && (min_dt1 <= 59))) printf("\r\nOs minutos devem estar compreendidos entre %d e %d ",0,59); } while(!((min_dt1>=0) && (min_dt1 <= 59))); @@ -78,36 +86,40 @@ printf("\r\n\nIntroducao da Data 2"); do { printf("\r\nIntroduza o ano da Data 2: (%d-%d): ",limite_ano_min,limite_ano_max); - scanf("%d",&ano_dt2); + //scanf("%d",&ano_dt2); + ano_dt2=readkbd(); if (!((ano_dt2>=limite_ano_min)&&(ano_dt2<=limite_ano_max))) printf("\r\nO ano tem de estar compreendido entre %d e %d ",limite_ano_min,limite_ano_max); - } while(!((ano_dt2>=limite_ano_min)&&(ano_dt2<=limite_ano_max))); do { printf("\r\nIntroduza o mes da Data 2: (%d-%d): ",1,12); - scanf("%d",&mes_dt2); + //scanf("%d",&mes_dt2); + mes_dt2=readkbd(); if (!((mes_dt2>=1)&&(mes_dt2<=12))) printf("\r\nO mes tem de estar compreendido entre %d e %d ",1,12); } while(!((mes_dt2>=1)&&(mes_dt2<=12))); do { printf("\r\nIntroduza o dia da Data 2: (%d-%d): ",1,dias_do_mes(ano_dt2,mes_dt2)); - scanf("%d",&dia_dt2); + //scanf("%d",&dia_dt2); + dia_dt2=readkbd(); if (!((dia_dt2>=1) && (dia_dt2 <= dias_do_mes(ano_dt2,mes_dt2)))) printf("\r\nO dia tem de estar compreendido entre %d e %d ",1,dias_do_mes(ano_dt2,mes_dt2)); } while(!((dia_dt2>=1) && (dia_dt2 <= dias_do_mes(ano_dt2,mes_dt2)))); do { printf("\r\nIntroduza a hora da Data 2: (%d-%d): ",0,23); - scanf("%d",&hora_dt2); + //scanf("%d",&hora_dt2); + hora_dt2=readkbd(); if (!((hora_dt2>=0) && (hora_dt2 <= 23))) printf("\r\nA hora tem de estar compreendida entre %d e %d ",0,23); } while(!((hora_dt2>=0) && (hora_dt2 <= 23))); do { printf("\r\nIntroduza os minutos da Data 1: (%d-%d): ",0,59); - scanf("%d",&min_dt2); + //scanf("%d",&min_dt2); + min_dt2=readkbd(); if (!((min_dt2>=0) && (min_dt2 <= 59))) printf("\r\nOs minutos devem estar compreendidos entre %d e %d ",0,59); } while(!((min_dt2>=0) && (min_dt2 <= 59))); @@ -259,4 +271,23 @@ + dias_desde_principio_ano(ano2,mes2,dia2); } +int readkbd(void) +{ + int value=0; + int ch=0; + int sair=0; + while (!sair) { //enquanto nao for enter, le + char ch = pc.getc(); + if(ch >= '0' && ch <= '9') { // 0 .. 9? + value = (value * 10) + (ch - '0'); // sim, acumula + pc.putc(ch); + } else { + if (ch==13) sair=1; + //else if (ch==8) printf("\b"); + else printf(">C%i<",ch); + } + } + printf("\r\nValor introduzido: %i",value); + return value; +} \ No newline at end of file