You are on page 1of 7

#include <xc.

h>
#include "pic16f877a.h"
#include "stdint.h"
#include "lcd1.h"
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.

// CONFIG
#pragma config FOSC = HS // Oscillator Selection bits (XT
oscillator)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT
disabled)
#pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT
enabled)
#pragma config BOREN = ON // Brown-out Reset Enable bit (BOR
enabled)
#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-
Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR
must be used for programming)
#pragma config CPD = OFF // Data EEPROM Memory Code Protection
bit (Data EEPROM code protection off)
#pragma config WRT = OFF // Flash Program Memory Write Enable
bits (Write protection off; all program memory may be written to by
EECON control)
#pragma config CP = OFF // Flash Program Memory Code Protection
bit (Code protection off)

#define Sayac1 4
#define Sayac2 4
#define B0 PORTDbits.RD4
#define B1 PORTDbits.RD5
#define B2 PORTDbits.RD6
#define B3 PORTDbits.RD7

#define KP8 PORTEbits.RE1


#define KP7 PORTEbits.RE2
#define KP6 PORTCbits.RC0
#define KP5 PORTCbits.RC1
#define KP4 PORTCbits.RC2
#define KP3 PORTCbits.RC3
#define KP2 PORTDbits.RD0
#define KP1 PORTDbits.RD1

#define LED1 PORTDbits.RD2


#define LED2 PORTDbits.RD3
#define LED3 PORTCbits.RC4
#define LED4 PORTCbits.RC5
#define SBIT_ADON 0
#define SBIT_CHS0 3
#define SBIT_ADFM 7

#define BUTTON1 !PORTAbits.RA5 // S1


#define BUTTON2 !PORTEbits.RE0 //S2

volatile struct {
unsigned toplama:1;
unsigned kare:1;
unsigned cikarma:1;
unsigned carpma:1;
unsigned sayici1:1;
unsigned sayici2:1;
unsigned basildi1:1;
unsigned birakildi1:1;
unsigned basildi2:1;
unsigned birakildi2:1;
unsigned stop:1;
unsigned bas0:1;
unsigned bir0:1;
unsigned bas1:1;
unsigned bir1:1;
unsigned bas2:1;
unsigned bir2:1;
unsigned bas3:1;
unsigned bir3:1;
unsigned bas4:1;
unsigned bir4:1;
unsigned bas5:1;
unsigned bir5:1;
unsigned bas6:1;
unsigned bir6:1;
unsigned bas7:1;
unsigned bir7:1;
unsigned bas8:1;
unsigned bir8:1;
unsigned bas9:1;
unsigned bir9:1;
unsigned bas10:1;
unsigned bir10:1;
unsigned bas11:1;
unsigned bir11:1;
unsigned bas12:1;
unsigned bir12:1;
unsigned bas13:1;
unsigned bir13:1;
unsigned bas14:1;
unsigned bir14:1;
unsigned bir15:1;
unsigned bas15:1;

} Flags;

int adcValue=0,sicaklik,ref;
unsigned int sayac1=Sayac1,sayac2=Sayac2,d=0;
unsigned long veri=0,veri1=0;
char dig0,dig1,dig2,dig3,adres;
char ss=Sayac1,digsay=0,btus=0,sira=0;

char saat=12,dakika=0,saniye=0;

void Timer1_initialize(void);
void delay(unsigned int);
void Tustara(void);
void eeprom_yaz(unsigned char , unsigned char );
unsigned char eeprom_oku(unsigned char );

int main(void)
{
//char sayi[]={0x05,0xDD,0x46,0x54,0x9C,0x34,0x24,0x5D,0x04,0x14};
int i=0;

TRISAbits.TRISA0 = 1;//pot
TRISAbits.TRISA1 = 1;//sicaklik
TRISAbits.TRISA2 = 1;//RST
TRISAbits.TRISA3 = 1;//I/O
TRISAbits.TRISA4 = 1;//SCLK
TRISAbits.TRISA5 = 1;//but1
TRISEbits.TRISE0 = 1;//but2
TRISEbits.TRISE1 = 0;//KP8
TRISEbits.TRISE2 = 0;//KP7

TRISCbits.TRISC0 = 0;//KP6
TRISCbits.TRISC1 = 0;//KP5
TRISCbits.TRISC2 = 1;//KP4
TRISCbits.TRISC3 = 1;//KP3
TRISCbits.TRISC4 = 0;//LED3
TRISCbits.TRISC5 = 0;//LED4
TRISCbits.TRISC6 = 0;//TX
TRISCbits.TRISC7 = 1;//RX

TRISDbits.TRISD0 = 1;//KP2
TRISDbits.TRISD1 = 1;//KP1
TRISDbits.TRISD2 = 0;//LED2
TRISDbits.TRISD3 = 0;//LED1
InitLCD();
Wrt_S_LCD("Elektronik:**:**",0,0);

PORTB=0;
ADCON1=6;
Timer1_initialize();

if(eeprom_oku(0xF1)!=50)//EEPROM'a ba?lang?ç de?erleri atan?yor


{
eeprom_yaz(0xF1, 50);//EEPROM'a ba?lang?ç de?erlerinin atand???n?
belirtmek için rasgele bir say? atan?yor
eeprom_yaz(0xF0, 0); // Tu? tak?m?ndan girilecek olan be? say?n?n
adetinin tutuldu?u alan s?f?rlan?yor.
}
adres= eeprom_oku(0xF0);// PIC farkl? zamanlarda aç?ld???nda adres
bilgisi okunuyor.

tur:
if(Flags.bir10) {veri=0;Flags.bir10=0;sira=0;}//10 nolu tu?a
bas?ld???nda veri s?f?rlan?yor.
if(Flags.bir0) {veri=veri*10;Flags.bir0=0;}
if(Flags.bir1) {veri=veri*10+1;Flags.bir1=0;}
if(Flags.bir2) {veri=veri*10+2;Flags.bir2=0;}
if(Flags.bir3) {veri=veri*10+3;Flags.bir3=0;}
if(Flags.bir4) {veri=veri*10+4;Flags.bir4=0;}
if(Flags.bir5) {veri=veri*10+5;Flags.bir5=0;}
if(Flags.bir6) {veri=veri*10+6;Flags.bir6=0;}
if(Flags.bir7) {veri=veri*10+7;Flags.bir7=0;}
if(Flags.bir8) {veri=veri*10+8;Flags.bir8=0;}
if(Flags.bir9) {veri=veri*10+9;Flags.bir9=0;}
//************************************************************
if(veri>99999)veri=veri%100000;//Veri say?s?n?n basamak adedi
s?n?rlan?yor.

if(adres==5){
Wrt_Signed_Int_LCD(eeprom_oku(0x00),0,0);
Wrt_Signed_Int_LCD(eeprom_oku(0x01),5,0);
Wrt_Signed_Int_LCD(eeprom_oku(0x02),10,0);
Wrt_Signed_Int_LCD(eeprom_oku(0x03),0,1);
Wrt_Signed_Int_LCD(eeprom_oku(0x04),5,1);
} else {

if(Flags.bir11 && adres<5) { Flags.bir11=0;


adres++;
eeprom_yaz(adres-1, veri); eeprom_yaz(0xF0, adres);
}
}
Wrt_Signed_Int_LCD(veri,7,0);
Wrt_Signed_Int_LCD(eeprom_oku(adres-1),7,1);
Wrt_Signed_Int_LCD(adres,12,1);
goto tur;

return 0;
}

void interrupt isr(void)

{
if (TMR1IE && TMR1IF)
{
TMR1IF=0;
TMR1 = 40000;

Tustara();

sayac1--;
if(sayac1==0){sayac1=Sayac1;Flags.sayici1=1;}

}
void Tustara(void)
{
btus=20;//btus 20 ise hiç bir tusa bas?lmad? demek
KP8=1;
if(KP4)btus=9;
else if (KP3)btus=6;
else if (KP2)btus=3;
else if (KP1)btus=0;
KP8=0; KP7=1;
if(KP4)btus=10;
else if (KP3)btus=7;
else if (KP2)btus=4;
else if (KP1)btus=1;
KP7=0; KP6=1;
if(KP4)btus=11;
else if (KP3)btus=8;
else if (KP2)btus=5;
else if (KP1)btus=2;
KP6=0; KP5=1;
if(KP4)btus=12;
else if (KP3)btus=13;
else if (KP2)btus=14;
else if (KP1)btus=15;
KP5=0;
if(Flags.sayici1){
Flags.sayici1=0;
if(Flags.bas0 && btus==20){Flags.bir0=1;Flags.bas0=0;}
if(btus==0)Flags.bas0=1;
if(Flags.bas1 && btus==20){Flags.bir1=1;Flags.bas1=0;}
if(btus==1)Flags.bas1=1;
if(Flags.bas2 && btus==20){Flags.bir2=1;Flags.bas2=0;}
if(btus==2)Flags.bas2=1;
if(Flags.bas3 && btus==20){Flags.bir3=1;Flags.bas3=0;}
if(btus==3)Flags.bas3=1;
if(Flags.bas0 && btus==20){Flags.bir3=1;Flags.bas3=0;}
if(btus==3)Flags.bas3=1;
if(Flags.bas4 && btus==20){Flags.bir4=1;Flags.bas4=0;}
if(btus==4)Flags.bas4=1;
if(Flags.bas5 && btus==20){Flags.bir5=1;Flags.bas5=0;}
if(btus==5)Flags.bas5=1;
if(Flags.bas6 && btus==20){Flags.bir6=1;Flags.bas6=0;}
if(btus==6)Flags.bas6=1;
if(Flags.bas7 && btus==20){Flags.bir7=1;Flags.bas7=0;}
if(btus==7)Flags.bas7=1;
if(Flags.bas8 && btus==20){Flags.bir8=1;Flags.bas8=0;}
if(btus==8)Flags.bas8=1;
if(Flags.bas9 && btus==20){Flags.bir9=1;Flags.bas9=0;}
if(btus==9)Flags.bas9=1;
if(Flags.bas10 && btus==20){Flags.bir10=1;Flags.bas10=0;}
if(btus==10)Flags.bas10=1;
if(Flags.bas11 && btus==20){Flags.bir11=1;Flags.bas11=0;}
if(btus==11)Flags.bas11=1;
if(Flags.bas12 && btus==20){Flags.bir12=1;Flags.bas12=0;}
if(btus==12)Flags.bas12=1;
if(Flags.bas13 && btus==20){Flags.bir13=1;Flags.bas13=0;}
if(btus==13)Flags.bas13=1;
if(Flags.bas14 && btus==20){Flags.bir14=1;Flags.bas14=0;}

if(btus==14)Flags.bas14=1;

if(Flags.bas15&& btus==20){Flags.bir15=1;Flags.bas15=0;}

if(btus==15)Flags.bas15=1;
}

void eeprom_yaz(unsigned char adres, unsigned char data)


{
EEADR = adres;
EEDATA = data;
WREN = 1;
EECON2 = 0x55;
EECON2 = 0xAA;
WR = 1;
while(WR);
WREN = 0;
}

unsigned char eeprom_oku(unsigned char adres)


{
EEADR = adres;
RD = 1;
return(EEDATA);
}

void Timer1_initialize(void){
INTCONbits.GIE = 1; // ENABLE interrupts
INTCONbits.PEIE = 1; // ENable peripheral interrupts.
PIR1bits.ADIF = 0;
PIE1bits.ADIE = 1;//ADC interrupt?n?n aktif edilmesi
PIE1bits.TMR1IE=1;
PIR1bits.TMR1IF=0;
T1CON=0b00000000;
TMR1 = 53036;
T1CONbits.TMR1ON=1;
}

void delay(unsigned int cnt)


{
while(cnt--);
}

You might also like