Giorgio Demurtas Inserito: 2 agosto 2004 Segnala Share Inserito: 2 agosto 2004 Ho collegato un display a 7 segmenti anodo comune alla porta B di un pic 16F84A.segmento A su RB0, B su RB1, e così via.visto che è ad anodo comune, per far accendere il segmento metto a zero l'uscita realtiva. Funziona con tutti i pin tranne che con RB0. Perchè?il sw. è questo ed è compilato con ccs.#include "C:\Documenti\pic c\nuovi_progetti\7seg1\7seg1.h" void main() { int8 numero; set_tris_a(0xFF); set_tris_b(0x00); numero=8; while(1) { if (numero==0) output_b(0x03); if (numero==1) output_b(0x9F); if (numero==2) output_b(0x25); if (numero==3) output_b(0x0D); if (numero==4) output_b(0x99); if (numero==5) output_b(0x49); if (numero==6) output_b(0x41); if (numero==7) output_b(0x1F); if (numero==8) output_b(0x01); if (numero==9) output_b(0x09); if (numero==10) numero=0; delay_ms(250); delay_ms(250); //numero=numero+1; } } provvisoriamente il sw fa comparire solo in n°8 (così controllo che tutti i segmenti funzionino).scusate se per caso c'è qualche errore, ma ho fretta di andare a pranzo...ciaoGio Link al commento Condividi su altri siti More sharing options...
Giorgio Demurtas Inserita: 2 agosto 2004 Autore Segnala Share Inserita: 2 agosto 2004 (modificato) ok, ho risolto da solo! (che bravo! )ho fatto lo stupido errore di invertire tutti i collegamenti delle uscite, praticamente il bit più significativo stava da quello meno significativo.Quindi potevo cambiare il sw e rifare la tabellina per ricavare i valori esadecimali per l'uscita o rifare i collegamenti. Ho prefertito rifare i collegamenti per mantenere un certo filo logico nel sw.il listato definitivo:]#include "C:\Documenti\pic c\nuovi_progetti\7seg1\7seg1.h" //giorgio demurtas 02/08/04 //conteggio in avanti con un display a 7 segmenti ad anodo comune void main() { int8 numero; set_tris_a(0xFF); set_tris_b(0x00); numero=9; while(1) { if (numero==10) numero=0; if (numero==0) output_b(0x03); if (numero==1) output_b(0x9F); if (numero==2) output_b(0x25); if (numero==3) output_b(0x0D); if (numero==4) output_b(0x99); if (numero==5) output_b(0x49); if (numero==6) output_b(0x41); if (numero==7) output_b(0x1F); if (numero==8) output_b(0x01); if (numero==9) output_b(0x09); delay_ms(250); delay_ms(250); delay_ms(250); delay_ms(250); numero=numero+1; } }ciao Modificato: 2 agosto 2004 da Giorgio Demurtas Link al commento Condividi su altri siti More sharing options...
Giorgio Demurtas Inserita: 2 agosto 2004 Autore Segnala Share Inserita: 2 agosto 2004 ho fatto anche il conto alla rovescia! adesso posso fare una BOMBA a orologeria! ciaogiorgio 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