c diliyle pic programlama bilenlere bir soru...acil!

yyoollccuu

Üye
Katılım
29 Eyl 2008
Mesajlar
51
Puanları
1
Yaş
37
merhaba arkadaşlar...bir tuş takımı ve lcd ile bir menu oluşturmaya çalışıyorum....deneme aşamasında uydurma bir menuyle işe koyuldum...ancak bir sıkıntım var...kodu da ekliyorum.bu işte iyi olanlar mutlaka bir bakışta sorunu görecek ve bana yardım edebilecektir diye ümit ediyorum:)

şimdi gelelim soruna.# tuşuna basınca menuye giriyoruz.menüde 4 secenek var.diyelim ki 1'e bastık ve ışık secenegini sectik. ekrana 1-AC ve 2-KAPA yazısı yazdırımalı. burda tekrardan 1'e basınca yeniden koda göre ekranda başka bir şey yazmalı. ancak böyle olmuyor. ben ilk 1e bastıktan sonra AC KAPA yazısı görülmüyor,direk 1-dldl yazısını görüyorum. tuş taramada bir sıkıntım var sanırım ama çözemedim ne yazık ki. 2 kez üst üste 1'e basınca görünsün istiyorum 1-dldl yazısı ekranda, ama olmuyor.

biraz karışık oldu ama umarım derdim anlaşılmıştır. yardımlarınızı bekliyorum.çünkü bu sorunu halledemediğim sürece bir ilerleme kaydedemeyecegim:(

Kod:
#include <16f877.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

#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

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

#include <lcd.c>   // lcd.c dosyası tanıtılıyor

#define sut1   pin_b1 // sut1 ifadesi pin_d0 ifadesine eşitleniyor
#define sut2   pin_b2 // sut2 ifadesi pin_d1 ifadesine eşitleniyor
#define sut3   pin_b3 // sut3 ifadesi pin_d2 ifadesine eşitleniyor


#define sat1   pin_b4 // sat1 ifadesi pin_d4 ifadesine eşitleniyor
#define sat2   pin_b5 // sat2 ifadesi pin_d5 ifadesine eşitleniyor
#define sat3   pin_b6 // sat3 ifadesi pin_d6 ifadesine eşitleniyor
#define sat4   pin_b7 // sat4 ifadesi pin_d7 ifadesine eşitleniyor

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

// Tustakimi Tarama Fonksiyonu 

char keypad_oku() 
{
   output_b(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); // 4. 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; }
  
   output_low(sat4); // 4. satır lojik-0 yapılıyor

return tus; 
}
 
void main ( )
{
   
   set_tris_d(0x00);   // B portu komple çıkış
   set_tris_b(0x0F);   // Yüksek değerlikli 4 bit çıkış, düşük değerlikli 4 bit giriş

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

   printf(lcd_putc,"\f#->menu"); // LCD'ye string yazdırılıyor

   while(1)
{
   
  [B] keypad_oku();
   
    if(tus!='\0')//tusa basilmissa
    {
    if (tus==0xF)
    {
      lcd_gotoxy(1,1);
      lcd_putc(" 1-ISIK  2-ISI\n 3-BAHCE 4-FIRIN");
      keypad_oku(); 
      if (tus==1)   
      {
      keypad_oku();
      lcd_gotoxy(1,1);
      lcd_putc(" \f 2-AC\n 3-KAPA "); 
      keypad_oku(); if (tus==1)   
      {
      lcd_gotoxy(1,1);lcd_putc("1-dldl ");   
      } } }}[/B]
      
    }
    }
 
kimseden cevap gelmemiş ama ben sorunu biraz hallettim gibi. tuş takımı kullanacak arkadaşlara faydası olsun diye söylüyorum: ccs c derleyicisi içinde bir keypad driver varmış. böylece tuş tarama fonksiyonu yazmak zorunda kalmıyorsunuz. bununla derdimi çözdüm sayılır.
herkese ii çalışmaşar.kolay gele...
 
CCS anlatan TR kaynak az.Picproje.org gurubunun "nigel gardner" çevirisi var,birde sağolsun Cemil Çiçeğin CCS C ile pic programlama kitabı.Bu kitabın içerisindeki örnekler toplu halde internette bulunuyor.Bizzat yayın evi aracılığı ile ,sağ olsunlar var olsunlar.
Bunlar haricindekiler dağınık bilgiler.
Cemil Çiçeğin kitabını mutlaka edinmelisin.
Bunun yanında C programlama konularında çok kaynak var.Her ne kadar tam uyumlu olmasada temel aynıdır.Öğrenmek şart.
Birde ilgili pic in pdf ini yalayıp yuttuğunu varsayıyoruz tabii.

Örneğinde tuş taramadan çok karar döngülerinin kullanımı sorunu gözüküyor.
if,for,do,while,switch,case gibi döngüleri ve dizileri incelemelisin.

Edit :
CCS derleyici , .hex yanında .cof uzantılı bir dosya daha üretir.Proteus da pic e bu dosyayı gösterirsen ve play değilde step tuşuna tıklarsan : Yazdığın kodları gösteren bir pencere açılır ve sağ-üstteki ayak resimlerine tıkladıkça adım adım/satır satır kodları yürütür.Hata ayıklamada eşsiz bir özelliktir.Bu yüzden 200mb lık program 8000 dolar eder.:rolleyes:
 
Son düzenleme:

Forum istatistikleri

Konular
127,950
Mesajlar
913,849
Kullanıcılar
449,596
Son üye
anilhikmet

Yeni konular

Geri
Üst