Computer de Bord Auto

/*Proiect COMPUTER de BORD AUTO |

-afiseaza tensiunea de incarcare cu averizari la valori anormale; |

-afiseaza temperatura exterioara cu avertizare la inghet (temp. < 5 grade C); |

-afiseaza temperatura apei din motor; |

-afiseaza temperatura uleiului din motor; |

-comanda aprinderea unui LED rosu si pornirea unui COOLER atunci cand val_digitala. APA sau ULEI > 90 grade; |

-afieaza in procente si printr-un bargraph luminozitatea ambianta; |

-comanda aprinderea unui LED albastru(avertizare) si a luminilor (LED alb) la intenitate luminoasa scazuta; |

-afiseaza numarul de litri din rezervor cu avertizare pe LCD atunci cand nivelul este sub 7 litri; |

-afiseaza autonomia autovehicolului pe baza numarului de litri de combustibil ramasi |

–––––––––––SETARI DE LUCRU–––––––––––––––––––––

1.a. INPUT-URI ANALOGICE

RA0/AN0 -> input analogic citire tensiune de incarcare;

RA1/AN1 -> input analogic citire temperatura exterior;

RA2/AN2 -> input analogic citire temperatura apa motor ;

RA3/AN3 -> input analogic citire temperatura ulei motor;

RA5/AN4 -> input analogic citire intensitate luminoasa;

RE0/AN5 -> input analogic citire nivel functie_calcul_benzina;

RB3/AN9 -> input analogic citire valoare umiditate;

1.b. INPUT-URI DIGITALE

RB4 -> input digital citire tasta JOS;

RB5 -> input digital citire tasta SUS;

2. OUTPUT-URI

RE1 -> LED SMD de avertizare de culoare albastra;

RE2 -> LED SMD de avertizare de culoare rosie;

RB0 -> LED SMD de culare alba pentru simularea farurilor;

RD1 -> actionare COOLER BLDC;

RD4 -> LED rosu de avertizare la umiditate crescuta;

3. CONFIGURARE LCD ALFANUMERIC

PIN NUMBER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

DESCRIPTION Vss Vdd Vo Rs R/W En D0 D1 D2 D3 D4 D5 D6 D7 BA(+) BLK-()

PIC16F887 Vss Vdd Pot RD7 RD6 RD5 RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0 Vdd(R) Vss

*/

int i =0, j=0; // contor general

int cntr = 0; // contor in intrerupere

int cntr_function = 0; // contor pentru function in intrerupere

int lum_function_chec =0; // checking for interruption function

int check_temp = 0; // check for temperature

int check = 0; // check la meniu in intrerupere

int set_t = 0, set_t1 = 0; // checks

int temp1 = 0, temp2 = 0; // variabile temporare

int meniu_1 = 0; // stare meniu numarul 1 (evaluare in meniu principal-setare in intrerupere)

int meniu_2 = 0; // stare meniu numarul 2 (evaluare in meniu principal-setare in intrerupere)

int meniu_3 = 0; // stare meniu numarul 3 (evaluare in meniu principal-setare in intrerupere)

int meniu_4 = 0; // stare meniu numarul 4 (evaluare in meniu principal-setare in intrerupere)

int meniu_5 = 0; // stare meniu numarul 5 (evaluare in meniu principal-setare in intrerupere)

int meniu_6 = 0; // stare meniu numarul 6 (evaluare in meniu principal-setare in intrerupere)

int val_digitala = 0; // buffer valoare bruta ADC

int valoare_in_mV = 0; // valoare ADC transformata in mV

int zeci_de_volti = 0; // calcul zeci de volti;

int unitati_de_volt = 0; // calcul unitati de volt

int zecimale_de_volt = 0; // calcul zecimi de volt

int sute_de_grade_C = 0; // calcul sute de grade celsius

int zeci_de_grade_C = 0; // calcul zeci de grade celsius

int unitati_de_grade_C = 0; // calcul unitati de grade celsius

int zecimale_de_grade_C = 0; // calcul zecimale de grade celsius

int sute_procente_lum = 0; // suta de procente la calcul intensitate luminoasa

int zeci_procente_lum = 0; // zeci de procente la calcul intensitate luminoasa

int unitati_procente_lum = 0;// unitati de procente la calcul intensitate luminoasa

int indice_LCD_bargraph = 0; // indice afisare pe LCD

int autonomie = 0; // calcul autonomie functie_calcul_benzina

int lumina_pwm = 0; // variabila pentru generare semnal PWM pentru lumini

int cntr_pwm = 0; // contor pentru generare semnal PWM pentru lumini

char text[20]; // vector la afisare de catactere pe LCD

//––––––––––-mesaje pe LCD––––––––––-//

const char *mesg1="AUTOMOTIVE";

const char *mesg2="PROJECT";

const char *mesg3="Loading signals";

const char *mesg4=" scanning done ";

const char *mesg5="-ALL SYSTEMS OK-";

const char *mesg6="exterior";

const char *mesg7="TMP-apa";

const char *mesg8="TMP-ulei";

const char *mesg9="!! TEMP MOTOR !!";

const char *mesg10="-LOW VISIBILITY-";

const char *mesg11="ROT/MIN";

const char *mesg12="LITRI";

const char *mesg13="autonom";

const char *mesg14=" !!!LOW FUEL!!! ";

const char *mesg01="supra";

const char *mesg02="optimum";

const char *mesg03="OK";

const char *mesg04="caution";

const char *mesg05="low";

const char *mesg06="under";

const char *mesg07="defect";

const char *mesg08=" *INGHET* ";

const char *mesg09="–umiditate–-";

const char *mesg010="-STERGATOARE ON-";

//–––––––––––––––––––––––––-//

//–––––––––-CUSTOM CHARS pe LCD––––––––––//

const char character0[] = {31,31,31,31,31,31,31,31}; //FULL custom character on LCD (bulding bargraph)

const char character1[] = {28,20,28,0,7,4,4,7}; //Celsius degree custom character

const char character5[] = {14,14,31,31,31,31,31,31}; //FULL BATERRIE 14.4 v

const char character6[] = {14,10,27,31,31,31,31,31}; //Vbat V > 12.5V

const char character7[] = {14,10,17,17,31,31,31,31}; //Vbat V < 12.5V

const char character8[] = {14,10,17,17,17,17,31,31}; //Vbat V = 10V

const char character9[] = {14,10,17,17,17,17,17,31}; //Vbat V < 10V

const char character12[] = {31,17,17,17,17,17,17,31};//LOADING function EMPTY CHAR

//–––––––––––––––––––––––––-//

//–––––––––-FUNCTION DECLARATIONS–––––––––//

void functie_tensiune_de_incarcare();

void functie_temperatura_exterior();

void functie_temperatura_apa();

void functie_temperatura_ulei();

void functie_umiditate_meniu_principal();

void functie_calcul_benzina ();

void functie_lumina_meniu_principal();

void functie_lumina_background();

void functie_loading();

void strConstCpy(char *dest, const char *source);

//–––––––––––––––––––––––––-//

//––––––ROM-RAM COPY FUNTION FOR ERROR FREE ON LCD––––––//

void strConstCpy(char *dest, const char *source) {

while(*source)

*dest++ = *source++ ;

*dest = 0 ;

}

//–––––––––––––––––––––––––-//

//––––––CUSTOM CHAR GENERATION FOR LCD––––––––––//

void CustomChar(const char *def, unsigned char n, char pos_row, char pos_char)

{

char i ;

LCD8_Cmd(64 + n * 8) ;

for(i = 0 ; i<=7 ; i++)

{

LCD8_Chr_Cp(def[i]) ;

}

LCD8_Cmd(LCD_RETURN_HOME) ;

LCD8_Chr(pos_row, pos_char, n) ;

}

//–––––––––––––––––––––––––-//

void main(){

ANSEL = 0b00111111; // Selection of analogic channels 1=ON / 0=OFF (AN0 to AN7)

ANSELH =0b00000010; // Selection of analogic channels 1=ON / 0=OFF (AN0 to AN7 to AN13)

TRISA = 0b00101111; // I/O functions set (directivity)

TRISB = 0b00111000; // I/O functions set (directivity)

TRISC = 0b00000000; // I/O functions set (directivity)

TRISD = 0b00000000; // I/O functions set (directivity)

TRISE = 0b00000001; // I/O functions set (directivity)

PORTA = 0; // Clear output values on pins

PORTB = 0; // Clear output values on pins

PORTC = 0; // Clear output values on pins

PORTD = 0; // Clear output values on pins

PORTE = 0; // Clear output values on pins

//–––––––––TIMER1 INTERRUPT–––––––––––-//

INTCON.GIE = 1; //enable all un-masked interrupts

INTCON.PEIE = 1; //Set PEIE

T1CON = 1; //enable Timer1

PIR1.TMR1IF = 0; //Clear TMR1IF -> interrupt flag

TMR1H = 0b11111110; //Start value storing 16bit -> HIGH register for T1

TMR1L = 0b00001011; //Start value storing 16bit -> LOW register for T1

PIE1.TMR1IE = 0; //Disable / Enable Timer1 interrupt

//–––––––––––––––––––––––––-//

//–––––––––TIMER2 INTERRUPT–––––––––––-//

//T2CON = 0b00000100; // Timer2 settings |bit 6-3= postscale| |bit2=T2 activate||bit 1-0 = prescaller| // for 0b00000100 = prescaler 1:1 and postscaler 1:1 = max freq = 280 us;

//TMR2 = 0; // Initialize Timer2 register

//PIE1.TMR2IE = 1; // Disable / enable interupt

//–––––––––––––––––––––––––-//

//––––––––LCD16x2 CONFIGURATION––––––––––-//

Lcd8_Config(&PORTD,&PORTC,7,5,6,0,1,2,3,4,5,6,7);

//–––––––––START SEQUENCE––––––––––––//

Lcd8_Cmd(Lcd_CLEAR) ;

strConstCpy(text,mesg1);

Lcd8_Out(1,3,text);

strConstCpy(text,mesg2);

Lcd8_Out(2,5,text);

Delay_ms(4000);

Lcd8_Cmd(Lcd_CLEAR) ;

Delay_ms(600); // Start sequence disabled on tests

functie_loading();

strConstCpy(text,mesg4);

Lcd8_Out(1,1,text);

Delay_ms(3000);

Lcd8_Cmd(Lcd_CLEAR) ;

strConstCpy(text,mesg5);

Lcd8_Out(1,1,text);

Delay_ms(1000);

Lcd8_Cmd(Lcd_CLEAR) ;

PIE1.TMR1IE = 1; // After start sequence -> activating T1

//–––––––––-MAIN WORK–––––––––––––//

for (;;){

if(meniu_1 == 1){ // meniu 1

functie_temperatura_exterior();

functie_lumina_background();

functie_tensiune_de_incarcare();

}

if(meniu_2 == 1){ // meniu 2

functie_temperatura_apa();

functie_temperatura_ulei();

functie_lumina_background();

}

if( meniu_3 == 1){ //meniu 3

functie_lumina_meniu_principal();

}

if( meniu_4 == 1 ){ //meniu 4

functie_calcul_benzina ();

functie_lumina_background();

}

if( meniu_5 == 1 ){ //meniu 5

functie_umiditate_meniu_principal();

functie_lumina_background();

}

}

}

//–––––––––––––––––––––––––-//

void functie_tensiune_de_incarcare(){

Lcd8_Chr(1,2, ' ');

Lcd8_Chr(1,14,' ');

val_digitala = Adc_Read(0);

valoare_in_mV=15*val_digitala + 5* val_digitala/10 + 9*val_digitala/130; // CONSISTENT = testat si masurat

if (valoare_in_mV >= 10000){ // cu multimetru

zeci_de_volti=valoare_in_mV/10000;

while(valoare_in_mV>=10000){

valoare_in_mV=valoare_in_mV-10000;

}

}

else

zeci_de_volti=0;

if (valoare_in_mV >= 1000){

unitati_de_volt=valoare_in_mV/1000;

while(valoare_in_mV>=1000){

valoare_in_mV=valoare_in_mV-1000;

}

}

else

unitati_de_volt=0;

if (valoare_in_mV >= 100){

zecimale_de_volt=valoare_in_mV/100;

while(valoare_in_mV>=100){

valoare_in_mV=valoare_in_mV-100;

}

}

else

zecimale_de_volt=0;

if (zeci_de_volti==0)

Lcd8_Chr(1, 10, ' ');

else

Lcd8_Chr(1, 10, 0b00110000+zeci_de_volti);

Lcd8_Chr(1, 11, 0b00110000+unitati_de_volt);

Lcd8_Chr(1, 12,'.');

Lcd8_Chr(1, 13, 0b00110000+zecimale_de_volt);

Lcd8_Chr(1, 16, 'V');

if ((zeci_de_volti==1) && (unitati_de_volt == 4) && (zecimale_de_volt > 4)){

CustomChar(character5,0,1,1);

strConstCpy(text,mesg01);

Lcd8_Out(1,3,text);

for(i=8; i<=9; i++){

Lcd8_Chr(1, i,' ');

}

}

if ((zeci_de_volti==1) && (unitati_de_volt == 4) && (zecimale_de_volt <= 4)){

CustomChar(character5,0,1,1);

strConstCpy(text,mesg02);

Lcd8_Out(1,3,text);

for(i=8; i<=9; i++){

Lcd8_Chr(1, i,' ');

}

}

if ((zeci_de_volti==1) && (unitati_de_volt == 3) && (zecimale_de_volt >= 7)){

CustomChar(character5,0,1,1);

strConstCpy(text,mesg03);

Lcd8_Out(1,3,text);

for(i=5; i<=9; i++){

Lcd8_Chr(1, i,' ');

}

}

if ((zeci_de_volti==1) && (unitati_de_volt == 2) && (zecimale_de_volt >= 5)){

CustomChar(character6,0,1,1);

strConstCpy(text,mesg04);

Lcd8_Out(1,3,text);

}

if ((zeci_de_volti==1) && (unitati_de_volt == 2) && (zecimale_de_volt < 5)){

CustomChar(character7,0,1,1);

strConstCpy(text,mesg05);

Lcd8_Out(1,3,text);

for(i=6; i<=9; i++){

Lcd8_Chr(1, i,' ');

}

}

if ((zeci_de_volti==1) && (unitati_de_volt == 0)){

CustomChar(character8,0,1,1);

strConstCpy(text,mesg06);

Lcd8_Out(1,3,text);

for(i=8; i<=9; i++){

Lcd8_Chr(1, i,' ');

}

}

if (zeci_de_volti == 0){

CustomChar(character9,0,1,1);

strConstCpy(text,mesg07);

Lcd8_Out(1,3,text);

for(i=9; i<=9; i++){

Lcd8_Chr(1, i,' ');

}

}

}

//–––––––––––––––––––––––––-//

void functie_lumina_background(){

val_digitala = Adc_Read(4)/10;

if (val_digitala <= 30){

lum_function_chec = 1; // check and uncheck for not interferring with interrupt LED state

PORTB.f0 = 1;

PORTE.f1 = 1;

}

else{

lum_function_chec = 0;

PORTB.f0 = 0;

PORTE.f1 = 0;

}

}

//–––––––––––––––––––––––––-//

void functie_temperatura_exterior(){

val_digitala = 0; //calcul temp. prin filtru de mediere

for (j=0; j<30; j++){ //calcul temp. prin filtru de mediere

val_digitala = Adc_Read(1)+val_digitala; //calcul temp. prin filtru de mediere

} //calcul temp. prin filtru de mediere

val_digitala = (val_digitala-3060)/30; //calcul temp. prin filtru de mediere

val_digitala= 4*val_digitala + 8*val_digitala/10+ 8*val_digitala/100;

if (val_digitala>=1000){

sute_de_grade_C=val_digitala/1000;

while (val_digitala>=1000){

val_digitala-=1000;

}

}

else{

sute_de_grade_C=0;

}

if (val_digitala>=100){

zeci_de_grade_C=val_digitala/100;

while (val_digitala>=100){

val_digitala-=100;

}

}

else

zeci_de_grade_C=0;

if (val_digitala>=10){

unitati_de_grade_C=val_digitala/10;

while (val_digitala>=10){

val_digitala-=10;

}

}

else

unitati_de_grade_C=0;

zecimale_de_grade_C=val_digitala;

if ( unitati_de_grade_C<=4 && !zeci_de_grade_C && !sute_de_grade_C){ // test inghet

strConstCpy(text,mesg08); //afisare mesaj "INGHET" (temp < 5C)

Lcd8_Out(2,1,text); //afisare mesaj "INGHET" (temp < 5C)

} //afisare mesaj "INGHET" (temp < 5C)

else {

Lcd8_Chr(2,14,' '); //afisare in mod normal temperatura (5-150C)

CustomChar(character1,1,2,16); //afisare in mod normal temperatura (5-150C)

strConstCpy(text,mesg6); //afisare in mod normal temperatura (5-150C)

Lcd8_Out(2,1,text); //afisare in mod normal temperatura (5-150C)

Lcd8_Chr(2, 15, ' ');

if (sute_de_grade_C==0)

Lcd8_Chr(2, 9, ' '); // caracterul liber

else

Lcd8_Chr(2, 9, 0b00110000+sute_de_grade_C); // caracterul 0 din CGROM+val.din coonversie

Lcd8_Chr(2, 10, 0b00110000+zeci_de_grade_C);

Lcd8_Chr(2,11, 0b00110000+unitati_de_grade_C);

Lcd8_Chr(2, 12,'.');

Lcd8_Chr(2, 13, 0b00110000+zecimale_de_grade_C);

}

}

//–––––––––––––––––––––––––-//

void functie_temperatura_apa(){

Lcd8_Chr(1,14,' ');

val_digitala = 0; //calcul temp. prin filtru de mediere

for (j=0; j<30; j++){ //calcul temp. prin filtru de mediere

val_digitala = Adc_Read(2)+val_digitala; //calcul temp. prin filtru de mediere

} //calcul temp. prin filtru de mediere

val_digitala = (val_digitala-3060)/30; //calcul temp. prin filtru de mediere

val_digitala= 4*val_digitala + 8*val_digitala/10+ 8*val_digitala/100;

if (val_digitala>=1000){

sute_de_grade_C=val_digitala/1000;

while (val_digitala>=1000){

val_digitala-=1000;

}

}

else{

sute_de_grade_C=0;

}

if (val_digitala>=100){

zeci_de_grade_C=val_digitala/100;

while (val_digitala>=100){

val_digitala-=100;

}

}

else

zeci_de_grade_C=0;

if (val_digitala>=10){

unitati_de_grade_C=val_digitala/10;

while (val_digitala>=10){

val_digitala-=10;

}

}

else

unitati_de_grade_C=0;

zecimale_de_grade_C=val_digitala;

if ((sute_de_grade_C == 0) && (zeci_de_grade_C < 9)){

set_t = 0; // for continouse LED allerting mode

check_temp = 0; // for not interffering in interrupt and for full LED light when pressing button

Lcd8_Chr(1,15, ' ');

Lcd8_Chr(1,8, ' ');

CustomChar(character1,1,1,16); // caracter grade celsius CGRAM 1

strConstCpy(text,mesg7);

Lcd8_Out(1,1,text);

if (set_t1){

PORTD.f1 = 1; // cooler depasire val_digitala

PORTE.f2 = 1; // LED la depasire val_digitala

}

if (!set_t1 && !PORTB.f4 && !PORTB.f5){

PORTD.f1 = 0; // cooler depasire val_digitala

PORTE.f2 = 0; // LED la depasire val_digitala

}

if (sute_de_grade_C==0 )

Lcd8_Chr(1, 9, ' '); // caracterul liber

else

Lcd8_Chr(1, 9, 0b00110000+sute_de_grade_C); // caracterul 0 din CGROM+val.din coonversie

Lcd8_Chr(1, 10, 0b00110000+zeci_de_grade_C);

Lcd8_Chr(1,11, 0b00110000+unitati_de_grade_C);

Lcd8_Chr(1, 12,'.');

Lcd8_Chr(1, 13, 0b00110000+zecimale_de_grade_C);

}

if ( (zeci_de_grade_C >= 9) || (sute_de_grade_C == 1)){

check_temp = 1;

set_t = 1;

PORTD.f1 = 1; // cooler depasire val_digitala

PORTE.f2 = 1; // LED la depasire val_digitala

for (i=1; i<=16; i++) // toggle mesaj 'val_digitala motor'

Lcd8_Chr(1,i,' ');

Delay_ms(170);

strConstCpy(text,mesg9);

Lcd8_Out(1,1,text);

Delay_ms(170);

}

}

//–––––––––––––––––––––––––-//

void functie_temperatura_ulei(){

Lcd8_Chr(2,14,' ');

val_digitala = 0; //calcul temp. prin filtru de mediere

for (j=0; j<30; j++){ //calcul temp. prin filtru de mediere

val_digitala = Adc_Read(3)+val_digitala; //calcul temp. prin filtru de mediere

} //calcul temp. prin filtru de mediere

val_digitala = (val_digitala-3060)/30; //calcul temp. prin filtru de mediere

val_digitala= 4*val_digitala + 8*val_digitala/10+ 8*val_digitala/100;

if (val_digitala>=1000){

sute_de_grade_C=val_digitala/1000;

while (val_digitala>=1000){

val_digitala-=1000;

}

}

else{

sute_de_grade_C=0;

}

if (val_digitala>=100){

zeci_de_grade_C=val_digitala/100;

while (val_digitala>=100){

val_digitala-=100;

}

}

else

zeci_de_grade_C=0;

if (val_digitala>=10){

unitati_de_grade_C=val_digitala/10;

while (val_digitala>=10){

val_digitala-=10;

}

}

else

unitati_de_grade_C=0;

zecimale_de_grade_C=val_digitala;

if ((sute_de_grade_C == 0) && (zeci_de_grade_C < 9)){

set_t1 = 0; // for continouse LED allerting mode

check_temp = 0; // for not interffering in interrupt and for full LED light when pressing button

Lcd8_Chr(2,15, ' ');

CustomChar(character1,1,2,16); // caracter grade celsius CGRAM 1

strConstCpy(text,mesg8);

Lcd8_Out(2,1,text);

if (set_t){

PORTD.f1 = 1; // cooler depasire val_digitala

PORTE.f2 = 1; // LED avertizare

}

if (!set_t && !PORTB.f4 && !PORTB.f5){

PORTD.f1 = 0; // cooler depasire val_digitala

PORTE.f2 = 0;

}

if (sute_de_grade_C==0 )

Lcd8_Chr(2, 9, ' '); // caracterul liber

else

Lcd8_Chr(2, 9, 0b00110000+sute_de_grade_C); // caracterul 0 din CGROM+val.din coonversie

Lcd8_Chr(2, 10, 0b00110000+zeci_de_grade_C);

Lcd8_Chr(2,11, 0b00110000+unitati_de_grade_C);

Lcd8_Chr(2, 12,'.');

Lcd8_Chr(2, 13, 0b00110000+zecimale_de_grade_C);

}

if ((zeci_de_grade_C >= 9)||(sute_de_grade_C == 1)){

check_temp = 1;

set_t1 = 1;

PORTD.f1 = 1; // cooler depasire val_digitala

PORTE.f2 = 1; // cooler depasire val_digitala

for (i=1; i<=16; i++) // toggle mesaj 'val_digitala motor'

Lcd8_Chr(2,i,' ');

Delay_ms(170);

strConstCpy(text,mesg9);

Lcd8_Out(2,1,text);

Delay_ms(170);

}

}

//–––––––––––––––––––––––––-//

void functie_lumina_meniu_principal(){

Lcd8_Chr(1,5,' ');

Lcd8_Chr(1, 4, '%');

val_digitala = Adc_Read(4);

lumina_pwm = Adc_Read(4)/10;

if (lumina_pwm >= 100)

lumina_pwm = 100;

val_digitala =val_digitala/10;

if (val_digitala >=100)

sute_procente_lum=1;

else

sute_procente_lum=0;

if (val_digitala>=10){

zeci_procente_lum=val_digitala/10;

while (val_digitala>=10){

val_digitala-=10;

}

}

else{

zeci_procente_lum=0;

}

unitati_procente_lum=val_digitala;

if (sute_procente_lum==0){

Lcd8_Chr(1, 1, ' '); // caracterul liber

Lcd8_Chr(1, 2, 0b00110000+zeci_procente_lum);

Lcd8_Chr(1, 3, 0b00110000+unitati_procente_lum);

}

else{

Lcd8_Chr(1, 1, '1');

Lcd8_Chr(1, 2, '0');

Lcd8_Chr(1, 3, '0');

}

indice_LCD_bargraph=zeci_procente_lum+6;

for (i=6;i<=indice_LCD_bargraph;i++){

if ((!zeci_procente_lum) && (!unitati_procente_lum))

CustomChar(character12,2,1,i); // caracter 0 functie_loading empty

else

CustomChar(character0,3,1,i);

}

for (i=indice_LCD_bargraph+1;i<=16;i++){

CustomChar(character12,2,1,i);

}

if (zeci_procente_lum<=3){

strConstCpy(text,mesg10);

Lcd8_Out(2,1,text);

lum_function_chec = 1; // check and uncheck for not interferring with interrupt LED state

PORTB.f0 = 1;

PORTE.f1 = 1; // LED avertizare

}

else{

lum_function_chec = 0; // check and uncheck for not interferring with interrupt LED state

PORTB.f0 = 0;

PORTE.f1 = 0; // LED avertizare

for (i=1; i<=16; i++)

Lcd8_Chr(2,i,' ');

}

}

//–––––––––––––––––––––––––-//

void functie_umiditate_meniu_principal(){

Lcd8_Chr(1,5,' ');

Lcd8_Chr(1, 4, '%');

val_digitala = Adc_Read(9);

if (val_digitala >=100)

sute_procente_lum=1;

else

sute_procente_lum=0;

if (val_digitala>=10){

zeci_procente_lum=val_digitala/10;

while (val_digitala>=10){

val_digitala-=10;

}

}

else{

zeci_procente_lum=0;

}

unitati_procente_lum=val_digitala;

if (sute_procente_lum==0){

Lcd8_Chr(1, 1, ' '); // caracterul liber

Lcd8_Chr(1, 2, 0b00110000+zeci_procente_lum);

Lcd8_Chr(1, 3, 0b00110000+unitati_procente_lum);

}

else{

Lcd8_Chr(1, 1, '1');

Lcd8_Chr(1, 2, '0');

Lcd8_Chr(1, 3, '0');

}

indice_LCD_bargraph=zeci_procente_lum+6;

for (i=6;i<=indice_LCD_bargraph;i++){

if ((!zeci_procente_lum) && (!unitati_procente_lum))

CustomChar(character12,2,1,i); // caracter 0 functie_loading empty

else

CustomChar(character0,3,1,i);

}

for (i=indice_LCD_bargraph+1;i<=16;i++){

CustomChar(character12,2,1,i);

}

if ((zeci_procente_lum<=3) &&(sute_procente_lum == 0)){ // analiza valoare umiditate(<=30%)

PORTD.f4 = 0; // LED avertizare umiditate

strConstCpy(text,mesg09); // afisare mesaj "umiditate"

Lcd8_Out(2,1,text); // LED avertizare

}

if ((zeci_procente_lum>3) || (sute_procente_lum == 1)){ // analiza valoare umiditate (>30%)

PORTD.f4 = 1; // LED avertizare umiditate > 30%

strConstCpy(text,mesg010); // afisare mesaj "stergatoare on"

Lcd8_Out(2,1,text);

}

}

//–––––––––––––––––––––––––-//

void functie_calcul_benzina(){

val_digitala = Adc_Read(5);

val_digitala =val_digitala/20;

if (val_digitala>=10){

zeci_procente_lum=val_digitala/10;

while (val_digitala>=10){

val_digitala-=10;

}

}

else

zeci_procente_lum=0;

unitati_procente_lum=val_digitala;

if (!zeci_procente_lum && unitati_procente_lum <= 7){

Lcd8_Cmd(Lcd_CLEAR) ;

Delay_ms(600);

strConstCpy(text,mesg14);

Lcd8_Out(1,1,text);

Delay_ms(600);

}

else{

Lcd8_Chr(2,14,' ');

Lcd8_Chr(2,8,' ');

Lcd8_Chr(2,9,' ');

for (i=3;i<=11;i++)

Lcd8_Chr(1,i,' ');

strConstCpy(text,mesg12);

Lcd8_Out(1,12,text);

strConstCpy(text,mesg13);

Lcd8_Out(2,1,text);

Lcd8_Chr(1, 1, 0b00110000+zeci_procente_lum);

Lcd8_Chr(1, 2, 0b00110000+unitati_procente_lum);

autonomie = (zeci_procente_lum * 10) + unitati_procente_lum;

temp1 = autonomie/8;

temp2 = autonomie % 8;

Lcd8_Chr(2, 10, 0b00110000+temp1);

Lcd8_Chr(2, 11, 0b00110000+temp2);

Lcd8_Chr(2, 12, '0');

Lcd8_Chr(2, 13, ' ');

Lcd8_Chr(2, 15, 'K');

Lcd8_Chr(2, 16, 'm');

}

}

//–––––––––––––––––––––––––-//

void functie_loading(){

strConstCpy(text,mesg3);

Lcd8_Out(1,1,text);

CustomChar(character0,0,2,1);

Delay_ms (80);

CustomChar(character0,0,2,2);

Delay_ms (80);

CustomChar(character0,0,2,3);

Delay_ms (380);

CustomChar(character0,0,2,4);

Delay_ms (500);

CustomChar(character0,0,2,5);

Delay_ms (260);

CustomChar(character0,0,2,6);

Delay_ms (150);

CustomChar(character0,0,2,7);

Delay_ms (200);

CustomChar(character0,0,2,8);

Delay_ms (160);

CustomChar(character0,0,2,9);

Delay_ms (115);

CustomChar(character0,0,2,10);

Delay_ms (280);

CustomChar(character0,0,2,11);

Delay_ms (500);

CustomChar(character0,0,2,12);

Delay_ms (500);

CustomChar(character0,0,2,13);

Delay_ms (200);

CustomChar(character0,0,2,14);

Delay_ms (80);

CustomChar(character0,0,2,15);

Delay_ms (80);

CustomChar(character0,0,2,16);

Delay_ms (530);

Lcd8_Cmd(Lcd_CLEAR) ;

}

//–––––––––––––––––––––––––-//

void interrupt (){

cntr = cntr + 1; // contor for meniu and function LED

if (cntr >= 1 && cntr <= 50) // ON LED state for short period of time (blue LED)

PORTE.f1 = 1;

else if (!lum_function_chec) // check from LUMINA functions that LED is not ON for not interferring

PORTE.f1 = 0; // OFF LED state for short period of time

if (cntr >= 3000) // counter reset

cntr = 0;

if (PORTB.f4 || PORTB.f5) // LED ON when press menu button (red)

PORTE.f2 = 1;

if (!PORTB.f4 && !PORTB.f5 && !check_temp)

PORTE.f2 = 0; // LED ON when press menu button (red)

if (!PORTB.f4 && !PORTB.f5 && !check ){ // meniu idle

meniu_1 = 1;

meniu_2 = 0;

meniu_3 = 0;

meniu_4 = 0;

meniu_5 = 0;

goto endint; // Speeding execution

}

if (PORTB.f4 && check == 0){ // meniu 1-2

cntr = 0;

check = 1;

meniu_1 = 0;

meniu_2 = 1;

meniu_3 = 0;

meniu_4 = 0;

meniu_5 = 0;

goto endint; // Speeding execution

}

if (PORTB.f5 && check == 1 && cntr>= 500){ // meniu 2-1

cntr = 0;

check = 0;

meniu_1 = 1;

meniu_2 = 0;

meniu_3 = 0;

meniu_4 = 0;

meniu_5 = 0;

goto endint; // Speeding execution

}

if (PORTB.f4 && check == 1 && cntr>= 500){ // meniu 2-3

cntr = 0;

check = 3;

meniu_1 = 0;

meniu_2 = 0;

meniu_3 = 1;

meniu_4 = 0;

meniu_5 = 0;

goto endint; // Speeding execution

}

if (PORTB.f5 && check == 3 && cntr>= 500){ // meniu 3-2

cntr = 0;

check = 1;

meniu_1 = 0;

meniu_2 = 1;

meniu_3 = 0;

meniu_4 = 0;

meniu_5 = 0;

goto endint; // Speeding execution

}

if (PORTB.f4 && check == 3 && cntr>= 500){ // meniu 3-4

cntr = 0;

check = 4;

meniu_1 = 0;

meniu_2 = 0;

meniu_3 = 0;

meniu_4 = 1;

meniu_5 = 0;

goto endint; // Speeding execution

}

if (PORTB.f5 && check == 4 && cntr>= 500){ // meniu 4-3

cntr = 0;

check = 3;

meniu_1 = 0;

meniu_2 = 0;

meniu_3 = 1;

meniu_4 = 0;

meniu_5 = 0;

goto endint; // Speeding execution

}

if (PORTB.f4 && check == 4 && cntr>= 500){ // meniu 4-5

cntr = 0;

check = 7;

meniu_1 = 0;

meniu_2 = 0;

meniu_3 = 0;

meniu_4 = 0;

meniu_5 = 1;

goto endint; // Speeding execution

}

if (PORTB.f5 && check == 7 && cntr>= 500){ // meniu 5-4

cntr = 0;

check = 4;

meniu_1 = 0;

meniu_2 = 0;

meniu_3 = 0;

meniu_4 = 1;

meniu_5 = 0;

goto endint; // Speeding execution

}

if (PORTB.f4 && check == 7 && cntr>= 500){ // meniu 5-6

cntr = 0;

check = 8;

meniu_1 = 0;

meniu_2 = 0;

meniu_3 = 0;

meniu_4 = 0;

meniu_5 = 0;

meniu_6 = 1;

goto endint; // Speeding execution

}

if (PORTB.f5 && check == 8 && cntr>= 500){ // meniu 6-5

cntr = 0;

check = 7;

meniu_1 = 0;

meniu_2 = 0;

meniu_3 = 0;

meniu_4 = 0;

meniu_5 = 1;

meniu_6 = 0;

goto endint; // Speeding execution

}

//––––––RESET T1 INTERRUPT FLAG + SET START VALUE ––––––//

endint :

PIR1.TMR1IF = 0;

TMR1H = 0b11111110; // setat la 500*0.5u = 250us

TMR1L = 0b00001011;

}

//–––––––––––––––––––––––––-//

Similar Posts

  • Sisteme Informatice

    CUPRINS În acеasta lucrarе cuvântul Intеrnеt aparе în dublă ipostază: prima dată pеntru că еstе vorba dеsprе o aplicațiе on-linе, și tot cееa cе îți trеbuiе ca s-o accеsеzi еstе un calculator conеctat la Intеrnеt, iar a doua oară pеntru că nе prеzintă gеstiunеa vânzărilor dе Intеrnеt într-o firmă În contеxtul prеzеntat antеrior, în carе…

  • Criptosisteme Clasice

    Lista abrevierilor DES – Data Encryption Standard; SEAL – Software-oplimised Encryption /llgorithm; ECB – Electronic Code Book; CBC – Cipher Block Chaining; CFB – Cipher Feed Back; OFB – Output Feedback Mode; MIC – Message Integrity Check; MDC – Manipulation Detection Code; VCL – Visual Component Library; GDI – Graphics Device Interface; GUI – Graphical…

  • Realizarea Filmelor cu Windows Xp

    CUPRINS 1. Introducere 3 2. Prezentarea programului folosit …………………………………………………………………………………3 3. Colectarea elementelor proiectului 3 4. Pregătirea clipurilor 3 5. Asamblarea clipurilor……………………………………………………………………………………………….4 6. Inserarea tranzițiilor…………………………………………………………………………………………………4 7. Aplicarea efectelor speciale……………………………………………………………………………………….4 8. Crearea titlurilor……………………………………………………………………………………………………….4 9. Utilizarea materialelor audio………………………………………………………………………………………5 10.Crearea autofilmelor………………………………………………………………………………………………..6 11. Operațiile finale……………………………………………………………………………………………………..6 12. Listă bibliografică…………………………………………………………………………………………………..7 INTRODUCERE Această lucrare oferă posibilitatea de a realiza rapid proiecte prin imagini…

  • Date Generale Despre Sap

    Date generale despre SAP 1.1. SAP- Misiune 1.1.1. SAP- lider mondial în furnizarea de soluții informatice pentru afaceri SAP reprezintă Sistemul Aplicațiilor și Produselor realizat de firma germană SAP AG. SAP-ul este la ora actuală cel mai important program de tip ERP (Planificarea resurselor întreprinderii) din lume. Programul SAP este foarte complex, fiind de mare…

  • Utlizarea Aplicatiilor Informatice din Pachetul Integrat de Programe Logfas Pentru Planificarea Dislocarii Brigazii de Infanterie Mecanizata Intr Un Teatru de Operatii

    LUCRARE DE DISERTAȚIE Utlizarea aplicațiilor informatice din pachetul integrat de programe logfas pentru planificarea dislocării brigăzii de infanterie mecanizată într-un teatru de operații CUPRINS LUCRARE INTRODUCERE CAPITOLUL 1 ASPECTE CONCEPTUALE PRIVIND DISLOCAREA FORȚELOR 1.1 Dislocarea, concepte, faze Și modele generale de executare a dislocării 1.2 Principiile de executare a dislocării 1.3 Responsabilități privind executarea activităților…

  • Realizarea Unui Program de Simulare Circuite Descrise In Vhdl

    1. Descrierea proiectului Prezentare generala Proiectul consta in realizarea unui program care sa simuleze circuite descrise in VHDL. VHDL (prescurtare de la Vhsic (Very High Speed Integrated Circuits) HDL (Hardware Description Language)) este un limbaj de programare care descrie structuri hardware. (de exemplu un circuit integrat care trebuie construit este descris in acest limbaj de…