Tuş takımından alınan değeri aynı anda lcd ye ve ledlere yollama sorunu??

Başlatan haasan, 12 Nisan 2012, 16:22:40

haasan

forumların da yardımı ile tuş takımından gelen bilgiyi lcdye yazdırmayı basarıyorum.. fakat D portunda tuş takımı Bportunda lcd varken aynı anda C portuna baglı olan ledlerı de tuş takımından gelecek olan rakama göre yakmak istiyorum fakat olmuyor.. asagıda kodu yazdım, nerede yanlış yapıyorum yardım edebilir misiniz??
tesekkürler..


#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ı B portu için geçerli
#use fast_io(c)

#byte   portc=0x06          // C portu "tus" ismine eşitleniyor.

#define use_portb_lcd TRUE   // LCD B portuna bağlı

#include <lcd.c>   // lcd.c dosyası tanıtılıyor
#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 sat1   pin_d3       // sut3 ifadesi pin_d2 ifadesine eşitleniyor
#define sat2   pin_d4       // sat1 ifadesi pin_d4 ifadesine eşitleniyor
#define sat3   pin_d5       // sat2 ifadesi pin_d5 ifadesine eşitleniyor
#define sat4   pin_d6       // sat3 ifadesi pin_d6 ifadesine eşitleniyor

char tus=0;   // karakter tipinde değişken tanımlanıyor

//*********** 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; }
    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; }
  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; }
   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='*'; }
   if (input(sut2))   // 2. sütun okunuyor
      { delay_ms(20); tus=0; }
   if (input(sut3))   // 3. sütun okunuyor
      { delay_ms(20); tus='#'; }
   output_low(sat4); // 3. satır lojik-0 yapılıyor

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



//********** ANA PROGRAM FONKSİYONU*******

void main ( )
{
   setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
   setup_spi(SPI_SS_DISABLED);     // SPI 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(0x87);   // Yüksek değerlikli 4 bit çıkış, düşük değerlikli 4 bit giriş
   set_tris_c(0x00);

   lcd_init();   // LCD hazırlanıyor

   printf(lcd_putc,"\fBasilan Tus="); // LCD'ye string yazdırılıyor
       while(1) // Sonsuz döngü
       {
         bu kod calısmıyor???
         portc=keypad_oku();                       //c portunda baglı olan ledlere tus bilgisi gidiyor
         delay_ms(20);


         lcd_gotoxy(13,1);                              // İmleç 3.sütun, 1.satıra konumlandırılıyor
         if (keypad_oku()>9)                           // Eğer basılan tuş değeri 9'dan büyük ise
         printf(lcd_putc,"%c",keypad_oku());  // Tuş değeri LCD'ye yazdırılıyor
         else                                                    // Eğer basılan tuş değeri 9'dan büyük değilse
         printf(lcd_putc,"%d ",keypad_oku()); // Tuş değeri LCD'ye yazdırılıyor
         delay_ms(20);
     
      }

}