Simons Inserito: 18 maggio 2006 Segnala Share Inserito: 18 maggio 2006 salve a tutti. E' da un po' che lavoro dietro a un progettino di un semplice termometro con ad590 e pic16f876 multiplexando 3 display 7 segmenti... ho sviluppato il programma in C con CCS compiler... purtroppo sono un po' alle prime armi con queste cose e il prog è un po' confusionato..utilizzo la porta C come 7 segmenti, la porta B come enable per i display, inoltre il bit 7 della porta B come "meno" per le temperature negative.questo è il programma... mi sapete dare qualche consiglio per il miglioramento? grazie mille a tutti(se il codice non è di facile comprensione posso aggiungere dei commenti) #include "adconvert.h" BOOLEAN neg; int decimali; float tOut(float ad) { float OUTPUT; int tmp; if(ad<341) { OUTPUT=(abs(((ad*1000)*58.651026)-22497145.66))/1000000; tmp=OUTPUT; decimali=(OUTPUT-tmp)*10; neg=1; } if(ad>=341) { OUTPUT=(abs(((ad*1000)*58.651026)-22497145.66))/1000000; tmp=OUTPUT; decimali=(OUTPUT-tmp)*10; neg=0; } return OUTPUT; } void DisplayOutput(int portb, int portc) { output_b(portb); output_c(portc); } void main() { unsigned char DisplayMatrix[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; int uni,dec,cent,i; float value,tmp,read; PicInit(); set_tris_b(0x00); set_tris_c(0x00); while(1) { read=0; tmp=0; value=0; for(i=0;i<10;i++) { read+=read_adc(); } tmp=read/10; value=tOut(tmp); cent=(value/100); dec=((value-(cent*100))/10); uni=((value-((cent*100)+(dec*10)))); if(neg==1) { DisplayOutput(0x81,~DisplayMatrix[dec]); DisplayOutput(0x82,~DisplayMatrix[uni]^0x80); DisplayOutput(0x84,~DisplayMatrix[decimali]); output_b(0x80); }else{ DisplayOutput(0x01,~DisplayMatrix[dec]); DisplayOutput(0x02,~DisplayMatrix[uni]^0x80); DisplayOutput(0x04,~DisplayMatrix[decimali]); output_b(0x00); } } } grazie Link al commento Condividi su altri siti More sharing options...
elsabz Inserita: 19 maggio 2006 Segnala Share Inserita: 19 maggio 2006 Ciao,guarda questo , mi sembra migliore del tuo!CiaoSergio Link al commento Condividi su altri siti More sharing options...
Simons Inserita: 19 maggio 2006 Autore Segnala Share Inserita: 19 maggio 2006 avevo già visto quello schema... io però uso display a 7 segmenti direttamente pilotati dalla porta senza codice bcd. e poi non conosco il compilatore che usa quel codice io uso CCS compiler...ciao Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora