Sunteți pe pagina 1din 13

Ce programme pour le compilateur Pic C compiler de CCS

Gestion tljaugeage dune station service


#include "C:\Program Files\PICC\Examples\telejaugeage.h"
#include <18F452.h>
#device adc=8
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=8000000)
#include <math.h>
#define use_portd_lcd

#include <lcd.c>
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) // Jumpers: 8 to 11, 7 to 12
#define CINITPROD_0 0x003E80

// 16*VALEUR INITIALE DE LA SONDE CARBURANT N0

#define CINITPROD_1 0x003E80

// VALEUR INITIALE DE LA SONDE CARBURANT N1

#define CINITPROD_2 0x003E80

// VALEUR INITIALE DE LA SONDE CARBURANT N2

#define CINITPROD_3 0x003E80

// VALEUR INITIALE DE LA SONDE CARBURANT N3

#define CINITPROD_4 0x003E80

// VALEUR INITIALE DE LA SONDE CARBURANT N4

#define CINITPROD_5 0x003E80

// VALEUR INITIALE DE LA SONDE CARBURANT N5

#define CINITEAU_0 0x000000


#define CINITEAU_1 0x000000

// VALEUR INITIALE DE LA SONDE EAU N0


// VALEUR INITIALE DE LA SONDE EAU N1

#define CINITEAU_2 0x000000

// VALEUR INITIALE DE LA SONDE EAU N2

#define CINITEAU_3 0x000000

// VALEUR INITIALE DE LA SONDE EAU N3

#define CINITEAU_4 0x000000

// VALEUR INITIALE DE LA SONDE EAU N4

#define CINITEAU_5 0x000000

// VALEUR INITIALE DE LA SONDE EAU N5

#define NUM_TANKS 6

FLOAT CONST DIAMETRE [NUM_TANKS] = {1.472,1.472,1.472,1.472,1.472,1.472};


FLOAT CONST LENTH [NUM_TANKS] = {3.10,3.10,3.10,3.10,3.10,3.10};
FLOAT const CAPLENTH [NUM_TANKS] = {0.2,0.2,0.2,0.2,0.2,0.2};
INT32 CONST CINITPROD[NUM_TANKS] = {CINITPROD_0, CINITPROD_1, CINITPROD_2,
CINITPROD_3,CINITPROD_4, CINITPROD_5 };

INT32 CONST CINITEAU[NUM_TANKS] = {CINITEAU_0, CINITEAU_1, CINITEAU_2,


CINITEAU_3,CINITEAU_4, CINITEAU_5 };
int i,j;
//VARIABLE CALCUL VOLUME
FLOAT cap_vol, tube_vol, diameter, length=1,height;
FLOAT cap_length, offset_height, tube_length, temp1,vol2;
//VARIABLE CALCUL PERIODE
unsigned int32 debut, fin;
int32 nbimpulsions;
LONG debordement;
INT VOLLo,VOLHi,LIVLo, LIVHi,LIV0,VOL0,hot1;
LONG T0,T1,T2,vol,liv,T0L,T1L,T2L,hot,somme;
//VARIABLES VERIFICATION DEPOTAGE
LONG volactuel1,volprecedent1,livraison1;
LONG volactuel2,volprecedent2,livraison2;
LONG volactuel3,volprecedent3,livraison3;
LONG volactuel4,volprecedent4,livraison4;
LONG volactuel5,volprecedent5,livraison5;
//////////////////////////////////////////////////////////////////////////////

/****************** activate buz1 for keys ******************/


void buz1(void)
{
char jb;
for (jb = 0; jb <= 5; jb++)
{
output_bit( PIN_A1, 1);

//activer buz1

delay_us(155);
output_bit( PIN_A1, 0);

//dactiver buz1

delay_us(155);

}
//break;
output_bit( PIN_A1, 0);
}
///////////////////////////////////////////////////////////////////////////

#int_TIMER1
void TIMER1_isr() // Interruption si dbordement timer1
{
++debordement; // Prise en compte de plusieurs dbordement de tmr1.
}
//////////////////////////////////////////////////////////////////////////////
#int_CCP1
void CCP1_isr()

// Interruption module de capture

fin = CCP_1;
nbimpulsions = (65536 * debordement) + fin - debut;
if (nbimpulsions > 0X001990 & input(PIN_A0)) buz1();
else output_low(PIN_A1);

debut = fin;
debordement = 0;
}
//////////////////////////////////////////////////////////////////////////////
void AFFIliv (void)
{
disable_interrupts(GLOBAL);
T0L=Floor(liv/100);
LIVHi=T0L;
T1L=Floor((liv-T0L*100)/10);
LIVLo=T1L;
T2L=floor((liv-T0L*100-(T1L*10)));
LIV0=T2L;
enable_interrupts(GLOBAL);
}
//////////////////////////////////////////////////////////////////////////////
void AFFIVOL (void)
{
disable_interrupts(GLOBAL);

T0=Floor(vol/100);

VOLHi=T0;
T1=Floor((vol-T0*100)/10);
VOLLo=T1;
T2=floor((vol-T0*100-(T1*10)));
VOL0=T2;
enable_interrupts(GLOBAL);
}
//////////////////////////////////////////////////////////////////////////////
// SOUS PROGRAMME DETERMINATION DU STOCK DE CARBURANT DANS LES CITERNES
void DETERMINATION_VOLUME (void)
{
disable_interrupts(GLOBAL);

length=LENTH [i];
Cap_length=CAPLENTH [i];
Diameter =DIAMETRE [i];
DELAY_ms(10);
height
HAUTEUR

=(nbimpulsions-CINITPROD[i])/16000.0;////EQUIVALENCE

tube_length = length - 2*cap_length;


offset_height = height - diameter/2;
temp1 = (pwr(offset_height,3) - 3*diameter*diameter*offset_height/4
- pwr(diameter,3)/4);
cap_vol = -PI*cap_length*temp1/(3*diameter);
temp1 = sqrt(diameter*diameter/4-offset_height*offset_height);
temp1 = PI/2 + 4*offset_height*temp1/(diameter*diameter)+
asin(2*offset_height/diameter);
tube_vol = tube_length*diameter*diameter*temp1/4;

vol2 = (tube_vol + 2*cap_vol);

vol=floor(vol2*1000.);
// vol=floor((nbimpulsions-CINITPROD[i])/16);

enable_interrupts(GLOBAL);

NBRE

IMPULTION

void MENU_STOCK (void)


{

AFFIVOL ();
DELAY_ms(100);
SOMME=vol-0x0064;
if (i==0 ){
printf( "\r\n

STOCK DE CARBURANT: ");

}
if (i==1

){

printf("\rSTOCK GASOIL1 : %6.2lu L

",

vol );

printf("\r\n\nLa hauteur GASOIL1 est: %6.2f Cm\n\n", height*100.);


printf(lcd_putc,"\fSTOCK GASOIL1: %U%U%U L\n",

VOLHi ,VOLLo,VOL0);

if (nbimpulsions > 15000 ) buz1();


IF( input(PIN_A4)) volprecedent5=volactuel5;
if (vol<=volactuel1) {
volactuel1=vol;
volprecedent1=vol;
}
else if (SOMME>volactuel1) {
volactuel1=vol;
livraison1=volactuel1-volprecedent1;
}

if (i==2

){

printf("\rSTOCK SUPER1 : %6.2lu L

",

vol );

printf("\r\n\nLa hauteur SUPER1 est: %6.2f Cm\n\n", height*100.);


printf(lcd_putc,"\fSTOCK SUPER1: %U%U%U L\n",
if (nbimpulsions > 15000 ) buz1();
IF( input(PIN_A4)) volprecedent2=volactuel2;
if (vol<=volactuel2) {

VOLHi ,VOLLo,VOL0);

volactuel2=vol;
volprecedent2=vol;
}
else if (SOMME>volactuel2) {
volactuel2=vol;
livraison2=volactuel2-volprecedent2;
}

}
if (i==3 ){
printf("\rSTOCK SSP1 : %6.2lu L

", vol );

printf("\r\n\nLa hauteur SSP1 est: %6.2f Cm\n\n", height*100.);


printf(lcd_putc,"\fSTOCK SSP1: %U%U%U L\n",

VOLHi ,VOLLo,VOL0);

if (nbimpulsions > 15000) buz1();


IF( input(PIN_A4)) volprecedent3=volactuel3;
if (vol<=volactuel3) {
volactuel3=vol;
volprecedent3=vol;
}
else if (SOMME>volactuel3) {
volactuel3=vol;
livraison3=volactuel3-volprecedent3;
}

}
if (i==4

){

printf("\rSTOCK PETROLE : %6.2lu L

",

vol );

printf("\r\n\nLa hauteur PETROLE est: %6.2f Cm\n\n", height*100.);


printf(lcd_putc,"\fSTOCK PETROLE: %U%U%U L\n",
if (nbimpulsions > 15000 ) buz1();
IF( input(PIN_A4)) volprecedent4=volactuel4;
if (vol<=volactuel4) {
volactuel4=vol;
volprecedent4=vol;
}

VOLHi ,VOLLo,VOL0);

else if (SOMME>volactuel4) {
volactuel4=vol;
livraison4=volactuel4-volprecedent4;
}

}
if (i==5 ){

printf("\rSTOCK GASOIL2 : %6.2lu L

",

vol );

printf("\r\n\nLa hauteur GASOIL2 est: %6.2f Cm\n\n", height*100.);


printf(lcd_putc,"\fSTOCK GASOIL2: %U%U%U L\n",

VOLHi ,VOLLo,VOL0);

if (nbimpulsions > 15000 ) buz1();

IF( input(PIN_A4)) volprecedent5=volactuel5;


if (vol<=volactuel5) {
volactuel5=vol;
volprecedent5=vol;
}
else if (SOMME>volactuel5) {
volactuel5=vol;
livraison5=volactuel5-volprecedent5;
}

}
//////////////////////////////////////////////////////////////////////////////
void MENU_DERNIERES_LIVRAISONS (void)
{
DELAY_ms(100);

//

AFFIliv ();
if (i==0 ) printf( "\r\n
if (i==1
liv=livraison1;
AFFIliv ();

){

LES DERNIERES LIVRAISONS SONT: ");

printf(lcd_putc,"\fLIVRAISON GASOIL1: %U%U%U L\n", LIVHi ,LIVLo,LIV0);


printf("\rLIVRAISON GASOIL1 : %6.2lu Litres

",

liv );

}
if (i==2

){

liv=livraison2;
AFFIliv ();
printf(lcd_putc,"\fLIVRAISON SUPER1: %U%U%U L\n", LIVHi ,LIVLo,LIV0);
printf("\rLIVRAISON SUPER1: %6.2lu Litres

",

liv );

}
if (i==3 ) {
liv=livraison3;
AFFIliv ();
printf(lcd_putc,"\fLIVRAISON SSP1: %U%U%U L\n",
printf("\rLIVRAISON SSP1 : %6.2lu Litres

LIVHi,LIVLo,LIV0);

", liv );

}
if (i==4 ){
liv=livraison4;
AFFIliv ();
printf(lcd_putc,"\fLIVRAISON PETROLE: %U%U%U L\n", LIVHi,LIVLo,LIV0);

printf("\rLIVRAISON PETROLE : %6.2lu Litres

",

liv);

}
if (i==5 ) {
liv=livraison5;
AFFIliv ();
printf(lcd_putc,"\fLIVRAISON GASOIL2: %U%U%U L\n", LIVHi,LIVLo,LIV0);
printf("\rLIVRAISON GASOIL2: %lu Litres

", liv );

}
}
//////////////////////////////////////////////////////////////////////////////
void VERIFICATION_EXISTENCE_EAU (void)
{
hot=floor((nbimpulsions-CINITEAU[i] )/1000.);
DELAY_ms(100);

if (i==0

{
printf( "\r\n VERIFICATION EXISTENCE D'EAU: ");
}
if (i==1

{
hot1=make8( hot ,0);
printf("\rNIVEAU D'EAU GASOIL1: %lu Cm

", hot );

printf(lcd_putc,"\fNIVEAU D'EAU GASOIL1: %U Cm\n",

hot1);

}
if (i==2

{
hot1=make8( hot ,0);
printf("\rNIVEAU D'EAU SUPER1 : %lu Cm

",

hot );

printf(lcd_putc,"\fNIVEAU D'EAU SUPER1: %U Cm\n",

hot1);

}
if (i==3 )
{
hot1=make8( hot ,0);
printf("\rNIVEAU D'EAU SSP1 : %lu Cm

", hot );

printf(lcd_putc,"\fNIVEAU D'EAU SSP1: %U Cm\n",

hot1);

}
if (i==4 )
{
hot1=make8( hot ,0);
printf("\rNIVEAU D'EAU PETROLE: %lu Cm

",

hot );

printf(lcd_putc,"\fNIVEAU D'EAU PETROLE: %U Cm\n",

hot1);

}
if (i==5 )
{
hot1=make8( hot ,0);
printf("\rNIVEAU D'EAU GASOIL2: %lu Cm

", hot );

printf(lcd_putc,"\fNIVEAU D'EAU GASOIL2: %U Cm\n",


}
}
//////////////////////////////////////////////////////////////////////////////

hot1);

void STOCK_EAU (void)


{
output_bit(PIN_C1,1);
output_bit(PIN_C0,0) ;
output_bit(PIN_C3,0) ;
output_bit(PIN_A5,1);
}
//////////////////////////////////////////////////////////////////////////////
void STOCK_LIVRAISON (void)
{
output_bit(PIN_C4,1);
output_bit(PIN_C0,0) ;
output_bit(PIN_C3,1) ;
output_bit(PIN_A5,1);
}
//////////////////////////////////////////////////////////////////////////////
void INITIALISATION_COMPTAGE (void)
{
output_bit(PIN_C5,1);
output_bit(PIN_C0,0) ;
output_bit(PIN_C3,1) ;
output_bit(PIN_A5,1);
}
//////////////////////////////////////////////////////////////////////////////
void TEMPORISATION_LUMIERE (void)
{
output_bit(PIN_C0,1) ;
output_bit(PIN_C4,0) ;
output_bit(PIN_C5,0) ;
output_bit(PIN_C3,1) ;
output_bit(PIN_C1,0);
output_bit(PIN_A5,1);
}
//////////////////////////////////////////////////////////////////////////////
void MODE_AUTO (void)
{

output_bit(PIN_C0,1) ;
output_bit(PIN_C4,0) ;
output_bit(PIN_C5,0) ;
output_bit(PIN_C3,1) ;
output_bit(PIN_C1,0) ;
output_bit(PIN_A5,0) ;
}
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
VOID main() {

port_b_pullups(TRUE);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
//setup_ccp1(CCP_CAPTURE_RE);
setup_ccp1(CCP_CAPTURE_RE|CCP_CAPTURE_DIV_16);
enable_interrupts(INT_TIMER1);
enable_interrupts(INT_CCP1);
enable_interrupts(GLOBAL);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_timer_2(T2_DISABLED,0,1);
lcd_init();

while (1)

{
for (j=0;j<=2;J++)
{
for (i=0;i<=6;i++)

//REGLAGE NOMBRE DE PASSAGES EN MODE MANUEL

DELAY_ms(200);

// REGLAGE DU TEMPS D'AFFICHAGE

output_E(i);

// COMMANDE DES MULTIPOLEXEURS ADRESSAGE

DELAY_ms(100);

IF((input(PIN_A3))& (input(PIN_A2) )) MENU_DERNIERES_LIVRAISONS ();

IF ((input(PIN_A2) )&(!input(PIN_A3)))
{
DETERMINATION_VOLUME ();
MENU_STOCK ();

// AFFICHAGE STOCK DE CAARBURANT

}
IF (input(PIN_A0)) VERIFICATION_EXISTENCE_EAU ();

IF( !input(PIN_B0)) STOCK_EAU ();

// COMMUTATION EAU /CARBURANT

IF( !input(PIN_B2)) STOCK_LIVRAISON (); // COMMUTSTOCK LIVRAISON

IF( !input(PIN_B3)) INITIALISATION_COMPTAGE (); // INITIAL memoire

IF( !input(PIN_B4)) TEMPORISATION_LUMIERE (); //LUMIERE

IF(! input(PIN_B1))
{
MODE_AUTO ();
break;

// RETOUR EN MODE AUTO initalisation


}

}
}
MODE_AUTO ();
}

}
//////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////

S-ar putea să vă placă și