collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: Problema com Codigo em C  (Lida 2307 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline fiasgardone

  • Mini Robot
  • *
  • Mensagens: 13
Problema com Codigo em C
« em: 05 de Abril de 2011, 12:15 »
Pessoal tudo bem!

Estor a tentar trabalhar com um GLCD 128X64 pela primeira vez e para primeiro como periféricos tenho um sensor de temperatura Ds1631, um DS1307 para o horario e um teclado 4X4¨!!

O problema è que o é que o ciclo WHILE nõ funciona com os tres parametro do while, ou seja segue em baixo o cilo do qual não funciona
 
Código: [Seleccione]
while(true)
{

ds1307_get_date(day,month,yr,dow);
ds1307_get_time(hrs,min,sec);

sprintf(v_hrs,"%02u",hrs);
glcd_text57(5,5,v_hrs,1,on);
sprintf(v_min,"%02u",min);
glcd_text57(25,5,v_min ,1,on);
sprintf(v_sec,"%02u",sec);
glcd_text57(45,5,v_sec ,1,on);


k=kbd_getc();
if(k!=0)
{
k=k-48;
sprintf(kk,"%02u",k);
glcd_text57(10,35,kk ,1,on);
}

 

delay_ms(750);
adc = read_temp_c();
if (mystring != adc) {
glcd_text57(50, 35, mystring, 1, Off);
sprintf(mystring,"%02.1f",adc);
glcd_text57(50, 35, mystring, 1, ON);
mystring = adc;
}
}
}

Mas se eu retirar aparte do codigo que mostra o teclado funciona bem o relogio e o sensor de temperatura ,como em baixo
Código: [Seleccione]
while(true)
{

ds1307_get_date(day,month,yr,dow);
ds1307_get_time(hrs,min,sec);

sprintf(v_hrs,"%02u",hrs);
glcd_text57(5,5,v_hrs,1,on);
sprintf(v_min,"%02u",min);
glcd_text57(25,5,v_min ,1,on);
sprintf(v_sec,"%02u",sec);
glcd_text57(45,5,v_sec ,1,on);

 

delay_ms(750);
adc = read_temp_c();
if (mystring != adc) {
glcd_text57(50, 35, mystring, 1, Off);
sprintf(mystring,"%02.1f",adc);
glcd_text57(50, 35, mystring, 1, ON);
mystring = adc;
}
}
}

Se ponho o codigo do teclado no WHILE só funciona dentro dum for()
Código: [Seleccione]
For(;;){
k=kbd_getc();
if(k!=0)
{
k=k-48;
sprintf(kk,"%02u",k);
glcd_text57(10,35,kk ,1,on);
}
}
SE ponho a parte do codio do teclado com o for () juntamente com os outro paramentros no mesmo ciclo WHILE só funciona a parte do teclado o resto fica bloqueado!!
Algem me pode ajudar a resolver isto ,eu jà não tenho conhecimento para mais !!

O Codigo completo è este!!
Código: [Seleccione]
#include <18f452.h>                    //PIC A UTILIZAR
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS                       //High speed Osc (> 4mhz)
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //Reset when brownout detected
#FUSES NOPUT                    //No Power Up Timer
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
                              //CRISTAL
#use delay(clock=8000000)               //A 8MHZ

#include <HDM64GS12.c>
#include <graphics.c>
#include <math.h>

#include <JJJDS1631.c>
#include <RTCC_DS1307.c>
#include <FLEX_KBD4X4.c>

#use standard_io(a)
#use standard_io(e)
#use standard_io(c)


#define DAL_SCL PIN_C2
#define DAL_SDA PIN_C3

BYTE sec,min,hrs,day,month,yr,dow;

char  v_sec[2]; //
char  v_min[2];  //
char  v_hrs[2];
char  v_day[2];
char  v_month[2];
char  v_yr[2];
char  v_dow[2];
char  kk[2];
char  ponto[2]=":";
char mystring[20];
float adc;
int i,k=0;

main()
{
byte old_sec = 0xFF;
//BYTE sec,min,hrs,day,month,yr,dow;
setup_ccp1(ccp_off);
setup_ccp2(ccp_off);

kbd_init();//inicilaliza o teclado
delay_ms(100);
init_temp();//inicializa a temperatura
ds1307_init();//inicializa calendario

glcd_init(ON); // iniciamos o lcd
glcd_fillScreen(OFF); //LIMPAMOS

ds1307_set_date_time(15,6,5,2,22,35,00);

glcd_rect(0,0,127,15,0,1);
glcd_text57(18,5,ponto,1,on);
glcd_text57(38,5,ponto,1,on);

while(true)
{

ds1307_get_date(day,month,yr,dow);
ds1307_get_time(hrs,min,sec);

sprintf(v_hrs,"%02u",hrs);
glcd_text57(5,5,v_hrs,1,on);
sprintf(v_min,"%02u",min);
glcd_text57(25,5,v_min ,1,on);
sprintf(v_sec,"%02u",sec);
glcd_text57(45,5,v_sec ,1,on);

For(;;){ /// com o for só funciona o teclado
k=kbd_getc();
if(k!=0)
{
k=k-48;
sprintf(kk,"%02u",k);
glcd_text57(10,35,kk ,1,on);
}
}
 

delay_ms(750);
adc = read_temp_c();
if (mystring != adc) {
glcd_text57(50, 35, mystring, 1, Off);
sprintf(mystring,"%02.1f",adc);
glcd_text57(50, 35, mystring, 1, ON);
mystring = adc;
}
}
}

Se não foi claro em algum ponto estejam a vontade em perguntar !!
desde jà agradeço