Se connecter / S'enregistrer
Votre question

explication d'un programme en C

Tags :
  • Programme
  • Programmation
Dernière réponse : dans Programmation
4 Juin 2007 00:07:06

salut tout le monde je suis débutant en C, j'aimerais que quelqu'un m'aide à faire des commentaires sur mon programme car je ne comprends rien,à vrai dire plus il y a de commentaire mieux c'est. Voici mon programme:

#include<REG51.h>
#include<stdio.h>

#define seuilB 0x70
#define seuilH 0x90

// variables LCD
unsigned char tmp,numOctet,valAff;
unsigned char bdata caract,valAna;
unsigned char Analogique;

//can control pins
sbit can_CS = P3^7;
sbit canSCLK = P3^5;
sbit canSdata = P3^6;

//lcd control pins
sbit lcd_E = P1^7;
sbit lcd_RS = P1^6;

sbit relais1 = P1^5;
sbit relais2 = P1^4;

sbit BPdroit = P3^4; //BP3
sbit BPcentre = P3^3; //BP2
sbit BPgauche = P3^2; //BP1

sbit lcd_D=P1^3;
sbit lcd_C=P1^2;
sbit lcd_B=P1^1;
sbit lcd_A=P1^0;

sbit caract_7=caract^7;
sbit caract_6=caract^6;
sbit caract_5=caract^5;
sbit caract_4=caract^4;
sbit caract_3=caract^3;
sbit caract_2=caract^2;
sbit caract_1=caract^1;
sbit caract_0=caract^0;

sbit valAna_7=valAna^7;
sbit valAna_6=valAna^6;
sbit valAna_5=valAna^5;
sbit valAna_4=valAna^4;
sbit valAna_3=valAna^3;
sbit valAna_2=valAna^2;
sbit valAna_1=valAna^1;
sbit valAna_0=valAna^0;

unsigned char code exo3[]="EX03";
unsigned char code AppuiBPdroit[]="STOP";
unsigned char code AppuiBPcentre[]="<-START STOP->";

//fonctions LCD
void afficheMessage(unsigned char code *message);
void afficheValeur(unsigned char valeur);
void afficheHexa(unsigned char valeur);
void afficheUI(unsigned int page);
void initLcd();
void effaceEcran();
void pulseE();
void t50us();
void t2ms();
void t20ms();
void cdeInit();

//Fonction CAN
unsigned char convAna();

void main()
{
TMOD = 0x01;

/*Init LCD*/
lcd_E=0;lcd_RS=1;
valAff=0;
initLcd();

/*can*/
can_CS = 1;

afficheMessage(exo3);
relais1=1; relais2=1;

do
{
if(BPdroit==0) /*appui sur BP Droit*/
{
afficheMessage(AppuiBPdroit);

}


if(BPcentre==0) /*appui sur BP Centre*/
{
afficheMessage(AppuiBPcentre);
}


if(BPgauche==0) /*appui sur BP Gauche*/
{
effaceEcran();
afficheHexa(convAna());
}
}
while(1);

}


// *******************************************
// *************FONCTION CAN *****************
// *******************************************
unsigned char convAna()
{
can_CS = 0;
canSCLK = 0;tmp++; canSCLK = 1;
canSCLK = 0;tmp++; canSCLK = 1;
canSCLK = 0;tmp++; canSCLK = 1;
canSCLK = 0;tmp++; canSCLK = 1; valAna_7=canSdata;
canSCLK = 0;tmp++; canSCLK = 1; valAna_6=canSdata;
canSCLK = 0;tmp++; canSCLK = 1; valAna_5=canSdata;
canSCLK = 0;tmp++; canSCLK = 1; valAna_4=canSdata;
canSCLK = 0;tmp++; canSCLK = 1; valAna_3=canSdata;
canSCLK = 0;tmp++; canSCLK = 1; valAna_2=canSdata;
canSCLK = 0;tmp++; canSCLK = 1; valAna_1=canSdata;
canSCLK = 0;tmp++; canSCLK = 1; valAna_0=canSdata;
canSCLK = 0;tmp++; canSCLK = 1;
canSCLK = 0;tmp++; canSCLK = 1;
canSCLK = 0;tmp++; canSCLK = 1;
canSCLK = 0;tmp++; canSCLK = 1;
can_CS = 1;
return(valAna);
}

// ***********FONCTIONS LCD******************
// *******************************************
// affichage unsigned integer en fin de ligne
void afficheUI(unsigned int page)
{
unsigned char dizMil,mil,cent,diz,unit;
//positionne DDRAM
lcd_RS = 0;caract = 0xC3;pulseE();
dizMil = page/10000;
lcd_RS = 1;caract = dizMil+0x30;pulseE();
mil = (page - dizMil*10000) / 1000;
lcd_RS = 1;caract = mil+0x30;pulseE();
cent = (page - dizMil*10000 - mil*1000) / 100;
lcd_RS = 1;caract = cent+0x30;pulseE();
diz = (page - dizMil*10000 - mil*1000 - cent*100) / 10;
lcd_RS = 1;caract = diz+0x30;pulseE();
unit = page - dizMil*10000 - mil*1000 - cent*100 - diz*10;
lcd_RS = 1;caract = unit+0x30;pulseE();
}
// affichage du message
void afficheMessage(unsigned char code *message)
{
effaceEcran();

//positionne DDRAM
lcd_RS = 0;
caract = 0x80;
pulseE();
numOctet=1;

while (*message!=0) // detection de fin de message
ascii
{
lcd_RS = 1;
caract=*message;
pulseE();
t20ms();
message=message+1;
numOctet=numOctet+1;

if (numOctet==9)
{
//positionne DDRAM
lcd_RS = 0;
caract = 0xC0;
pulseE();
}
}
}

// affichage ASCII de la valeur decimale (maximum = 99 !)
void afficheValeur(unsigned char valeur)
{
if (numOctet==9)
{
//positionne DDRAM
lcd_RS = 0;caract = 0xC0;pulseE();
}
lcd_RS = 1;caract = (valeur / 10)+0x30;pulseE();
numOctet=numOctet+1;
if (numOctet==9)
{
//positionne DDRAM
lcd_RS = 0;caract = 0xC0;pulseE();
}
lcd_RS = 1;caract = (valeur % 10)+0x30;pulseE();
numOctet=numOctet+1;
}

// affichage ASCII de la valeur HEXA
void afficheHexa(unsigned char valeur)
{
if (numOctet==9)
{
//positionne DDRAM
lcd_RS = 0;caract = 0xC0;pulseE();
}
caract = (valeur / 16);
if (caract<=9) //conversion hexa ASCII ... un peu rustique !
{
caract= caract+0x30;
}
else
{
caract= caract+0x37;
}
lcd_RS = 1;pulseE();
numOctet=numOctet+1;
if (numOctet==9)
{
//positionne DDRAM
lcd_RS = 0;caract = 0xC0;pulseE();
}
caract = (valeur % 16);
if (caract<=9)
{
caract= caract+0x30;
}
else
{
caract= caract+0x37;
}
lcd_RS = 1;pulseE();
numOctet=numOctet+1;
}

// validation ecritureLcd tmp++ tempo > 220ns
void pulseE()
{
lcd_D=caract_7;lcd_C=caract_6;lcd_B=caract_5;lcd_A=caract_4;
tmp++; lcd_E = 1 ;tmp++; lcd_E = 0;t50us();
lcd_D=caract_3;lcd_C=caract_2;lcd_B=caract_1;lcd_A=caract_0;
tmp++; lcd_E = 1 ;tmp++; lcd_E = 0;t50us();
}

// initialisation LCD
void initLcd()
{
t20ms();
//afficheur mode 4 bits, 2 lignes ... de 8 caract, 5x7 dots
lcd_RS = 0;
t20ms();
//puis mode 8 bits
caract = 0x30; cdeInit(); caract = 0x30; cdeInit(); caract = 0x30;
cdeInit();
//on force en mode 4bits
caract = 0x20; cdeInit(); caract = 0x20; cdeInit();
//puis 4 bits 2 lignes (de 8 caract)
caract = 0x80; cdeInit(); caract = 0x00; cdeInit();
caract = 0xC0; cdeInit(); caract = 0x00; cdeInit();
caract = 0x60; cdeInit();
}
//ecriture des 4 bits de MSB
void cdeInit()
{
lcd_D=caract_7;lcd_C=caract_6;lcd_B=caract_5;lcd_A=caract_4;
tmp++; lcd_E = 1 ;tmp++; lcd_E = 0;tmp++;
t50us();
}
void effaceEcran()
{
lcd_RS = 0;caract = 0x01;pulseE();t2ms(); //efface ecran
}

// ************ tempos blocantes ***************
//tempo 2ms
void t2ms()
{
TH0=-2000/256;TL0=-2000%256;TF0=0;TR0=1;
while (!TF0);
TR0=0;
}
//tempo 20ms
void t20ms()
{
TH0=-20000/256;TL0=-20000%256;TF0=0;TR0=1;
while (!TF0);
TR0=0;
}
//tempo 50us
void t50us()
{
TH0=0xFF;TL0=-50;TF0=0;TR0=1;
while (!TF0);
TR0=0;
}



Autres pages sur : explication programme

4 Juin 2007 10:44:32

si j'ai bien compris, tu écris un programme, mais tu ne le comprends pas??
il est censé faire quoi ce programme?
4 Juin 2007 10:53:40

Si on sait meme pas ce qu'il fait, on est pas pret de le comprendre mieux que toi...
Contenus similaires
4 Juin 2007 17:48:34

j'aime bien le codage des tempos ..... ca pue la boucle infinie !!!
4 Juin 2007 17:52:37

Bonjour,
Déjà pour que ce soit plus calir, qu'elle est la finalité de ton programme?
Ensuite si tu veux commencer en C/C++ je te déconseille de décortiquer des programmes, car il y a beaucoup de notion théoriques à connaitre avant.
Après si tu veux vraiment que je te dise ligne par ligne ce qu'il fait pourquoi pas... mais c'est mieux si on te guide et que tu trouve par toi même non??
Les forums donnent souvent les réponses, guider c'est mieux car tu trouve tout seul.

Cldt,
6 Juin 2007 22:25:34

non,c'est un programme qu'ils nous ont demandé de comprendre, théoriquement c'est un régulateur thermique, on est censé comprendre nous même ce que ça fait.
Merci à ceux qui ont cherché.
6 Juin 2007 22:30:25

Et si tout simplement tu le lançais pour voir ce qu'il fait ?
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS