void ayarlar();
void port_ayari();
void tus_kontrol(int []);
void LCD_yaz(int*,int);
int veri_dondur(int ,int [],int);//her tuş takımına karşılık gelen 8 bitlik veriyi döndurur
void veri_gonder(int [][],int);//çıkış portuna veriyi atar
int sayac_kontrol(int,int [],int);//mex veri mikt sınırına ulaşılmış mı kontrol eder
void veri_sifirla(int []);//veri dizisini sıfırlar
int veri_uret(int veri_karsila[],int dizi_karsila[],int z);
void main()
{
int i;
int z=0,sayac=0;
int tus,dizi[8]={1,1,1,1,1,1,1,1},veri[264];
delay_ms(1000);
ayarlar();
veri_sifirla(veri);
PORTA.F3=1;
do
{
anadongu:
tus_kontrol(veri);
kontrol1:
if(PORTD.F0==0)//basılmamamıştır.
{
goto kontrol1;
}
else if(PORTD.F0==1) //basılmıştır.
{
ayarlar();
veri_sifirla(veri);// burayı yeni ekledim.
goto anadongu;
}
delay_ms(300);
}while(1);
}
void ayarlar()
{
TRISB=0x00;
//PORTB=0x00;
TRISA=0x00;
PORTA=0x00;
////////////
TRISC=0x0F;
//TRISC.F0=1;//R0-3: İNPUT, R4-7 OUTPUT
// TRISC.F1=1;
// TRISC.F2=1;
// TRISC.F3=1;
// TRISC.F4=0;//F4 ve devamı satır.
// TRISC.F5=0;
// TRISC.F6=0;
// TRISC.F7=0;
////////////
PORTC=0xF0;
// PORTC.F7=1;//satırları Vcc'ye çekiyoruz.
// PORTC.F6=1;
// PORTC.F5=1;
// PORTC.F4=1;
// PORTC.F3=0;//sutunlara da ilk değer olarak GND atıyoruz.
// PORTC.F2=0;
// PORTC.F1=0;
// PORTC.F0=0; //burası doğru çalışıyor.
TRISD=0x01;
PORTD=0x00;
PORTE=0;
TRISE=0x05;
Lcd_Init(&PORTB);
Lcd_Cmd(Lcd_CLEAR);
Delay_1sec();
Lcd_Cmd(LCD_CURSOR_OFF);
Lcd_Out(1, 1, "Mesajinizi");
Lcd_Out(2, 1, "Giriniz");
delay_ms(2000);
Lcd_Cmd(Lcd_CLEAR);
}
void tus_kontrol(int veri[])
{
int a=0,tus=100,sayac=0,J=1,x=1,dizi[8]={1,1,1,1,1,1,1,1},i=0,z=0,b;
while(x==1)
{
//PORTC.F7=1;//satırları Vcc'ye çekiyoruz.
// PORTC.F6=1;
// PORTC.F5=1;
// PORTC.F4=1;
PORTC.F3=0;//sutunlara da ilk değer olarak GND atıyoruz.
PORTC.F2=0;
PORTC.F1=0;
PORTC.F0=0; //burası doğru çalışıyor
if(PORTC.F0==1)//1,4,7 veya E'dır.
{
delay_ms(20);
PORTC.F7=1;
PORTC.F6=0;
PORTC.F5=0;
PORTC.F4=0;
if(PORTC.F0==1)
{
int i;
tus=1;
LCD_yaz(&J,tus);
sayac=sayac+1;
z=veri_dondur(tus,veri,z);
port_ayari();
}
else
{
PORTC.F7=0;
PORTC.F6=1;
PORTC.F5=0;
PORTC.F4=0;
if(PORTC.F0==1)
{
int i;//,
tus=4;
LCD_yaz(&J,tus);
sayac=sayac+1;
z=veri_dondur(tus,veri,z);
port_ayari();
}
else
{
PORTC.F7=0;
PORTC.F6=0;
PORTC.F5=1;
PORTC.F4=0;
if(PORTC.F0==1)
{
int i;//,
tus=7;
LCD_yaz(&J,tus);
sayac=sayac+1;
z=veri_dondur(tus,veri,z);
port_ayari();
}
else
{
PORTC.F7=0;
PORTC.F6=0;
PORTC.F5=0;
PORTC.F4=1;
if(PORTC.F0==1)
{
int i;//,
tus='E';
LCD_yaz(&J,tus);
sayac=sayac+1;
z=veri_dondur(tus,veri,z);
port_ayari();
}
}
}
}
}
else if(PORTC.F1==1)//2,5,8 veya 0'dir.
{
delay_ms(20);
PORTC.F7=1;
PORTC.F6=0;
PORTC.F5=0;
PORTC.F4=0;
if(PORTC.F1==1)
{
int i;//,
tus=2;
LCD_yaz(&J,tus);
sayac=sayac+1;
z=veri_dondur(tus,veri,z);
port_ayari();
}
else
{
PORTC.F7=0;
PORTC.F6=1;
PORTC.F5=0;
PORTC.F4=0;
if(PORTC.F1==1)
{
int i;//,dizi5[8]={1,0,1,1,0,1,0,1};
tus=5;
LCD_yaz(&J,tus);
sayac=sayac+1;
z=veri_dondur(tus,veri,z);
port_ayari();
}
else
{
PORTC.F7=0;
PORTC.F6=0;
PORTC.F5=1;
PORTC.F4=0;
if(PORTC.F1==1)
{
int i;//,dizi8[8]={1,0,1,1,1,0,0,0};
tus=8;
LCD_yaz(&J,tus);
sayac=sayac+1;
z=veri_dondur(tus,veri,z);
port_ayari();
}
else
{
PORTC.F7=0;
PORTC.F6=0;
PORTC.F5=0;
PORTC.F4=1;
if(PORTC.F1==1)
{
int i;//,
tus=0;
LCD_yaz(&J,tus);
sayac=sayac+1;
z=veri_dondur(tus,veri,z);
port_ayari();
}
}
}
}
}
else if(PORTC.F2==1)//3,6,9 veya F'dir.
{
delay_ms(20);
PORTC.F7=1;
PORTC.F6=0;
PORTC.F5=0;
PORTC.F4=0;
if(PORTC.F2==1)
{
int i;//,dizi3[8]={1,0,1,1,0,0,1,1};
tus=3;
LCD_yaz(&J,tus);
sayac=sayac+1;
z=veri_dondur(tus,veri,z);
port_ayari();
}
else
{
PORTC.F7=0;
PORTC.F6=1;
PORTC.F5=0;
PORTC.F4=0;
if(PORTC.F2==1)
{
int i;//,dizi6[8]={1,0,1,1,0,1,1,0};
tus=6;
LCD_yaz(&J,tus);
sayac=sayac+1;
z=veri_dondur(tus,veri,z);
port_ayari();
}
else
{
PORTC.F7=0;
PORTC.F6=0;
PORTC.F5=1;
PORTC.F4=0;
if(PORTC.F2==1)
{
int i;//,dizi9[8]={1,0,1,1,1,0,0,1};
tus=9;
LCD_yaz(&J,tus);
sayac=sayac+1;
z=veri_dondur(tus,veri,z);
port_ayari();
}
else
{
PORTC.F7=0;
PORTC.F6=0;
PORTC.F5=0;
PORTC.F4=1;
if(PORTC.F2==1)
{
int i;//,diziF[8]={1,1,0,0,0,1,1,0};
tus='F';
LCD_yaz(&J,tus);
sayac=sayac+1;
z=veri_dondur(tus,veri,z);
port_ayari();
}
}
}
}
}
else if(PORTC.F3==1)//A,B,C veya D'dir.
{
delay_ms(20);
PORTC.F7=1;
PORTC.F6=0;
PORTC.F5=0;
PORTC.F4=0;
if(PORTC.F3==1)
{
int i;//,
tus='A';
LCD_yaz(&J,tus);
sayac=sayac+1;
z=veri_dondur(tus,veri,z);
port_ayari();
}
else
{
PORTC.F7=0;
PORTC.F6=1;
PORTC.F5=0;
PORTC.F4=0;
if(PORTC.F3==1)
{
int i;//,
tus='B';
LCD_yaz(&J,tus);
sayac=sayac+1;
z=veri_dondur(tus,veri,z);
port_ayari();
}
else
{
PORTC.F7=0;
PORTC.F6=0;
PORTC.F5=1;
PORTC.F4=0;
if(PORTC.F3==1)
{
int i;//
tus='C';
LCD_yaz(&J,tus);
sayac=sayac+1;
z=veri_dondur(tus,veri,z);
port_ayari();
}
else
{
PORTC.F7=0;
PORTC.F6=0;
PORTC.F5=0;
PORTC.F4=1;
if(PORTC.F3==1)
{
int i;//
tus='D';
LCD_yaz(&J,tus);
sayac=sayac+1;
z=veri_dondur(tus,veri,z);
port_ayari();
}
}
}
}
} a=sayac-1;
if(sayac==32)
{
x=0;
}
else if(PORTD.F0==1)
{
//PORTA.F5=1;
x=0;
}
delay_ms(300);
}
//PORTA.F3=1;
// delay_ms(300);
a++;
b=z;
for(z;z<b+8;z++)
{
veri[z]=1;
i++;
}
//veri_dondur(tus,veri,z);
veri_gonder(veri,z);
}
void LCD_yaz(int *J,int karakter)
{
int K,T;
if(*J>16)
{
K=2;
if(*J==32){ T=16; }
else{
T=*J%16;
}
}
else T=*J;
switch(karakter)
{
case 0: Lcd_Chr(K, T, '0'); (*J)++; break;
case 1: Lcd_Chr(K, T, '1'); (*J)++; break;
case 2: Lcd_Chr(K, T, '2'); (*J)++; break;
case 3: Lcd_Chr(K, T, '3'); (*J)++; break;
case 4: Lcd_Chr(K, T, '4'); (*J)++; break;
case 5: Lcd_Chr(K, T, '5'); (*J)++; break;
case 6: Lcd_Chr(K, T, '6'); (*J)++; break;
case 7: Lcd_Chr(K, T, '7'); (*J)++; break;
case 8: Lcd_Chr(K, T, '8'); (*J)++; break;
case 9: Lcd_Chr(K, T, '9'); (*J)++; break;
case 'A': Lcd_Chr(K, T, 'A'); (*J)++; break;
case 'B': Lcd_Chr(K, T, 'B'); (*J)++; break;
case 'C': Lcd_Chr(K, T, 'C'); (*J)++; break;
case 'D': Lcd_Chr(K, T, 'D'); (*J)++; break;
case 'E': Lcd_Chr(K, T, 'E'); (*J)++; break;
case 'F': Lcd_Chr(K, T, 'F'); (*J)++; break;
}
}
void port_ayari()
{
PORTC.F7=1;//satırları Vcc'ye çekiyoruz.
PORTC.F6=1;
PORTC.F5=1;
PORTC.F4=1;
PORTC.F3=0;//sutunlara da ilk değer olarak GND atıyoruz.
PORTC.F2=0;
PORTC.F1=0;
PORTC.F0=0; //burası doğru çalışıyor
}
void veri_sifirla(int veri[])
{
int i=0;
do
{
veri=0;
i=i+1;
}while(i<264);
}
void veri_gonder(int dizi_gonderilecek[],int indis)//tmm yazılacak 1.boyutun gemesi lazım
{ //veri sayac
int b,i,m=0,counter,z;
z=indis;
//counter=indis;
// for(i=0;i<8;i++)
// {
// dizi_gonderilecek[counter]=1;
// }
//for(m=0;m<=indis;m++)//1.boyutu değiştirir.
// {
//z=8*indis-1;
//b=z;
for(i=0;i<z;i++)
{
PORTA=dizi_gonderilecek+4; //D uzerinden çalışmadı data yollamıo
//portd.F1=1; //geri Aportuna dönS
delay_ms(1000);
porta=0;
//PORTD=0;
delay_ms(50); //delayleri ayarlaman gerekiyor !!!!!!!!!!!!!!!!!!
if(i%8==7)
{
delay_ms(1000);
}
} //gönderirken her 8 bitten sonra kaymamasına dikkat et !!!!!!
//delay_ms(1000);
// }
}
//verileri gönderdikten sonra Lcd'yi clear etmek için butona basılmış mı
//kontrol edilmesi gerek !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
int veri_dondur(int tus,int veri[],int z)
{
int dizi0[8]={1,0,1,1,0,0,0,0};
int dizi1[8]={1,0,1,1,0,0,0,1};
int dizi2[8]={1,0,1,1,0,0,1,0};
int dizi3[8]={1,0,1,1,0,0,1,1};
int dizi4[8]={1,0,1,1,0,1,0,0};
int dizi5[8]={1,0,1,1,0,1,0,1};
int dizi6[8]={1,0,1,1,0,1,1,0};
int dizi7[8]={1,0,1,1,0,1,1,1};
int dizi8[8]={1,0,1,1,1,0,0,0};
int dizi9[8]={1,0,1,1,1,0,0,1};
int diziA[8]={1,1,0,0,0,0,0,1};
int diziB[8]={1,1,0,0,0,0,1,0};
int diziC[8]={1,1,0,0,0,0,1,1};
int diziD[8]={1,1,0,0,0,1,0,0};
int diziE[8]={1,1,0,0,0,1,0,1};
int diziF[8]={1,1,0,0,0,1,1,0};
// int i=0,b;
// b=z;
// for(z;z<b+8;z++)
// {
// veri_karsila[z]=dizi_karsila;
// i++;
// }
// return z;
switch(tus)
{
case 0: z=veri_uret(veri,dizi0,z); break;
case 1: z=veri_uret(veri,dizi1,z); break;
case 2: z=veri_uret(veri,dizi2,z); break;
case 3: z=veri_uret(veri,dizi3,z); break;
case 4: z=veri_uret(veri,dizi4,z); break;
case 5: z=veri_uret(veri,dizi5,z); break;
case 6: z=veri_uret(veri,dizi6,z); break;
case 7: z=veri_uret(veri,dizi7,z); break;
case 8: z=veri_uret(veri,dizi8,z); break;
case 9: z=veri_uret(veri,dizi9,z); break;
case 'A': z=veri_uret(veri,diziA,z); break;
case 'B': z=veri_uret(veri,diziB,z); break;
case 'C': z=veri_uret(veri,diziC,z); break;
case 'D': z=veri_uret(veri,diziD,z); break;
case 'E': z=veri_uret(veri,diziE,z); break;
case 'F': z=veri_uret(veri,diziF,z); break;
}
return z;
}
int veri_uret(int veri_karsila[],int dizi_karsila[],int z)
{
int i=0,b;
b=z;
for(z;z<b+8;z++)
{
veri_karsila[z]=dizi_karsila;
i++;
}
return z;
}