keypad ile lcd e yazi yazmak

Başlatan selvi, 04 Ağustos 2013, 09:53:04

selvi

  keypad ile girdigim rakamlara gore ve programda belirledim harf karsiliklarini alip lcd ekraninda yazi yazmak istiyorum.8 tane tusa bastiktan sonra 12 tus bilgisi ile lcd e yazi yazmaya calistim.ama hep ilk tus degerini yazdiriyor.
  ornegin;keypad da 123 tuslarina basip daha sonra 12 tusuna basildiginda ekranda "abc" yazisini okumak istiyorum.ya da  sirasiyla 12345678 tuslarina basildiginda ekranda "abcdefgh" yazisini gormek gibi.yani en fazla 8 karakter okumak istiyorum.diyelim 4 tusa basildiginda ekranda 4 karakter gozukmesini istiyorum.
  programda  harflerin tus karsiliklarini  belirledim.eeprom kulandim.ama bir turlu istedigim bilgiyi giremedim.progran asagidaki gibidir.

/******************************************************
      PIC16F877 ile Tuþ Takýmý Uygulamasý-1
      PIC PROG/DEKA     : Port B jumper'ý LED konumunda olmalý
*******************************************************/
#include <16f877.h>     // Kullanýlacak denetleyicinin baþlýk dosyasý tanýtýlýyor.

// Denetleyici konfigürasyon ayarlarý
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000) // Gecikme fonksiyonu için kullanýlacak osilatör frekansý belirtiliyor.

#use fast_io(b) //Port yönlendirme komutlarý B portu için geçerli
#use fast_io(d) //Port yönlendirme komutlarý C portu için geçerli

#define use_portb_lcd TRUE

#include <lcd.c>

//#byte   portb=0x06   // B portu "tus" ismine eþitleniyor.

#define sut1   pin_d0 // sut1 ifadesi pin_d0 ifadesine eþitleniyor
#define sut2   pin_d1 // sut2 ifadesi pin_d1 ifadesine eþitleniyor
#define sut3   pin_d2 // sut3 ifadesi pin_d2 ifadesine eþitleniyor
#define sut4   pin_d3 // sut3 ifadesi pin_d2 ifadesine eþitleniyor

#define sat1   pin_d4 // sat1 ifadesi pin_d4 ifadesine eþitleniyor
#define sat2   pin_d5 // sat2 ifadesi pin_d5 ifadesine eþitleniyor
#define sat3   pin_d6 // sat3 ifadesi pin_d6 ifadesine eþitleniyor
#define sat4   pin_d7 // sat4 ifadesi pin_d7 ifadesine eþitleniyor

char tus=0,key=0,harf,sayi=0,bilgi; // karakter tipinde deðiþken tanýmlanýyor
char x1=0,x2=0,x3=0,x4=0,x5=0,x6=0,x7=0,x8=0;
//*********** Keypad Tarama Fonksiyonu *********
char keypad_oku() // Fonksiyon ismi
{
   output_d(0x00); // D portu çýkýþý sýfýrlanýyor

   output_high(sat1); // 1. satýr lojik-1 yapýlýyor
   if (input(sut1))   // 1. sütun okunuyor
      { delay_ms(20); tus=1; }
   if (input(sut2))   // 2. sütun okunuyor
      { delay_ms(20); tus=2; }
   if (input(sut3))   // 3. sütun okunuyor
      { delay_ms(20); tus=3; }
   if (input(sut4))   // 4. sütun okunuyor
      { delay_ms(20); tus=0xA; }
   output_low(sat1); // 1. satýr lojik-0 yapýlýyor

   output_high(sat2); // 2. satýr lojik-1 yapýlýyor
   if (input(sut1))   // 1. sütun okunuyor
      { delay_ms(20); tus=4; }
   if (input(sut2))   // 2. sütun okunuyor
      { delay_ms(20); tus=5; }
   if (input(sut3))   // 3. sütun okunuyor
      { delay_ms(20); tus=6; }
   if (input(sut4))   // 4. sütun okunuyor
      { delay_ms(20); tus=0xB; }
   output_low(sat2); // 2. satýr lojik-0 yapýlýyor

   output_high(sat3); // 3. satýr lojik-1 yapýlýyor
   if (input(sut1))   // 1. sütun okunuyor
      { delay_ms(20); tus=7; }
   if (input(sut2))   // 2. sütun okunuyor
      { delay_ms(20); tus=8; }
   if (input(sut3))   // 3. sütun okunuyor
      { delay_ms(20); tus=9; }
   if (input(sut4))   // 4. sütun okunuyor
      {delay_ms(20); tus=0x0C; }
   output_low(sat3); // 3. satýr lojik-0 yapýlýyor

   output_high(sat4); // 3. satýr lojik-1 yapýlýyor
   if (input(sut1))   // 1. sütun okunuyor
      { delay_ms(20); tus=0xE; }
   if (input(sut2))   // 2. sütun okunuyor
      { delay_ms(20); tus=0; }
   if (input(sut3))   // 3. sütun okunuyor
      { delay_ms(20); tus=0xF; }
   if (input(sut4))   // 4. sütun okunuyor
      {delay_ms(20); tus=0xD; }
   output_low(sat4); // 3. satýr lojik-0 yapýlýyor

   return tus; // Fonksiyon "tus" deðeri ile geri döner
}

char port_goster()
{
    if(tus==1)   harf='a';
    if(tus==2)   harf='b';
    if(tus==3)   harf='c';
    if(tus==4)   harf='d';
    if(tus==5)   harf='e';
    if(tus==6)   harf='f';
    if(tus==7)   harf='g';
    if(tus==8)   harf='h';
    if(tus==9)   harf='i';
    if(tus==10)  harf='j';
    if(tus==11)  harf='k';
    if(tus==12)  harf='l';
    if(tus==13)  harf='m';
    if(tus==14)  harf='n';
    if(tus==15)  harf='o';
    if(tus==16)  harf='p';
    if(tus==17)  harf='r';
    if(tus==18)  harf='s';
    if(tus==19)  harf='t';
    if(tus==20)  harf='u';
    if(tus==21)  harf='v';
    if(tus==22)  harf='y';
    if(tus==23)  harf='z';
       
    return harf;  // Fonksiyon "harf" deðeri ile geri döner
}

/********* ANA PROGRAM FONKSÝYONU********/

void main ( )
{
   setup_psp(PSP_DISABLED);        // PSP birimi devre dýþý
   setup_timer_1(T1_DISABLED);     // T1 zamanlayýcýsý devre dýþý
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayýcýsý devre dýþý
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriþ yok
   setup_adc(ADC_OFF);             // ADC birimi devre dýþý

   set_tris_b(0x00);   // B portu komple çýkýþ
   set_tris_d(0x0F);   // Yüksek deðerlikli 4 bit çýkýþ, düþük deðerlikli 4 bit giriþ

   output_b(0x00); // Ýlk anda B portu çýkýþý sýfýrlanýyor
   
   lcd_init();

   while(1)  // Sonsuz döngü
   {
        key=keypad_oku();  // Basýlan tuþ deðerini B portuna aktar
        bilgi=port_goster();
       if(key!='\0')
       {
         // bilgi=port_goster();
          
          if(keypad_oku()==12) 
          {
            printf(lcd_putc,"\f%c%c%c%c%c%c%c%c",read_eeprom(0),read_eeprom(1),read_eeprom(2),read_eeprom(3),
            read_eeprom(4),read_eeprom(5),read_eeprom(6),read_eeprom(7));
          }
          
          sayi++;
          if(sayi==1)
          {
          write_eeprom(0,bilgi);
          }
          if(sayi==2)
          {
          write_eeprom(1,bilgi)
          }
          if(sayi==3) 
          {
          write_eeprom(2,bilgi);
          }
          if(sayi==4)
          {
          write_eeprom(3,bilgi);
          }
          if(sayi==5)
          {
          write_eeprom(4,bilgi);
          }
          if(sayi==6)
          {
          write_eeprom(5,bilgi);
          }
          if(sayi==7)
          {
          write_eeprom(6,bilgi);
          }
          if(sayi==8) 
          {
          write_eeprom(7,bilgi);
          }
          delay_ms(10);
          
       }
       
   }
}

Yaşam anlamlandırıldıkça kutsaldır....

ziyaretci

#1
   Sen ilk tuşa bastığında "key" değeri "0"  dan farklı bir değer oluyor. Burası tamam ilk karakter cepte. Ama bir sonraki döngülere "key " değerini değiştirmek için yetişemeyeceğinden, senin bir sonraki tuşa basma süre aralığında döngü birden fazla dönecek ve ilk bastığın bilgi "say++" komutu ile sürekli tekrarlanacak diğer adreslere. Senin kontrol edebilmen için ise her tuş değeri yazıldıktan sonra yazma işleminin bulunduğu döngü yolunu kapatmak olacaktır. Diğer bir komuta kadar.

Aşağıdaki düzeltmeyi koduna eklersen sorunun düzelmesi lazım.

if(key!='\0'){
if(keypad_oku()==12){sayi=0; ..../*komutlar*/......}..../*komutlar*/.......  key=0; tus=0;if(sayi==255)sayi=0; 

}


255. değerden sonra tekrar bastıkların  1. adresten itibaren  yazmaya başlayacak. Ama LCD ye basma değeri geldiğinde "sayi" değişkenini sıfırlayarak daha verimli sonuç alabilirsin.

Ve girişleri okur iken if(input(sut1)){while(input(sut1)); tus=1;} şeklinde bir yapı kullanman gerekir. Nedeni ise sen  1 nolu tuşa basılı tuttma süre zarfında döngü defalarca terkarlanabilir.
Bu yaptığımızda "sut1"  girişi 1 olduğu süre zarfıda while döngüsü dönecek, tuştan elimizi çektiğimizde döngü false(sıfır) döneceğinden döngü bitecek ve bir sonraki komutu işleyecek. 20 ms lik gecikmeleride kullanmana gerek kalmaz.

Son değişiklikler:
/******************************************************
      PIC16F877 ile Tuþ Takýmý Uygulamasý-1
      PIC PROG/DEKA     : Port B jumper'ý LED konumunda olmalý
*******************************************************/
#include <16f877.h>     // Kullanýlacak denetleyicinin baþlýk dosyasý tanýtýlýyor.

// Denetleyici konfigürasyon ayarlarý
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000) // Gecikme fonksiyonu için kullanýlacak osilatör frekansý belirtiliyor.

#use fast_io(b) //Port yönlendirme komutlarý B portu için geçerli
#use fast_io(d) //Port yönlendirme komutlarý C portu için geçerli

#define use_portb_lcd TRUE

#include <lcd.c>

//#byte   portb=0x06   // B portu "tus" ismine eþitleniyor.

#define sut1   pin_d0 // sut1 ifadesi pin_d0 ifadesine eþitleniyor
#define sut2   pin_d1 // sut2 ifadesi pin_d1 ifadesine eþitleniyor
#define sut3   pin_d2 // sut3 ifadesi pin_d2 ifadesine eþitleniyor
#define sut4   pin_d3 // sut3 ifadesi pin_d2 ifadesine eþitleniyor

#define sat1   pin_d4 // sat1 ifadesi pin_d4 ifadesine eþitleniyor
#define sat2   pin_d5 // sat2 ifadesi pin_d5 ifadesine eþitleniyor
#define sat3   pin_d6 // sat3 ifadesi pin_d6 ifadesine eþitleniyor
#define sat4   pin_d7 // sat4 ifadesi pin_d7 ifadesine eþitleniyor

char tus=0,key=0,harf,sayi=0,bilgi; // karakter tipinde deðiþken tanýmlanýyor
char x1=0,x2=0,x3=0,x4=0,x5=0,x6=0,x7=0,x8=0;
//*********** Keypad Tarama Fonksiyonu *********
char keypad_oku() // Fonksiyon ismi
{
   output_d(0x00); // D portu çýkýþý sýfýrlanýyor

   output_high(sat1); // 1. satýr lojik-1 yapýlýyor
   if (input(sut1))   // 1. sütun okunuyor
      { while(input(sut1)); delay_ms(20); tus=1; }
   if (input(sut2))   // 2. sütun okunuyor
      { while(input(sut2)); delay_ms(20); tus=2; }
   if (input(sut3))   // 3. sütun okunuyor
      {while(input(sut3)); delay_ms(20); tus=3; }
   if (input(sut4))   // 4. sütun okunuyor
      {while(input(sut4)); delay_ms(20); tus=0xA; }
   output_low(sat1); // 1. satýr lojik-0 yapýlýyor

   output_high(sat2); // 2. satýr lojik-1 yapýlýyor
   if ( input(sut1))   // 1. sütun okunuyor
      {while(input(sut1)); delay_ms(20); tus=4; }
   if (input(sut2))   // 2. sütun okunuyor
      {while(input(sut2)); delay_ms(20); tus=5; }
   if (input(sut3))   // 3. sütun okunuyor
      {while(input(sut3)); delay_ms(20); tus=6; }
   if (input(sut4))   // 4. sütun okunuyor
      {while(input(sut4)); delay_ms(20); tus=0xB; }
   output_low(sat2); // 2. satýr lojik-0 yapýlýyor

   output_high(sat3); // 3. satýr lojik-1 yapýlýyor
   if (input(sut1))   // 1. sütun okunuyor
      {while(input(sut1)); delay_ms(20); tus=7; }
   if (input(sut2))   // 2. sütun okunuyor
      {while(input(sut2)); delay_ms(20); tus=8; }
   if (input(sut3))   // 3. sütun okunuyor
      {while(input(sut3)); delay_ms(20); tus=9; }
   if (input(sut4))   // 4. sütun okunuyor
      {while(input(sut4)); delay_ms(20); tus=0x0C; }
   output_low(sat3); // 3. satýr lojik-0 yapýlýyor

   output_high(sat4); // 3. satýr lojik-1 yapýlýyor
   if (input(sut1))   // 1. sütun okunuyor
      {while(input(sut1)); delay_ms(20); tus=0xE; }
   if (input(sut2))   // 2. sütun okunuyor
      { while(input(sut2));delay_ms(20); tus=0; }
   if (input(sut3))   // 3. sütun okunuyor
      {while(input(sut3)); delay_ms(20); tus=0xF; }
   if (input(sut4))   // 4. sütun okunuyor
      {while(input(sut4)); delay_ms(20); tus=0xD; }
   output_low(sat4); // 3. satýr lojik-0 yapýlýyor

   return tus; // Fonksiyon "tus" deðeri ile geri döner
}

char port_goster()
{
    if(tus==1)   harf='a';
    if(tus==2)   harf='b';
    if(tus==3)   harf='c';
    if(tus==4)   harf='d';
    if(tus==5)   harf='e';
    if(tus==6)   harf='f';
    if(tus==7)   harf='g';
    if(tus==8)   harf='h';
    if(tus==9)   harf='i';
    if(tus==10)  harf='j';
    if(tus==11)  harf='k';
    if(tus==12)  harf='l';
    if(tus==13)  harf='m';
    if(tus==14)  harf='n';
    if(tus==15)  harf='o';
    if(tus==16)  harf='p';
    if(tus==17)  harf='r';
    if(tus==18)  harf='s';
    if(tus==19)  harf='t';
    if(tus==20)  harf='u';
    if(tus==21)  harf='v';
    if(tus==22)  harf='y';
    if(tus==23)  harf='z';
       
    return harf;  // Fonksiyon "harf" deðeri ile geri döner
}

/********* ANA PROGRAM FONKSÝYONU********/

void main ( )
{
   setup_psp(PSP_DISABLED);        // PSP birimi devre dýþý
   setup_timer_1(T1_DISABLED);     // T1 zamanlayýcýsý devre dýþý
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayýcýsý devre dýþý
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriþ yok
   setup_adc(ADC_OFF);             // ADC birimi devre dýþý

   set_tris_b(0x00);   // B portu komple çýkýþ
   set_tris_d(0x0F);   // Yüksek deðerlikli 4 bit çýkýþ, düþük deðerlikli 4 bit giriþ

   output_b(0x00); // Ýlk anda B portu çýkýþý sýfýrlanýyor
   
   lcd_init();

   while(1)  // Sonsuz döngü
   {
        key=keypad_oku();  // Basýlan tuþ deðerini B portuna aktar
        bilgi=port_goster();
       if(key!='\0')
       {
         // bilgi=port_goster();
          
          if(keypad_oku()==12) 
          {sayi=0;
            printf(lcd_putc,"\f%c%c%c%c%c%c%c%c",read_eeprom(0),read_eeprom(1),read_eeprom(2),read_eeprom(3),
            read_eeprom(4),read_eeprom(5),read_eeprom(6),read_eeprom(7));
          }
          
       write_eeprom(sayi,bilgi);  // yazma işlemi için bu yeterli ve daha az yer kaplar.
      sayi++; 
    
       key=0; tus=0;if(sayi==255)sayi=0; 
          
       }
       
   }
}

    SMF 2.0.4 | SMF © 2013, Simple Machines
    Destek: Elektronik


İyi çalışmalar diliyorum..

selvi

 duzenlediginiz sekilde calisiyor.ben hep baska yerde sorunu ariyordum.o kadar degisiklik yapmama ragmen gideremiyordum.tus takimi kismini kitaptan hazir aldigim icin eklenen programla yaratacagi sorunlari fazla hesaba katamadim.
  iki basamakli tuslari ayri ayri tus olarak algilamamasi icin bir degisklik gerekiyor.ornegin z karakterini lcd ekraninda yazilmasi icin 23 tus bilgisini yollamak gerekiyor.mevcut program 2 ve 3 olarak farkli olarak algilayip ekranda bc seklinde bir karakter olarak yansitacak.birli ve ikili basamaklari birbirinden ayristirmak icin programda nasil degisiklik olmali.
Yaşam anlamlandırıldıkça kutsaldır....

ziyaretci

#3
Alıntı yapılan: selvi - 04 Ağustos 2013, 16:50:35
duzenlediginiz sekilde calisiyor.ben hep baska yerde sorunu ariyordum.o kadar degisiklik yapmama ragmen gideremiyordum.tus takimi kismini kitaptan hazir aldigim icin eklenen programla yaratacagi sorunlari fazla hesaba katamadim.
  iki basamakli tuslari ayri ayri tus olarak algilamamasi icin bir degisklik gerekiyor.ornegin z karakterini lcd ekraninda yazilmasi icin 23 tus bilgisini yollamak gerekiyor.mevcut program 2 ve 3 olarak farkli olarak algilayip ekranda bc seklinde bir karakter olarak yansitacak.birli ve ikili basamaklari birbirinden ayristirmak icin programda nasil degisiklik olmali.

Dizileri kullanman gerekli, örneğin;


/******************************************************
      PIC16F877 ile Tuþ Takýmý Uygulamasý-1
      PIC PROG/DEKA     : Port B jumper'ý LED konumunda olmalý
*******************************************************/
#include <16f877.h>     // Kullanýlacak denetleyicinin baþlýk dosyasý tanýtýlýyor.

// Denetleyici konfigürasyon ayarlarý
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000) // Gecikme fonksiyonu için kullanýlacak osilatör frekansý belirtiliyor.

#use fast_io(b) //Port yönlendirme komutlarý B portu için geçerli
#use fast_io(d) //Port yönlendirme komutlarý C portu için geçerli

#define use_portb_lcd TRUE

#include <lcd.c>

//#byte   portb=0x06   // B portu "tus" ismine eþitleniyor.

#define sut1   pin_d0 // sut1 ifadesi pin_d0 ifadesine eþitleniyor
#define sut2   pin_d1 // sut2 ifadesi pin_d1 ifadesine eþitleniyor
#define sut3   pin_d2 // sut3 ifadesi pin_d2 ifadesine eþitleniyor
#define sut4   pin_d3 // sut3 ifadesi pin_d2 ifadesine eþitleniyor

#define sat1   pin_d4 // sat1 ifadesi pin_d4 ifadesine eþitleniyor
#define sat2   pin_d5 // sat2 ifadesi pin_d5 ifadesine eþitleniyor
#define sat3   pin_d6 // sat3 ifadesi pin_d6 ifadesine eþitleniyor
#define sat4   pin_d7 // sat4 ifadesi pin_d7 ifadesine eþitleniyor

char tus=0,key=0,harf,sayi=0,bilgi; // karakter tipinde deðiþken tanýmlanýyor
char x1=0,x2=0,x3=0,x4=0,x5=0,x6=0,x7=0,x8=0;
int dizi[10],dizi_adres=0,sil;
//*********** Keypad Tarama Fonksiyonu *********
char keypad_oku() // Fonksiyon ismi
{
   output_d(0x00); // D portu çýkýþý sýfýrlanýyor

   output_high(sat1); // 1. satýr lojik-1 yapýlýyor
   if (input(sut1))   // 1. sütun okunuyor
      { while(input(sut1)); delay_ms(20); tus=1; }
   if (input(sut2))   // 2. sütun okunuyor
      { while(input(sut2)); delay_ms(20); tus=2; }
   if (input(sut3))   // 3. sütun okunuyor
      {while(input(sut3)); delay_ms(20); tus=3; }
   if (input(sut4))   // 4. sütun okunuyor
      {while(input(sut4)); delay_ms(20); tus=0xA; }
   output_low(sat1); // 1. satýr lojik-0 yapýlýyor

   output_high(sat2); // 2. satýr lojik-1 yapýlýyor
   if ( input(sut1))   // 1. sütun okunuyor
      {while(input(sut1)); delay_ms(20); tus=4; }
   if (input(sut2))   // 2. sütun okunuyor
      {while(input(sut2)); delay_ms(20); tus=5; }
   if (input(sut3))   // 3. sütun okunuyor
      {while(input(sut3)); delay_ms(20); tus=6; }
   if (input(sut4))   // 4. sütun okunuyor
      {while(input(sut4)); delay_ms(20); tus=0xB; }
   output_low(sat2); // 2. satýr lojik-0 yapýlýyor

   output_high(sat3); // 3. satýr lojik-1 yapýlýyor
   if (input(sut1))   // 1. sütun okunuyor
      {while(input(sut1)); delay_ms(20); tus=7; }
   if (input(sut2))   // 2. sütun okunuyor
      {while(input(sut2)); delay_ms(20); tus=8; }
   if (input(sut3))   // 3. sütun okunuyor
      {while(input(sut3)); delay_ms(20); tus=9; }
   if (input(sut4))   // 4. sütun okunuyor
      {while(input(sut4)); delay_ms(20); tus=0x0C; }
   output_low(sat3); // 3. satýr lojik-0 yapýlýyor

   output_high(sat4); // 3. satýr lojik-1 yapýlýyor
   if (input(sut1))   // 1. sütun okunuyor
      {while(input(sut1)); delay_ms(20); tus=0xE; }
   if (input(sut2))   // 2. sütun okunuyor
      { while(input(sut2));delay_ms(20); tus=0; }
   if (input(sut3))   // 3. sütun okunuyor
      {while(input(sut3)); delay_ms(20); tus=0xF; }
   if (input(sut4))   // 4. sütun okunuyor
      {while(input(sut4)); delay_ms(20); tus=0xD; }
   output_low(sat4); // 3. satýr lojik-0 yapýlýyor

   return tus; // Fonksiyon "tus" deðeri ile geri döner
}

char port_goster()
{
    if(tus==1)   harf='a';
    if(tus==2)   harf='b';
    if(tus==3)   harf='c';
    if(tus==4)   harf='d';
    if(tus==5)   harf='e';
    if(tus==6)   harf='f';
    if(tus==7)   harf='g';
    if(tus==8)   harf='h';
    if(tus==9)   harf='i';
    if(tus==10)  harf='j';
    if(tus==11)  harf='k';
    if(tus==12)  harf='l';
    if(tus==13)  harf='m';
    if(tus==14)  harf='n';
    if(tus==15)  harf='o';
    if(tus==16)  harf='p';
    if(tus==17)  harf='r';
    if(tus==18)  harf='s';
    if(tus==19)  harf='t';
    if(tus==20)  harf='u';
    if(tus==21)  harf='v';
    if(tus==22)  harf='y';
    if(tus==23)  harf='z';
       
    return harf;  // Fonksiyon "harf" deðeri ile geri döner
}

/********* ANA PROGRAM FONKSÝYONU********/

void main ( )
{
   setup_psp(PSP_DISABLED);        // PSP birimi devre dýþý
   setup_timer_1(T1_DISABLED);     // T1 zamanlayýcýsý devre dýþý
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayýcýsý devre dýþý
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriþ yok
   setup_adc(ADC_OFF);             // ADC birimi devre dýþý

   set_tris_b(0x00);   // B portu komple çýkýþ
   set_tris_d(0x0F);   // Yüksek deðerlikli 4 bit çýkýþ, düþük deðerlikli 4 bit giriþ

   output_b(0x00); // Ýlk anda B portu çýkýþý sýfýrlanýyor
   
   lcd_init();

   while(1)  // Sonsuz döngü
   {
        key=keypad_oku();  // Basýlan tuþ deðerini B portuna aktar
        bilgi=port_goster();
       if(key!='\0')
       {
         // bilgi=port_goster();
         
          dizi[dizi_adres]=key;   // gelen her key değerini 1 byte olarak dizi adreslerine kaydedebiliriz.
         dizi_adres++;   /* her bilgi geldiğinde key değerini diziye kaydettikten sonra dizi adresini bir arttır.*/
         if(dizi_adres==10){dizi_adres=0; for(sil=0;sil<10;sil++){dizi[sil]=0;}}
 /* dizi_adres ==10 ise değişkeni sıfırla ve dizi[] yi temizle */
/*Okumak istediğimizde ise;*/
 
 if(dizi[0]==1 && dizi[1]==2){ komutlar;} /* dizinin 0. adresi "1" ve 1. adresi "2" ise komut bloğunu işle*/
 

          if(keypad_oku()==12) 
          {sayi=0;
            printf(lcd_putc,"\f%c%c%c%c%c%c%c%c",read_eeprom(0),read_eeprom(1),read_eeprom(2),read_eeprom(3),
            read_eeprom(4),read_eeprom(5),read_eeprom(6),read_eeprom(7));
          }
          
       write_eeprom(sayi,bilgi);  // yazma işlemi için bu yeterli ve daha az yer kaplar.
      sayi++; 
    
       key=0; tus=0;if(sayi==255)sayi=0; 
          
       }
       
   }
}

    SMF 2.0.4 | SMF © 2013, Simple Machines
    Destek: Elektronik


  Ek fonksiyonlar <stdlib.h> ve <string.h> ile daha rahat yapılabiliyor.
  Bir diğer rahatlığı ise aşağıdaki gibi;
int dogru_olan[7]={1,2,3,4,5,6,7}
int girilen[];
int kontrol,dogru=0;
int1 onay_tamam=0;

  if(key==12){  /*tek tuş değeri enter gibi düşünülebilir*/
   for(kontrol=0;kontrol<dizi_adres;kontrol++){
   if(dogru_olan[kontrol] && girilen[kontrol])dogru++;
    }
  if(dogru==7){ onay_tamam=1;  dogru=0; dizi_adres=0; } else{ dogru=0; dizi_adres=0; /* onay_tamam=0;*/}

}

 if(onay_tamam==1){/*komutlar;*/}

selvi


if(dizi[0]==1 && dizi[1]==2){ komutlar;} /* dizinin 0. adresi "1" ve 1. adresi "2" ise komut bloğunu işle*/
 
  bu sekilde duzenlenirse diyelim ki ekranda 'abc' karakterlerini gormek icin 1,2,3 tuslarina basildiginda yeterli olur mu.eger yanlis anlamadiysam her karakter icin 2 tusa basmak gerekir mi.
  ben soyle dusunuyordum.'a,b,c,d,e,f,g,h,i' karakterler icin tek tus olsun diger karakterler icin iki tus ile olmasini dusunuyordum.yani z karakter icin 2 ve 3 tuslarina basarak ekranda z karakteri ciksin.eger bu sekilde zor olursa a karakteri icin 0 ve 1 tuslarina basarak olur. yani tum karakterler cift tusla  yazilabilir.tabi bu durum cok pratik olmuyacak.

diger bir durum,komutlar blogunu tam olarak nasil duzunlemek gerekir.kosullar tum cift sayilar icin olmasi mi gerekiyor.yani tum dizi elemanlari kosullari olusturulmali mi.
Yaşam anlamlandırıldıkça kutsaldır....

ziyaretci

#5

Alıntı yapılan: selvi - 04 Ağustos 2013, 21:22:31
if(dizi[0]==1 && dizi[1]==2){ komutlar;} /* dizinin 0. adresi "1" ve 1. adresi "2" ise komut bloğunu işle*/
 
  bu sekilde duzenlenirse diyelim ki ekranda 'abc' karakterlerini gormek icin 1,2,3 tuslarina basildiginda yeterli olur mu.eger yanlis anlamadiysam her karakter icin 2 tusa basmak gerekir mi.
 

  a,b,c karakterini göstermek için biraz düzenleme yapmak gerekiyor. Her karakter için istersenin 10 tuştan sonra komut verin bu size kalmış, şifre misali.. 

Alıntı Yapben soyle dusunuyordum.'a,b,c,d,e,f,g,h,i' karakterler icin tek tus olsun diger karakterler icin iki tus ile olmasini dusunuyordum.yani z karakter icin 2 ve 3 tuslarina basarak ekranda z karakteri ciksin.eger bu sekilde zor olursa a karakteri icin 0 ve 1 tuslarina basarak olur. yani tum karakterler cift tusla  yazilabilir.tabi bu durum cok pratik olmuyacak.

Evet pratiklik yapmak istediğiniz işleme bağlı tabi, yapmak istediğinizin ana hatlarını çıkardıktan sonra pratikçe geliştirebilirsiniz.

Alıntı Yap
diger bir durum,komutlar blogunu tam olarak nasil duzunlemek gerekir.

  Komutlar bloğunu mesela dizinin 1 ve 2 karakterileri için abc istemiştiniz, en basitinden komutlar bloğuna printf(lcd_putc,"\fabc"); yaparsınız. Veya dahili eepromdan çekersiniz misal ;


if(dizi[0]==1 && dizi[1]==2){
for(adres=0;adres<sayi;adres++){printf(lcd_putc,"\f%c",read_eeprom(adres)); lcd_gotoxy(adres+1,1);

  } sayi=0;
}

Alıntı Yapkosullar tum cift sayilar icin olmasi mi gerekiyor.
Koşulların çiftliği veya tekliği size kalmış. Daha doğrusu bu sorunuzu pek anlayamadım.

Alıntı Yapyani tum dizi elemanlari kosullari olusturulmali mi.

Yani dediğim gibi yapmak istediğiniz uygulamaya bağlı, bakarsınız tek bir koşul ile bütün diziyi kontrol edebiliriz.


selvi

#6
if(dizi[0]==1 && dizi[1]==2){ komutlar;} /* dizinin 0. adresi "1" ve 1. adresi "2" ise komut bloğunu işle*/


ozellikle iki rakamli sayilarin karsiligini ekrana yansitma programi yanlis anlamadiysam su sekilde mi duzenlenecek biraz uzun olacak.

   while(1)  // Sonsuz döngü
   {
        key=keypad_oku();  // Basýlan tuþ deðerini B portuna aktar
        bilgi=port_goster();
       if(key!='\0')
       {   
          dizi[dizi_adres]=key;   // gelen her key değerini 1 byte olarak dizi adreslerine kaydedebiliriz.
         dizi_adres++;   /* her bilgi geldiğinde key değerini diziye kaydettikten sonra dizi adresini bir arttır.*/
         if(dizi_adres==10){dizi_adres=0; for(sil=0;sil<10;sil++){dizi[sil]=0;}}
 /* dizi_adres ==10 ise değişkeni sıfırla ve dizi[] yi temizle */
/*Okumak istediğimizde ise;*/
if (dizi[0]==1 && dizi[0])
{
   dizi[0]*=10;bilgi=dizi[0]+dizi[1];  //bilgi=1x10+1=11    harf  karsiligi 'k'
}
if (dizi[0]==1 && dizi[1])
{
    dizi[0]*=10;bilgi=dizi[0]+dizi[1];  //bilgi=1x10+2=12    harf  karsiligi 'l'
}
if(dizi[0]==1 && dizi[2])
{
    dizi[0]*=10;bilgi=dizi[0]+dizi[2];  //bilgi=1x10+3=13    harf  karsiligi 'm'
}
...
if(dizi[0]==1 && dizi[8])
{
     dizi[0]*=10;bilgi=dizi[0]+dizi[8];
}
if(dizi[1]==2 && dizi[0])
{
    dizi[1]*=10;bilgi=dizi[1]+dizi[0];  //bilgi=2x10+1=21    harf  karsiligi 'v'
}
if(dizi[1]==2 && dizi[1])
{
    dizi[1]*=10;bilgi=dizi[1]+dizi[1];   //bilgi=2x10+2=22    harf  karsiligi 'y'
}
if(dizi[1]==2 && dizi[2])
{
    dizi[1]*=10;bilgi=dizi[1]+dizi[2];  //bilgi=2x10+3=11    harf  karsiligi 'z'
}

 write_eeprom(sayi,bilgi);  // yazma işlemi için bu yeterli ve daha az yer kaplar.
      sayi++; 
    
       key=0; tus=0;if(sayi==255)sayi=0; 
          
   
Yaşam anlamlandırıldıkça kutsaldır....

ziyaretci

#7
Void kontrol(){
if(dizi[0]==1 && dizi[1]==2){ printf(lcd_putc,"\fa");}
if(dizi[0]==2 && dizi[1]==5){ printf(lcd_putc,"\fb");}
if(dizi[0]==3 && dizi[1]==6){ printf(lcd_putc,"\fac");}
if(dizi[0]==7 && dizi[1]==8){ printf(lcd_putc,"\fbac");}
}

Void main(){
while(true){
      .
     if(key!='\0'){
  kontrol();
}
      .
      .
      .
  }
}

selvi

 ugrastim su sekilde duzenlemeye calistim.birkac yontem denedim.olmadi ayni karakterleri veriyor.

#use delay (clock=4000000) // Gecikme fonksiyonu için kullany'lacak osilatör frekansy' belirtiliyor.

#use fast_io(b) //Port yönlendirme komutlary' B portu için geçerli
#use fast_io(d) //Port yönlendirme komutlary' C portu için geçerli

#define use_portb_lcd TRUE

#include <lcd.c>

//#byte   portb=0x06   // B portu "tus" ismine e?itleniyor.

#define sut1   pin_d0 // sut1 ifadesi pin_d0 ifadesine e?itleniyor
#define sut2   pin_d1 // sut2 ifadesi pin_d1 ifadesine e?itleniyor
#define sut3   pin_d2 // sut3 ifadesi pin_d2 ifadesine e?itleniyor
#define sut4   pin_d3 // sut3 ifadesi pin_d2 ifadesine e?itleniyor

#define sat1   pin_d4 // sat1 ifadesi pin_d4 ifadesine e?itleniyor
#define sat2   pin_d5 // sat2 ifadesi pin_d5 ifadesine e?itleniyor
#define sat3   pin_d6 // sat3 ifadesi pin_d6 ifadesine e?itleniyor
#define sat4   pin_d7 // sat4 ifadesi pin_d7 ifadesine e?itleniyor

char tus=0,key=0,harf,sayi=0,bilgi; // karakter tipinde de?i?ken tany'mlany'yor
int dizi[10],dizi_adres=0,sil,deger;

//*********** Keypad Tarama Fonksiyonu *********
char keypad_oku() // Fonksiyon ismi
{
   output_d(0x00); // D portu çy'ky'?y' sy'fy'rlany'yor

   output_high(sat1); // 1. saty'r lojik-1 yapy'ly'yor
   if (input(sut1))   // 1. sütun okunuyor
      { while(input(sut1)); delay_ms(20); tus=1; }
   if (input(sut2))   // 2. sütun okunuyor
      { while(input(sut2)); delay_ms(20); tus=2; }
   if (input(sut3))   // 3. sütun okunuyor
      {while(input(sut3)); delay_ms(20); tus=3; }
   if (input(sut4))   // 4. sütun okunuyor
      {while(input(sut4)); delay_ms(20); tus=0xA; }
   output_low(sat1); // 1. saty'r lojik-0 yapy'ly'yor

   output_high(sat2); // 2. saty'r lojik-1 yapy'ly'yor
   if ( input(sut1))   // 1. sütun okunuyor
      {while(input(sut1)); delay_ms(20); tus=4; }
   if (input(sut2))   // 2. sütun okunuyor
      {while(input(sut2)); delay_ms(20); tus=5; }
   if (input(sut3))   // 3. sütun okunuyor
      {while(input(sut3)); delay_ms(20); tus=6; }
   if (input(sut4))   // 4. sütun okunuyor
      {while(input(sut4)); delay_ms(20); tus=0xB; }
   output_low(sat2); // 2. saty'r lojik-0 yapy'ly'yor

   output_high(sat3); // 3. saty'r lojik-1 yapy'ly'yor
   if (input(sut1))   // 1. sütun okunuyor
      {while(input(sut1)); delay_ms(20); tus=7; }
   if (input(sut2))   // 2. sütun okunuyor
      {while(input(sut2)); delay_ms(20); tus=8; }
   if (input(sut3))   // 3. sütun okunuyor
      {while(input(sut3)); delay_ms(20); tus=9; }
   if (input(sut4))   // 4. sütun okunuyor
      {while(input(sut4)); delay_ms(20); tus=0x0C; }
   output_low(sat3); // 3. saty'r lojik-0 yapy'ly'yor

   output_high(sat4); // 3. saty'r lojik-1 yapy'ly'yor
   if (input(sut1))   // 1. sütun okunuyor
      {while(input(sut1)); delay_ms(20); tus=0xE; }
   if (input(sut2))   // 2. sütun okunuyor
      { while(input(sut2));delay_ms(20); tus=0; }
   if (input(sut3))   // 3. sütun okunuyor
      {while(input(sut3)); delay_ms(20); tus=0xF; }
   if (input(sut4))   // 4. sütun okunuyor
      {while(input(sut4)); delay_ms(20); tus=0xD; }
   output_low(sat4); // 3. saty'r lojik-0 yapy'ly'yor

   return tus; // Fonksiyon "tus" de?eri ile geri döner
}

char port_goster()
{
    if(deger==1)   harf='a';
    if(deger==2)   harf='b';
    if(deger==3)   harf='c';
    if(deger==4)   harf='d';
    if(deger==5)   harf='e';
    if(deger==6)   harf='f';
    if(deger==7)   harf='g';
    if(deger==8)   harf='h';
    if(deger==9)   harf='i';
    if(deger==10)  harf='j';
    if(deger==11)  harf='k';
    if(deger==12)  harf='l';
    if(deger==13)  harf='m';
    if(deger==14)  harf='n';
    if(deger==15)  harf='o';
    if(deger==16)  harf='p';
    if(deger==17)  harf='r';
    if(deger==18)  harf='s';
    if(deger==19)  harf='t';
    if(deger==20)  harf='u';
    if(deger==21)  harf='v';
    if(deger==22)  harf='y';
    if(deger==23)  harf='z';
       
    return harf;  // Fonksiyon "harf" de?eri ile geri döner
}

int port_control()
{
   if (dizi[0]==1 && dizi[2]==1) deger=11;
   if (dizi[0]==1 && dizi[2]==2) deger=12;
   if (dizi[0]==1 && dizi[2]==3) deger=13;
   if (dizi[0]==1 && dizi[2]==4) deger=14;
   if (dizi[0]==1 && dizi[2]==5) deger=15;
   if (dizi[0]==1 && dizi[2]==6) deger=16;
   if (dizi[0]==1 && dizi[2]==7) deger=17;
   if (dizi[0]==1 && dizi[2]==8) deger=18;
   if (dizi[0]==1 && dizi[2]==9) deger=19;
   
   return deger;
}
/********* ANA PROGRAM FONKSY'YONU********/

void main ( )
{
   setup_psp(PSP_DISABLED);        // PSP birimi devre dy'?y'
   setup_timer_1(T1_DISABLED);     // T1 zamanlayy'cy'sy' devre dy'?y'
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayy'cy'sy' devre dy'?y'
   setup_adc_ports(NO_ANALOGS);    // ANALOG giri? yok
   setup_adc(ADC_OFF);             // ADC birimi devre dy'?y'

   set_tris_b(0x00);   // B portu komple çy'ky'?
   set_tris_d(0x0F);   // Yüksek de?erlikli 4 bit çy'ky'?, dü?ük de?erlikli 4 bit giri?

   output_b(0x00); // Y'lk anda B portu çy'ky'?y' sy'fy'rlany'yor
   
   lcd_init();

   while(1)  // Sonsuz döngü
   {
        bak:
        key=0;
        key=keypad_oku();  // Basy'lan tu? de?erini B portuna aktar
       if(key!='\0')
       {
          if (dizi_adres==0) dizi[dizi_adres]=key;   // gelen her key deðerini 1 byte olarak dizi adreslerine kaydedebiliriz.
          dizi_adres++;   /* her bilgi geldiðinde key deðerini diziye kaydettikten sonra dizi adresini bir arttýr.*/ 
          if(dizi_adres==2)
          {
            dizi[dizi_adres]=key;dizi_adres=0;
          }
          if (dizi_adres==1) goto bak;
          port_control();
          bilgi=port_goster ();
          if(keypad_oku()==12) 
          {
            sayi=0;
            printf(lcd_putc,"\f%c%c%c%c%c%c%c%c",read_eeprom(0),read_eeprom(1),read_eeprom(2),read_eeprom(3),
            read_eeprom(4),read_eeprom(5),read_eeprom(6),read_eeprom(7));
          }
        write_eeprom(sayi,0);delay_ms(5);                                                                                                                                                                                                                                                                                       
        write_eeprom(sayi,bilgi);  // yazma iþlemi için bu yeterli ve daha az yer kaplar.
        sayi++; 
    
        tus=0;if(sayi==255)sayi=0;key=0;
      }
   }
       
}
Yaşam anlamlandırıldıkça kutsaldır....

haydarpasamikro

2 boyutlu bir dizi oluştur. Dizinin 1. boyutu tuş numarasını, 2.boyutu ise tuşun fonksiyonlarını tutsun. Örneğin:

4x4 tuş takımı misal.

char tus[16][4] = {{0,'A','B','C'}, {2,'D','E','F'},.....};

Bir timer kesmesi kullanalım. Her kesme 200ms olsun. Yani bu süre dolmadan aynı tuşa bir daha basarsa O boyutun 4 elemanı arasında artırarak ilerlesin. Süre dolduktan sonra(kesme oluşunca) o dizinin o boyutunun elemanı seçilen tuş olur. Bir fonksiyon içinde geri dönderilir.
Mikro Dünyası.Haydarpaşa Teknik ve Endüstri Meslek Lisesi Mikrodenetleyici Atl. Şefi

selvi

  islem kolayligi acisindan 1 den 9 rakama kadar harf karsiligi icin tek tus gerekli.10 dan 23 sayilara kadar harf karsiligi icin 2 tus gerekli.programda tek ve cift tuslarin karsilgini nasil gosterebilirim.ornegin; ekranda "yazi' karakterini gormek icin sirasiyla "22',"1','23','9' tuslarina basilmasi gerekiyor.'y' karakteri icin iki kere 2 tusuna basmam gerekiyor.program bunun 2 tane 'bb' karakteri olmadigini nasil ayirt edecek.
   bahsettginiz iki boyutlu dizi durumunu yukarda bahsettigim sekilde duzenlemeniz mumkun mu.anlasilir olmasi icin.simdiye kadar programda iki boyutlu dizi kullamadigim icin bahsettgiginiz bicimi tam anlayamadim.
Yaşam anlamlandırıldıkça kutsaldır....

ziyaretci

Alıntı yapılan: selvi - 08 Ağustos 2013, 15:47:01
  islem kolayligi acisindan 1 den 9 rakama kadar harf karsiligi icin tek tus gerekli.10 dan 23 sayilara kadar harf karsiligi icin 2 tus gerekli.programda tek ve cift tuslarin karsilgini nasil gosterebilirim.ornegin; ekranda "yazi' karakterini gormek icin sirasiyla "22',"1','23','9' tuslarina basilmasi gerekiyor.'y' karakteri icin iki kere 2 tusuna basmam gerekiyor.program bunun 2 tane 'bb' karakteri olmadigini nasil ayirt edecek.
   bahsettginiz iki boyutlu dizi durumunu yukarda bahsettigim sekilde duzenlemeniz mumkun mu.anlasilir olmasi icin.simdiye kadar programda iki boyutlu dizi kullamadigim icin bahsettgiginiz bicimi tam anlayamadim.

Şöyle birşey yapsak; yıldız tuşuna basılı tutulduğunda ardışık basılan tuşları tekbir değişkende toplayalım. Bıraktığımızda ise 2 ve 3 rakamı 23 olarak tek bir değişkende saklansın. Şuanda vaktim yok, gece yarısı daha net örneklerle hallederiz.

ziyaretci

#12
 Demek istediğini en son açıklamandan sonra anladım.

Yıldız tuşuna bastığımızda key değeri 0xA oluyor ve bu bilgiyi 2 tuş girilmeden program tek tuş kayıt moduna dönmeyecek. Derlemedim ama hata çıkmaz diye düşünüyorum. Zaten mantığı gördümü kendin düzenlersin olmadı buralardayız, elimizden geldiğince yardımcı olmaya çalışırız. İyi çalışmalar

/******************************************************
      PIC16F877 ile Tuþ Takýmý Uygulamasý-1
      PIC PROG/DEKA     : Port B jumper'ý LED konumunda olmalý
*******************************************************/
#include <16f877.h>     // Kullanýlacak denetleyicinin baþlýk dosyasý tanýtýlýyor.

// Denetleyici konfigürasyon ayarlarý
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000) // Gecikme fonksiyonu için kullanýlacak osilatör frekansý belirtiliyor.

#use fast_io(b) //Port yönlendirme komutlarý B portu için geçerli
#use fast_io(d) //Port yönlendirme komutlarý C portu için geçerli

#define use_portb_lcd TRUE

#include <lcd.c>

//#byte   portb=0x06   // B portu "tus" ismine eþitleniyor.

#define sut1   pin_d0 // sut1 ifadesi pin_d0 ifadesine eþitleniyor
#define sut2   pin_d1 // sut2 ifadesi pin_d1 ifadesine eþitleniyor
#define sut3   pin_d2 // sut3 ifadesi pin_d2 ifadesine eþitleniyor
#define sut4   pin_d3 // sut3 ifadesi pin_d2 ifadesine eþitleniyor

#define sat1   pin_d4 // sat1 ifadesi pin_d4 ifadesine eþitleniyor
#define sat2   pin_d5 // sat2 ifadesi pin_d5 ifadesine eþitleniyor
#define sat3   pin_d6 // sat3 ifadesi pin_d6 ifadesine eþitleniyor
#define sat4   pin_d7 // sat4 ifadesi pin_d7 ifadesine eþitleniyor

char tus=0,key=0,key2=0,harf,sayi=0,bilgi; // karakter tipinde deðiþken tanýmlanýyor
char x1=0,x2=0,x3=0,x4,x5=0,x6=0,x7=0,x8=0;

int cift_kayit[2];
int tus_cift=0;

int1 giris=0;

//*********** Keypad Tarama Fonksiyonu *********
char keypad_oku() // Fonksiyon ismi
{
   output_d(0x00); // D portu çýkýþý sýfýrlanýyor

   output_high(sat1); // 1. satýr lojik-1 yapýlýyor
   if (input(sut1))   // 1. sütun okunuyor
      { while(input(sut1)); delay_ms(20); tus=1; }
   if (input(sut2))   // 2. sütun okunuyor
      { while(input(sut2)); delay_ms(20); tus=2; }
   if (input(sut3))   // 3. sütun okunuyor
      {while(input(sut3)); delay_ms(20); tus=3; }
   if (input(sut4))   // 4. sütun okunuyor
      {while(input(sut4)); delay_ms(20); tus=0xA; }
   output_low(sat1); // 1. satýr lojik-0 yapýlýyor

   output_high(sat2); // 2. satýr lojik-1 yapýlýyor
   if ( input(sut1))   // 1. sütun okunuyor
      {while(input(sut1)); delay_ms(20); tus=4; }
   if (input(sut2))   // 2. sütun okunuyor
      {while(input(sut2)); delay_ms(20); tus=5; }
   if (input(sut3))   // 3. sütun okunuyor
      {while(input(sut3)); delay_ms(20); tus=6; }
   if (input(sut4))   // 4. sütun okunuyor
      {while(input(sut4)); delay_ms(20); tus=0xB; }
   output_low(sat2); // 2. satýr lojik-0 yapýlýyor

   output_high(sat3); // 3. satýr lojik-1 yapýlýyor
   if (input(sut1))   // 1. sütun okunuyor
      {while(input(sut1)); delay_ms(20); tus=7; }
   if (input(sut2))   // 2. sütun okunuyor
      {while(input(sut2)); delay_ms(20); tus=8; }
   if (input(sut3))   // 3. sütun okunuyor
      {while(input(sut3)); delay_ms(20); tus=9; }
   if (input(sut4))   // 4. sütun okunuyor
      {while(input(sut4)); delay_ms(20); tus=0x0C; }
   output_low(sat3); // 3. satýr lojik-0 yapýlýyor

   output_high(sat4); // 3. satýr lojik-1 yapýlýyor
   if (input(sut1))   // 1. sütun okunuyor
      {while(input(sut1)); delay_ms(20); tus=0xE; }
   if (input(sut2))   // 2. sütun okunuyor
      { while(input(sut2));delay_ms(20); tus=0; }
   if (input(sut3))   // 3. sütun okunuyor
      {while(input(sut3)); delay_ms(20); tus=0xF; }
   if (input(sut4))   // 4. sütun okunuyor
      {while(input(sut4)); delay_ms(20); tus=0xD; }
   output_low(sat4); // 3. satýr lojik-0 yapýlýyor

   return tus; // Fonksiyon "tus" deðeri ile geri döner
}

char port_goster()
{
    if(tus==1)   harf='a';
    if(tus==2)   harf='b';
    if(tus==3)   harf='c';
    if(tus==4)   harf='d';
    if(tus==5)   harf='e';
    if(tus==6)   harf='f';
    if(tus==7)   harf='g';
    if(tus==8)   harf='h';
    if(tus==9)   harf='i';

 if(tus_cift==10)  harf='j';
    if(tus_cift==11)  harf='k';
    if(tus_cift==12)  harf='l';
    if(tus_cift==13)  harf='m';
    if(tus_cift==14)  harf='n';
    if(tus_cift==15)  harf='o';
    if(tus_cift==16)  harf='p';
    if(tus_cift==17)  harf='r';
    if(tus_cift==18)  harf='s';
    if(tus_cift==19)  harf='t';
    if(tus_cift==20)  harf='u';
    if(tus_cift==21)  harf='v';
    if(tus_cift==22)  harf='y';
    if(tus_cift==23)  harf='z'; 
return harf;
     // Fonksiyon "harf" deðeri ile geri döner
}



/********* ANA PROGRAM FONKSÝYONU********/

void main ( )
{
   setup_psp(PSP_DISABLED);        // PSP birimi devre dýþý
   setup_timer_1(T1_DISABLED);     // T1 zamanlayýcýsý devre dýþý
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayýcýsý devre dýþý
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriþ yok
   setup_adc(ADC_OFF);             // ADC birimi devre dýþý

   set_tris_b(0x00);   // B portu komple çýkýþ
   set_tris_d(0x0F);   // Yüksek deðerlikli 4 bit çýkýþ, düþük deðerlikli 4 bit giriþ

   output_b(0x00); // Ýlk anda B portu çýkýþý sýfýrlanýyor
   
   lcd_init();

   while(1)  // Sonsuz döngü
   {
if(islem==1){  
tus_cift=cift_kayit[1]+(cift_kayit[0]*10);   /*2 adet rakamı tek bir değişkene aktardık. İlk girdiğimiz rakamı 10 ile çarpıp 2. rakam ile topladık ve tus_cift değişkenine yükledik.*/
islem=0; x1=0;x2=0;for(x4=0;x4<2;x4++){cift_kayit[x4]=0;}
if(tus_cift==0 || tus_cift>23){tus_cift=0;}
} 
        key=keypad_oku();  // Basýlan tuþ deðerini B portuna aktar
        bilgi=port_goster();
       if(key!='\0' || tus_cift!=0)
       {
         // bilgi=port_goster();
          
          if(keypad_oku()==12) 
          {sayi=0;
            printf(lcd_putc,"\f%c%c%c%c%c%c%c%c",read_eeprom(0),read_eeprom(1),read_eeprom(2),read_eeprom(3),
            read_eeprom(4),read_eeprom(5),read_eeprom(6),read_eeprom(7));
          }


if(giris==1){

cift_kayit[x1]=key;
 x1++;
key2=0; tus=0; if(x1==2){ islem=1; x1=0; key=0; giris=0;} 
}
else{   
      write_eeprom(sayi,bilgi);  // yazma işlemi için bu yeterli ve daha az yer kaplar.
      sayi++; 
    
       key=0; tus=0; tus_cift=0;if(sayi==255)sayi=0; 
          }// else bitiş
if(key==0xA){ giris=1; key=0;}
       } // if(key!='\0' || tus_cift!=0) bitiş
       
   }  // sonsuz döngü bitiş
} // ana döngü bitiş

    SMF 2.0.4 | SMF © 2013, Simple Machines
    Destek: Elektronik

selvi

  son verdigin progragrami denedim tek tuslari aliyor.fakat cift tuslari almiyor.anladigim kadariyla cift tuslara basilmadan once 'A' tusuna basiliyor.her cift tus icin onceden 'A' tusuna basmak mi gerekiyor.
ornegin; "yazili"  karakterini ekrana yansitmak icin sirasiyla nasil tus dizimi yapilmali.
Yaşam anlamlandırıldıkça kutsaldır....

selvi

Yaşam anlamlandırıldıkça kutsaldır....