omrani007
Messages postés8Date d'inscriptionjeudi 2 avril 2009StatutMembreDernière intervention 2 mai 2009
-
16 avril 2009 à 19:05
omrani007
Messages postés8Date d'inscriptionjeudi 2 avril 2009StatutMembreDernière intervention 2 mai 2009
-
17 avril 2009 à 22:51
comment programmer un pic16f876 pour saisir un nombre sur 5 afficheurs 7 segments?
aidez moi s'il vous plais!
piche32
Messages postés23Date d'inscriptionmercredi 1 octobre 2008StatutMembreDernière intervention28 mai 2009 16 avril 2009 à 19:39
Salut. j'ai réalisé un projet similaire. l'idée est d'envoyer sur tous les afficheurs la valeur que chacun doit afficher et de d'allimenter l'afficheur que quand le numéro qu'il doit afficher est envoyé.
J'espere que sa pourra t'aider. a+
piche32
Messages postés23Date d'inscriptionmercredi 1 octobre 2008StatutMembreDernière intervention28 mai 2009 17 avril 2009 à 11:52
while(1)
{
// Disons que ton nombre a affiché est x et qu'il vaut 12345
ton_nombre=12345 // on fixe x à 12345
//on isole chaque chiffre
dixmilliers=(x/10000); //le résultat doit etre 1
milliers=((x-dixmilliers)/1000); //2
centaines=((x-dixmilliers-milliers)/100) //3
dizaines=((x-dixmilliers-milliers-centaines)/10) //4
unites((x-dixmilliers-milliers-centaines-dizaines); //5
//ensuite on les envoie par exemple sur le portD et on commande l'allimentation de afficheur par les PIN du portB
output_d=dixmilliers; //on envoie dixmillers (1) sur le portd
output(PIN_B0)=1; //B0 allimente le premier afficheur donc elle est a 1
output(PIN_B0)=0; //les autre PIN sont a 0 car les afficheur doivent etre eteint
output(PIN_B0)=0;
output(PIN_B0)=0;
output(PIN_B0)=0;
delay_us(10); //on attend 10micro secondes
piche32
Messages postés23Date d'inscriptionmercredi 1 octobre 2008StatutMembreDernière intervention28 mai 2009 17 avril 2009 à 16:44
A ce compte la il faut que tu mulltiplexe ton nombre.tu l'envoie avec une sortie.il faut une autre sortie ou tu fournira une horloge de la meme frequence que la transmission du nombre.ensuite tu pourra démultipèxé avec un composant (je ne sait plus la référence). ensuite avec un registre a décalage tu poura commander l'alimentation. tu aura juste a envoyé un chiffre sur trois sorties du pic... tu vois ce que je veu dire?
omrani007
Messages postés8Date d'inscriptionjeudi 2 avril 2009StatutMembreDernière intervention 2 mai 2009 17 avril 2009 à 18:08
j'ai fait des modifications sur ton programme de cette façon mais il ne marche pas.
#include<16F876.h>
#use delay(clock=40000000)
#define PIN_D
#define PIN_B
#define PIN_C
void main()
{
int dixmilliers,milliers,dizaines,unites,centaines,x;
while(1) {
//on isole chaque chiffre
dixmilliers=(x/10000); //le résultat doit etre1
milliers=((x-dixmilliers)/1000); //2
centaines=((x-dixmilliers-milliers)/100); //3
dizaines=((x-dixmilliers-milliers-centaines)/10); //4
unites=((x-dixmilliers-milliers-centaines-dizaines)); //5 //ensuite on les envoie par exemple sur le portD et on commande l'allimentation de afficheur par les PIN du portB
output_d=dixmilliers; //on envoie dixmillers (1) sur le portd
output(PIN_B0)=1; //B0 allimente le premier afficheur donc elle est a 1
output(PIN_B1)=0; //les autre PIN sont a 0 car les afficheur doivent etre eteint
output(PIN_B2)=0;
output(PIN_B3)=0;
output(PIN_B4)=0;
delay_us(10); //on attend 10micro secondes
output_d=milliers;
output(PIN_B0)=0;
output(PIN_B0)=1;
output(PIN_B0)=0;
output(PIN_B0)=0;
output(PIN_B0)=0;
delay_us(10); //on attend 10micro secondes
output_d=centaines; //on envoie dixmillers (1) sur le portd
output(PIN_B0)=0;
output(PIN_B0)=0;
output(PIN_B0)=1;
output(PIN_B0)=0;
output(PIN_B0)=0;
delay_us(10); //on attend 10micro secondes
output_d=dizaines;
output(PIN_B0)=0;
output(PIN_B0)=0;
output(PIN_B0)=0;
output(PIN_B0)=1;
output(PIN_B0)=0;
delay_us(10); //on attend 10micro secondes
output_d=unités;
output(PIN_B0)=0;
output(PIN_B0)=0;
output(PIN_B0)=0;
output(PIN_B0)=0;
output(PIN_B0)=1;
delay_us(10);//on attend 10micro secondes
}
}
comme je te dit je suis un débutant