#include #include #include #include #pragma config FOSC=INTIO67,PLLCFG=OFF,PRICLKEN=OFF,FCMEN=OFF,IESO=OFF,PWRTEN=ON #pragma config BOREN=OFF,BORV=190,WDTEN=OFF,WDTPS=1,PBADEN=OFF,MCLRE=INTMCLR #pragma config STVREN=OFF,LVP=OFF,DEBUG=OFF,CP0=OFF,CP1=OFF,CP2=OFF,CP3=OFF #pragma config CPB=OFF,CPD=OFF,WRT0=OFF,WRT1=OFF,WRT2=OFF,WRT3=OFF,WRTC=OFF #pragma config WRTB=OFF,WRTD=OFF,EBTR0=OFF,EBTR1=OFF,EBTR2=OFF,EBTR3=OFF,EBTRB=OFF #define SMAZSTRUKTURU mereni.akt=0; mereni.max=0; mereni.min=20000000; #define LCDE LATCbits.LATC1 #define LCDRS LATCbits.LATC0 #define Prepinac PORTBbits.RB0 #define Zatizeni LATBbits.LATB1 //#define MereniBat PORTBbits.RB2 (AN8) //#define MereniZdroj PORTBbits.RB3 (AN9) struct { long min; long akt; long max; }mereni; struct { long bez_zatizeni; long po_zatizeni; }baterie; unsigned char prikaz,Jakost; unsigned long zdroj; void PICinit(); void Delay(unsigned long b); void LCDinit(); void LCDsend(unsigned char prikaz); void LCDzapis(unsigned char prikaz); void LCDpozice(unsigned char prikaz); void LCDsmaz(); int MereniNapeti(char Kanal,int pocet_vzorku); int PrintMys(unsigned char* text, int radek, int pozice); int MereniNapeti(char Kanal,int pocet_vzorku) { long j2,vysledek=0; /*AN8 AN9*//* 01000 = AN8 01001 = AN9*/ if(Kanal==1) Kanal=8*4+1; //RB2 if(Kanal==2) Kanal=9*4+1; //RB3 mereni zdroje for(j2=0;j2mereni.max) mereni.max=zdroj; if(zdroj0;b--); } //****************************************************************************** // INICIACE LCD DISPLEJE void LCDinit() { Delay(150); // cekej 17 ms pro stabilizaci napájení LCDRS=0; prikaz=0b00110000; // nastavení Function Set pro 8bit? LCDsend(prikaz); Delay(50); // cekej 6 ms prikaz=0b00110000; // nastavení Function Set pro 8bit? LCDsend(prikaz); prikaz=0b00110000; // nastavení Function Set pro 8bit? LCDsend(prikaz); prikaz=0b00111000; // 2rádkový displej, 5x8 bod? LCDsend(prikaz); prikaz=0b00001100; // displej on, kurzor, blikání LCDsend(prikaz); prikaz=0b00000001; // vymaz displej LCDsend(prikaz); Delay(50); // cekej 6 ms prikaz=0b00000110; // pozice p?i?ítány, shift off LCDsend(prikaz); } //****************************************************************************** // OVLÁDÁNÍ LCD DISPLEJE void LCDpozice(unsigned char prikaz) { LCDRS=0; LCDsend(prikaz); } void LCDzapis(unsigned char prikaz) { LCDRS=1; LCDsend(prikaz); } void LCDsend(unsigned char prikaz) { LATA=prikaz; LCDE=1; Delay(1); LCDE=0; Delay(1); } //****************************************************************************** void main() { PICinit(); LCDinit(); SMAZSTRUKTURU while(1) { if(Prepinac==1) //mereni zdroje { MereniNapeti(2,1000); LCDsmaz(); LCDpozice(128); printf("Zdroj: %i mV", mereni.akt); LCDpozice(192); LCDzapis(0b11011010); //sipka dolu LCDpozice(193); printf("%i", mereni.min); LCDpozice(199); LCDzapis(0b11011001); //sipka nahoru LCDpozice(200); printf("%i mV", mereni.max); } else if(Prepinac==0) //mereni baterie { LCDsmaz(); LCDpozice(128); printf("Bat:%i/", baterie.bez_zatizeni=MereniNapeti(1,1000)); Zatizeni=1; printf("%i mV", baterie.po_zatizeni=MereniNapeti(1,1000)); Zatizeni=0; if(baterie.bez_zatizeni>1500 && baterie.po_zatizeni>1400) Jakost=1; else if(baterie.bez_zatizeni>1400 && baterie.po_zatizeni>1200) Jakost=2; else if(baterie.bez_zatizeni>1200 && baterie.po_zatizeni>1000) Jakost=3; else if(baterie.bez_zatizeni>1000 && baterie.po_zatizeni>800 ) Jakost=4; else if(baterie.bez_zatizeni>800 && baterie.po_zatizeni>600 ) Jakost=5; else Jakost=6; LCDpozice(192); printf("Jakost: %i", Jakost); while(Prepinac==0); SMAZSTRUKTURU Delay(1000); } } } int PrintMys(unsigned char* text,int radek, int pozice) { int j,PocetZnaku=strlen(*text); if(pozice+PocetZnaku>16) return 1; LCDpozice((pozice+((radek-1)*72))+128); for(j=0;j