Version:0.9 StartHTML:0000000105 EndHTML:0000023295 StartFragment:0000001499 EndFragment:0000023279 mikroIDE
sbit LCD_RS at RB0_bit;                     //Config connessioni LCD
sbit LCD_EN at RB1_bit;
sbit LCD_D4 at RB2_bit;
sbit LCD_D5 at RB3_bit;
sbit LCD_D6 at RB4_bit;
sbit LCD_D7 at RB5_bit;

sbit LCD_RS_Direction at TRISB0_bit;        //Config connessioni LCD
sbit LCD_EN_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB4_bit;
sbit LCD_D7_Direction at TRISB5_bit;

unsigned int Xinit, Yinit, Zinit, Conv;     //Variabili senza segno
signed int Xasse, Yasse, Zasse, Visual;     //variabili con segno
char TXT[4];                                //Variabile testo


void main() {                               //programma principale

  TRISB = 0x00;                             //PORTB tutte uscite
  TRISA = 0b11100000;                       //Primi tre I/0 TRISA ingressi

  Lcd_Init();                               //Inizializza LCD
  Lcd_Cmd(_LCD_CLEAR);                      //Pulisci LCD
  Lcd_Cmd(_LCD_CURSOR_OFF);                 //Cursore spento

  ADC_Init();                               //Inizializza ADC

  Delay_ms(500);                            //Attesa di stabilizzazione

  Xinit = ADC_Get_Sample(0);                //Leggi valore di riposo asse X
  Yinit = ADC_Get_Sample(1);                //Leggi valore di riposo asse Y
  Zinit = ADC_Get_Sample(2);                //Leggi valore di riposo asse Z
  
  Delay_ms(500);                            //Attesa di stabilizzazione

  while(1){
    Conv =  ADC_Get_Sample(0);              //Leggi valore di riposo asse X
    Xasse = (Conv-Xinit)*6;                 //Sottrai valore a riposo e x6
    IntToStr(Xasse, TXT);                   //Trasforma in stringa
    Lcd_Cmd(_LCD_CLEAR);                    //Pulisci LCD
    Lcd_Out(1, 1, " Acc X");                //Informa che è il dato lungo X
    Lcd_Out(2, 4, TXT);                     //mostra valore in millesimo di g
    Delay_ms(700);                          //Aspetta 0.7S per visualizzare

    Conv =  ADC_Get_Sample(1);              //Leggi valore di riposo asse Y
    Xasse = (Conv-Yinit)*6;                 //Sottrai valore a riposo e x6
    IntToStr(Xasse, TXT);                   //Trasforma in stringa
    Lcd_Cmd(_LCD_CLEAR);                    //Pulisci LCD
    Lcd_Out(1, 1, " Acc Y");                //Informa che è il dato lungo Y
    Lcd_Out(2, 4, TXT);                     //mostra valore in millesimo di g
    Delay_ms(700);                          //Aspetta 0.7S per visualizzare

    Conv =  ADC_Get_Sample(2);              //Leggi valore di riposo asse Z
    Xasse = (Conv-Zinit)*6;                 //Sottrai valore a riposo e x6
    IntToStr(Xasse, TXT);                   //Trasforma in stringa
    Lcd_Cmd(_LCD_CLEAR);                    //Pulisci LCD
    Lcd_Out(1, 1, " Acc Z");                //Informa che è il dato lungo Z
    Lcd_Out(2, 4, TXT);                     //mostra valore in millesimo di g
    Delay_ms(700);                          //Aspetta 0.7S per visualizzare
  }
}