the_maniac
Üye
- Katılım
- 25 Nis 2009
- Mesajlar
- 48
- Puanları
- 1
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;
}
Verdiğin kodlar microC pro v1.65 de derlenmedi , bir çok hata var.
LCD initten başlayıp devam ediyorlar.Muhtemelen lcd dosyalarında değişikliğin var ve bunları bilmiyorum.
MicroC nin inceliklerini bilmiyorum.
Bir şeyler yapmışsın ve sonuç almak için gayret gösteriyorsun.
Elimden gelse yardım etmek istiyorum , yanlış anlama ama , biri senden yardım istese , proteus dosyası varken sadece resmi gönderse bu karışık devre için vakit harcarmıydın ?
Edit : microC yazılımının orijinal sitesinde aradınmı çare.
mikroElektronika :: View Forum - mikroC General
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?