#define RS IO_RA4_PORT #define EN IO_RB3_PORT #define D4 IO_RB4_PORT #define D5 IO_RB5_PORT #define D6 IO_RB6_PORT #define D7 IO_RB7_PORT #include #include"mcc_generated_files/mcc.h" #include "lcd.h" // /* * necessit #include che occupa 6K !!!NON USATO!!!! Per scrivere numeri: - creare stringa con sprintf(nome variabile di tipo stringa,"TESTO(eventuale)= %d" , Variabile numerica - scrivere stringa che adesso contiene numero Esempio float f = 1.414; int a = 56; char s[20]; .... .... sprintf(s, "Float = %f", f); Lcd_Set_Cursor(1,1); Lcd_Write_String(s); sprintf(s, "Integer = %d", a); Lcd_Set_Cursor(2,1); Lcd_Write_String(s); */ // Menu imposta peso Max trasduttore char MTrasduttore() { char a=0; signed int c=0; Lcd_Clear(); __delay_ms(1); // Scrivere maschera menu Peso massimo Lcd_Set_Cursor(1,1); Lcd_Write_String(" Imposta Sensore"); Lcd_Set_Cursor(2,1); Lcd_Write_String(" SU: 10 Kg"); // RB1 Lcd_Set_Cursor(3,1); Lcd_Write_String("SX: 1 Kg DX: 5 Kg"); //RB0 RA5 Lcd_Set_Cursor(4,1); Lcd_Write_String(" GIU': Conferma"); //RB2 while(a==0) { if(IO_RA5_GetValue()==0) // incrementa { __delay_ms(50); if(IO_RA5_GetValue()==0) // incrementa { c=5; } } if(IO_RB0_GetValue()==0) // decrementa { __delay_ms(50); if(IO_RB0_GetValue()==0) // decrementa { c=1; } } if(IO_RB1_GetValue()==0) // decrementa { __delay_ms(50); if(IO_RB1_GetValue()==0) // decrementa { c=10; } } if(IO_RB2_GetValue()==0) // esci { __delay_ms(50); if(IO_RB2_GetValue()==0) // esci { a=1; } } } Lcd_Clear(); return c; } // Menu Peso Massimo int MPesoMax() { char a=0; char Migliaia=0,Centinaia=0,Decine=0,Unita=0; signed int c=0; Lcd_Clear(); __delay_ms(1); // Scrivere maschera menu Peso massimo Lcd_Set_Cursor(1,1); Lcd_Write_String("Imposta Peso Max"); Lcd_Set_Cursor(2,1); Lcd_Write_String(" PesoMax = 0000 g "); Lcd_Set_Cursor(3,1); Lcd_Write_String("SX: Meno DX: Piu"); //RB0 RA5 Lcd_Set_Cursor(4,1); Lcd_Write_String(" GIU': Conferma"); //RB2 while(a==0) { if(IO_RA5_GetValue()==0) // incrementa { __delay_ms(50); if(IO_RA5_GetValue()==0) // incrementa { c=c+1; if(c>1000) { c=1000; } } } if(IO_RB0_GetValue()==0) // decrementa { __delay_ms(50); if(IO_RB0_GetValue()==0) // decrementa { c=c-1; if(c<0) { c=0; } } } if(IO_RB2_GetValue()==0) // esci { __delay_ms(50); if(IO_RB2_GetValue()==0) // esci { a=1; } } Migliaia=c/1000; Centinaia=(c-Migliaia*1000)/100; Decine=(c-(Migliaia*1000)-(Centinaia*100))/10; Unita=(c-(Migliaia*1000)-(Centinaia*100)-(Decine*10)); Lcd_Set_Cursor(2,12); Lcd_Write_Char(Migliaia+48); Lcd_Set_Cursor(2,13); Lcd_Write_Char(Centinaia+48); Lcd_Set_Cursor(2,14); Lcd_Write_Char(Decine+48); Lcd_Set_Cursor(2,15); Lcd_Write_Char(Unita+48); Lcd_Set_Cursor(2,16); Lcd_Write_Char(" g"); } Lcd_Clear(); return c; } // Menu pesa // Menu Tara int MTara() { char a=0; char Migliaia=0,Centinaia=0,Decine=0,Unita=0; unsigned int c=0; Lcd_Clear(); __delay_ms(1); // Scrivere maschera menu Peso massimo Lcd_Set_Cursor(1,1); Lcd_Write_String(" Imposta TARA "); Lcd_Set_Cursor(2,1); Lcd_Write_String(" TARA = 0000 g"); Lcd_Set_Cursor(4,1); Lcd_Write_String(" GIU': Impostazioni"); //RB2 // leggo ADC ADCC_Initialize(); __delay_us(50); ADCON0bits.ADON = 1; while(a==0) { ADCON0bits.ADGO = 1; while(ADCON0bits.ADGO == 1) { continue; } c= ADRESL + (ADRESH<<8); Migliaia=c/1000; Centinaia=(c-Migliaia*1000)/100; Decine=(c-(Migliaia*1000)-(Centinaia*100))/10; Unita=(c-(Migliaia*1000)-(Centinaia*100)-(Decine*10)); Lcd_Set_Cursor(2,11); Lcd_Write_Char(Migliaia+48); Lcd_Write_Char(Centinaia+48); Lcd_Write_Char(Decine+48); Lcd_Write_Char(Unita+48); Lcd_Write_Char(" g"); if(IO_RB2_GetValue()==0) // Conferma Giu' { __delay_ms(50); if(IO_RB2_GetValue()==0) // Conferma Giu' { a=1; } } } Lcd_Clear(); return c; } // Menu Pesa void MPeso(int T,int M) { char a=0; char Migliaia=0,Centinaia=0,Decine=0,Unita=0; unsigned int c=0; Lcd_Clear(); __delay_ms(1); // Scrivere maschera menu Peso massimo Lcd_Set_Cursor(1,1); Lcd_Write_String(" MISURA"); Lcd_Set_Cursor(2,1); Lcd_Write_String(" "); Lcd_Set_Cursor(3,1); Lcd_Write_String(" Peso = 0000 g"); Lcd_Set_Cursor(4,1); Lcd_Write_String(" GIU': Impostazioni"); //RB2 ADCC_Initialize(); __delay_us(50); ADCON0bits.ADON = 1; while(a==0) { ADCON0bits.ADGO = 1; while(ADCON0bits.ADGO == 1) { continue; } c= ADRESL + (ADRESH<<8); c= c - T; // Scrivo Peso - Tara Migliaia=c/1000; Centinaia=(c-Migliaia*1000)/100; Decine=(c-(Migliaia*1000)-(Centinaia*100))/10; Unita=(c-(Migliaia*1000)-(Centinaia*100)-(Decine*10)); Lcd_Set_Cursor(3,10); Lcd_Write_Char(Migliaia+48); Lcd_Write_Char(Centinaia+48); Lcd_Write_Char(Decine+48); Lcd_Write_Char(Unita+48); Lcd_Write_Char(" g"); __delay_ms(50); // se c = M deve attivare cicalino if(IO_RB2_GetValue()==0) // Conferma Giu' { __delay_ms(50); if(IO_RB2_GetValue()==0) // Conferma Giu' { a=1; } } } Lcd_Clear(); } void main() { SYSTEM_Initialize(); OSCILLATOR_Initialize(); PMD_Initialize(); PIN_MANAGER_Initialize(); PIN_MANAGER_IOC(); // creare una funzione per ogni menu che ritorna valore intero // int Menu1(),int Menu2(),int Menu3(); unsigned int Peso=0; unsigned int Tara=0, Peso_Max=0; unsigned char Trasduttore; //TRISA e TRISB in init() __delay_ms(50); Lcd_Init(); __delay_ms(50); Lcd_Clear(); Lcd_Set_Cursor(1,1); Lcd_Write_String(" ITT PASCAL"); Lcd_Set_Cursor(3,1); Lcd_Write_String(" DOSIMETRO"); Lcd_Set_Cursor(4,1); Lcd_Write_String(" Classi 5C - 5A"); __delay_ms(2000); Lcd_Clear(); while(1) { Lcd_Set_Cursor(1,1); Lcd_Write_String(" > IMPOSTAZIONI <"); Lcd_Set_Cursor(3,1); Lcd_Write_String("SX:TARA DX:PMax"); //RB0 RA5 Lcd_Set_Cursor(4,1); Lcd_Write_String("SU:Trasd. GIU':PESO"); //RB1 RB2 if(IO_RA5_GetValue()==0) { __delay_ms(50); if(IO_RA5_GetValue()==0) { Peso_Max=MPesoMax(); } } if(IO_RB0_GetValue()==0) { __delay_ms(50); if(IO_RB0_GetValue()==0) { Tara=MTara(); } } if(IO_RB2_GetValue()==0) { __delay_ms(50); if(IO_RB2_GetValue()==0) { MPeso(Tara,Peso_Max); } } if(IO_RB1_GetValue()==0) { __delay_ms(50); if(IO_RB1_GetValue()==0) { Trasduttore=MTrasduttore(); } } } }