#include <16F690.h>
#device adc=10
#FUSES HS, PUT, NOPROTECT, NOBROWNOUT, WDT, NOCPD
#use delay(clock=20000000)
#define LCD_ENABLE_PIN PIN_C7
#define LCD_RS_PIN PIN_C6
#define LCD_RW_PIN PIN_C5
#define LCD_TYPE 2
#define LCD_DATA4 PIN_C1
#define LCD_DATA5 PIN_C2
#define LCD_DATA6 PIN_C3
#define LCD_DATA7 PIN_C4
#include <lcd.c>

long int time1=0, time2=0, fordulat=0, sebesseg=0;

#int_TIMER0
void TIMER0_isr() { //================interrupt timer================
time1++;
time2++;
}

#int_EXT
void EXT_isr() { //==============interrupt fordulatmérés===============
fordulat++;
}

#int_RB
void RB_isr() { //==============interrupt sebessegmeres===============
sebesseg++;
}

void main() {

int a, b, c, d, i; //================deklaráció======================== 
long int homerseklet, tank, fordulatprog, sebessegprog;

setup_wdt(WDT_TIMES_128); //WDT=52ms (timer0 prescaler miatt)64
//setup_oscillator(OSC_8MHZ);
set_tris_a(0b00000100);
set_tris_b(0b01100000);
set_tris_c(0b00000001); 

setup_timer_0(T0_INTERNAL|T0_DIV_1); //======interrupt konfig========51us
 enable_interrupts(INT_TIMER0); //TMR0 megszakítás be
 enable_interrupts(GLOBAL); //GIE bekapcsol
 ext_int_edge(H_TO_L); //Magasról alacsonyra - Lefutó él
 enable_interrupts(INT_EXT|INT_RB|INT_RB6); //RA2 megszakítás be

lcd_init(); //=====================lcd feliratozás======================
if(NORMAL_POWER_UP==RESTART_CAUSE()){
lcd_gotoxy(1,1);
lcd_putc("CSONTOS PRODUCT");
restart_wdt();
for(i=0;i<100;i++){
delay_ms(20);
restart_wdt();
}

lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc("henger, fordulat");
lcd_gotoxy(1,2);
lcd_putc("tank, sebesseg");
restart_wdt();
for(i=0;i<100;i++){
delay_ms(20);
restart_wdt();
}
lcd_putc("\f");
}

setup_adc_ports(sAN4|sAN11|VSS_VDD); //==================ADC konfig===========================
setup_adc(ADC_CLOCK_DIV_32);//20MHz-nél 1,6us

while(1){  //=================fő ciklus=====================


homerseklet=tank=0; //================ADC konverzió hőmérséklet,tank=============
for(i=0;i<32;i++){ 
delay_ms(8);

set_adc_channel(4); 
delay_ms(1);
homerseklet+=read_adc();

set_adc_channel(11); 
delay_ms(1);
tank+=read_adc();

restart_wdt();
}
homerseklet=(homerseklet/32)*4.887-500;
tank=(tank/32)/7.85;
//if(tank>100) tank=100;

/*if(homerseklet>1100) //=================magas hőmérséklet riasztás============
for(i=0;i<255;i++){
output_high(PIN_C2);
delay_us(450);
output_low(PIN_C2);
delay_us(50);
//restart_wdt();
}*/


a=b=c=d=0; //=========================hőmérséklet kiírás===================
i=1;
while(i){ 
if(homerseklet>=1000) { a++; homerseklet-=1000;  }
else
if(homerseklet>=100) { b++; homerseklet-=100;  }
else 
if(homerseklet>=10) { c++; homerseklet-=10; }
else 
if(homerseklet>=1) { d++; homerseklet-=1; }
else i=0;
}
restart_wdt();

lcd_gotoxy(1,1);
if(a>0) lcd_putc(a+48);
else lcd_putc(" ");
lcd_putc(b+48);
lcd_putc(c+48);
lcd_putc(".");
lcd_putc(d+48);
lcd_putc(0xDF);
lcd_putc("C ");

a=b=c=d=0; //=========================tank kiírás===================
i=1;
while(i){ 
if(tank>=100) { a++; tank-=100;  }
else
if(tank>=10) { b++; tank-=10;  }
else 
if(tank>=1) { c++; tank-=1; }
else i=0;
}
restart_wdt();

lcd_gotoxy(1,2);
if(a>0) lcd_putc(a+48);
else lcd_putc(" ");
lcd_putc(b+48);
lcd_putc(c+48);
lcd_putc("%    ");

a=b=c=d=0; //=========================fordulat kiírás===================
i=1;
if(fordulat) fordulatprog=(117187/(time1/fordulat));//146484
time1=0;
fordulat=0;

if(fordulatprog>9999) fordulatprog=9999;

while(i){ 
if(fordulatprog>=1000) { a++; fordulatprog-=1000;  }
else 
if(fordulatprog>=100) { b++; fordulatprog-=100; }
else 
if(fordulatprog>=10) { c++; fordulatprog-=10; }
else 
if(fordulatprog>=1) { d++; fordulatprog-=1; }
else i=0;
}
restart_wdt();

lcd_gotoxy(9,1);
if(a>0) lcd_putc(a+48);
else lcd_putc(" ");
lcd_putc(b+48);
lcd_putc(c+48);
lcd_putc(d+48);
lcd_putc("0RPM");
restart_wdt();

a=b=c=d=0; //=========================sebesseg kiírás===================
i=1;
sebessegprog=sebesseg;
//if(sebesseg) sebessegprog=(765*sebesseg)/time2;
time2=0;
//sebesseg=0;

if(sebessegprog>199) sebessegprog=199;

while(i){ 
if(sebessegprog>=100) { b++; sebessegprog-=100; }
else 
if(sebessegprog>=10) { c++; sebessegprog-=10; }
else 
if(sebessegprog>=1) { d++; sebessegprog-=1; }
else i=0;
}
restart_wdt();

lcd_gotoxy(9,2);
if(a>0) lcd_putc(a+48);
else lcd_putc(" ");
lcd_putc(b+48);
lcd_putc(c+48);
lcd_putc("Km/h  ");
restart_wdt();

}//WHILE
}//MAIN
   
