bu kodlara göre proteusu yapmaya çalıştım ama olmadı 9v luk pil şarj cihazı devresi için
#include <p18f452.h>// Void main e kadar kütüphane seçimleri lcd fonk. tanımlamaları ve pause fonk. tanımlaması var.
#include <xlcd.h>
#include <delays.h>
#include <adc.h>
#include <stdlib.h>
#pragma config OSC = XT, PWRT = ON, WDT = OFF, LVP = OFF, DEBUG = OFF
#pragma config CP0 = OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF, CPB = OFF, CPD = OFF
#pragma config WRT0 = OFF, WRT1 = OFF, WRT2 = OFF, WRT3 = OFF, WRTB = OFF,WRTC = OFF, WRTD = OFF
#pragma config EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF, EBTR3 = OFF, EBTRB = OFF
void DelayFor18TCY( void )
{
Nop(); Nop(); Nop();
Nop(); Nop(); Nop();
Nop(); Nop(); Nop();
Nop(); Nop(); Nop();
}
void DelayPORXLCD (void)
{
Delay1KTCYx(60);
return;
}
void DelayXLCD (void)
{
Delay1KTCYx(20);
return;
}
void pause(void)
{
unsigned int k,j;
for(k=0;k<50;k++)
for(j=0;j<100;j++) {};
}
void main(void)// main fonksiyonumuzu oluşturduk
{
char dolu[]={'P','I','L',' ','D','O','L','D','U',};// lcd de kunlanacağımız struct lar ve kullanacağımız integer değişkenlerimizi tanımladık
int d;
int yzde;
signed int vo;
char kes[]={'A','K','I','M',' ','K','E','S','I','L','D','I',};
int b;
char add[]={'Y','U','Z','D','E',};
int x;
int t;
signed int a;
char s[3];
TRISA=0xff;//A portlarını giriş olarak tanımladık (ADC verilerilerinin girmesi için)
TRISD=0x00;//D portlarını çıkış olarak tanımladık(ileride röle ile şarj akımlarını kesmek için)
PORTD=0xff;//D portlarının başlangış değerini bir yaparak rölemizi aktid hale getirdik
OpenADC( ADC_FOSC_32 & ADC_RIGHT_JUST & ADC_8ANA_0REF,ADC_CH0 & ADC_INT_OFF );//ADC tanımlamalarımızı yaptık
Delay10TCYx( 5 );
while(1)
{
ConvertADC();
while( BusyADC() );
vo = ReadADC();//RA0 pininden gelen verileri ADC yardımıyla okuttuk
pause();
vo=vo/2;// ADC 16 bit veri yolladığı için onları 8 bit e döndürdük
vo=vo*100;//yüzde hesaplaması için 100 ile çarptık
vo=vo/11; // pilimiz 9V değerinde dolu 0V değerinde boş oluyor,(9-0)işlemi ile pilimizin % hesabı için gerekli olan aralığı bluduk be böldürerek yüzdemizi hesaplatttık
yzde=vo;//vo değişkeninin yzde değişkenini atadık
CloseADC();//adc mizi kapadık
itoa(yzde,s);//yzde integer değerimizi itoa yardımı ile char a dönüştürdük(LCD ye yazdırmak için)
OpenXLCD( FOUR_BIT & LINES_5X7 );//LCD mizi açtık ve aşağıda gerekli programlar var...
while( BusyXLCD());
WriteCmdXLCD(0x01);
while(BusyXLCD());
pause();
putsXLCD(add);//add struct ımızı lcdnin üst satırına yazdırdık
pause();
WriteCmdXLCD(0xC0);//imleci alt satıra aldık
while(BusyXLCD());
pause();
putsXLCD(s);// s structımızı LCD nin alt satırana yazdık
pause();
while(yzde>=100)//Projemizde pil şarj olduktan sonra şarj akımının kesilmesi isteniyor bizde %>100 den diyerek bir koşul oluşturduk
{
PORTD=0x00;//rölemize giden pini 0 yaparak röleyi kapattık
OpenXLCD( FOUR_BIT & LINES_5X7 );//LCD için gerekli kodlar
while( BusyXLCD());
WriteCmdXLCD(0x01);
while(BusyXLCD());
pause();
putsXLCD(dolu); //dolu strucktını lcd ye yazdırık
pause();
WriteCmdXLCD(0xC0);//alt satıra geçtik
while(BusyXLCD());
pause();
putsXLCD(kes);//kes strucktını alt satıra yazdırdık
pause();
pause();
pause();
pause();
}
}
}