kayan yazi uygulamasi destek

cagamaga

Üye
Katılım
16 Şub 2010
Mesajlar
13
Puanları
1
Yaş
40
Merhaba arkadaslar.Bi kayan yazi uygulamasi yapmak istiyordum klavye kontrolü olmayacak sade bisey.yalniz sorun cikti programda hatam var buda shift registerden kaynklandigii dusunuyorum yani yazdigim kodla ilgili.bir el atarsaniz sevinirim.
Tesekkurler





Kod:
#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ılan osilatör frekansı belirtiliyor

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

#define   data   pin_c0
#define   clock  pin_c1


 int i,l,k,j;

//******** Matrise Gönderilecek Karakter Bilgileri *******
 int yazi[]={
       0x03,0x75,0x76,0x75,0x03
       0x00,0X36,0X36,0x36,0X49,
       0x41,0x3E,0x3E,0x3E,0x5D,
       0x00,0x3E,0x3E,0x3E,0x41,
       0x00,0xB6,0xB6,0xB6,0xBE,
       0x77,0x77,0x41,0x77,0x77,
       0x6B,0x5D,0x00,0x5D,0x6B  };// gonderilecek yazi

//******* Sütun Seçme Fonksiyonu ************
int sutunsec (int s)

{
   switch (s)
   {
      case 0: return(0x10);break;  // 1. Sütun aktif, diğer sütunlar pasif
      case 1: return(0x08);break;  // 2. Sütun aktif, diğer sütunlar pasif
      case 2: return(0x04);break;  // 3. Sütun aktif, diğer sütunlar pasif
      case 3: return(0x02);break;  // 4. Sütun aktif, diğer sütunlar pasif
      case 4: return(0x01);break;  // 5. Sütun aktif, diğer sütunlar pasif
   }
   
  
}


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ışı
   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı

   set_tris_b(0x00);  // B portu tümüyle çıkış olarak yönlendiriliyor
   set_tris_c(0x00);  // C portu tümüyle çıkış olarak yönlendiriliyor


   while(1)
   {
 
   for (i=1;i<40;i++)  // Karakterin Matris LED'de görünmesi için tekrar döngüsü
       {
         for(j=0;j<15;j++) // // Bu döngüde tarama işlemi yapılıyor burdaki 15 kullandigim 
         //3 matrisin toplam kolon sayisina esit  yani 3x5=15 yalnisim varsa duzelt
   
         {
         
           
            output_bit(data,sutunsec(j)); 
           
            output_b(yazi[j]);     // Gösterilecek harfin satır bilgisini B portuna gönder
 
  
           

           output_high(clock);
           output_low(clock);
           delay_ms(10);
           }
           }

           }




bide resim eklemeyi bilsem :( proteusda cizdigim devreyi yollicam.ama bu ilk uye oldugum forum 

}
 
schmeaticigini de eklemesen daha iyi olur,data ve clk kulllanmıssın ama ne icin ve nasil kullanmissın koddan anlamak haliyle zor.satirlari portb ye baglamissin ama sutunlari nasil taramaya calistin portc nin iki pininden anlayamadim
output_bit(data,sutunsec(j));
ilk bakista bu komutta bi terslik var gibime geldi komutla pinc0 ı sadece high ve low yapabilirsin sen hex bişiler dondurup tarama yapmaya calismisin sanki..
 
schmeaticigini de eklemesen daha iyi olur,data ve clk kulllanmıssın ama ne icin ve nasil kullanmissın koddan anlamak haliyle zor.satirlari portb ye baglamissin ama sutunlari nasil taramaya calistin portc nin iki pininden anlayamadim
output_bit(data,sutunsec(j));
ilk bakista bu komutta bi terslik var gibime geldi komutla pinc0 ı sadece high ve low yapabilirsin sen hex bişiler dondurup tarama yapmaya calismisin sanki..

aslinda semasini gorsen daha iyi anliyican sadece ben buraya nasil resim ekleye bilirim onu bilmiyorum .Bu konuda yardimci ol sonra pice geceriz :)
 
Kod:
#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ılan osilatör frekansı belirtiliyor

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

#define   data   pin_c0
#define   clock  pin_c1


 int i,l,k,j;

//******** Matrise Gönderilecek Karakter Bilgileri *******
 int yazi[]={
       0x03,0x75,0x76,0x75,0x03
       0x00,0X36,0X36,0x36,0X49,
       0x41,0x3E,0x3E,0x3E,0x5D,
       0x00,0x3E,0x3E,0x3E,0x41,
       0x00,0xB6,0xB6,0xB6,0xBE,
       0x77,0x77,0x41,0x77,0x77,
       0x6B,0x5D,0x00,0x5D,0x6B  };// gonderilecek yazi

//******* Sütun Seçme Fonksiyonu ************
int sutunsec (int s)

{
   switch (s)
   {
      case 0: return(0x10);break;  // 1. Sütun aktif, diğer sütunlar pasif
      case 1: return(0x08);break;  // 2. Sütun aktif, diğer sütunlar pasif
      case 2: return(0x04);break;  // 3. Sütun aktif, diğer sütunlar pasif
      case 3: return(0x02);break;  // 4. Sütun aktif, diğer sütunlar pasif
      case 4: return(0x01);break;  // 5. Sütun aktif, diğer sütunlar pasif
   }
  
 
}


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ışı
   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı

   set_tris_b(0x00);  // B portu tümüyle çıkış olarak yönlendiriliyor
   set_tris_c(0x00);  // C portu tümüyle çıkış olarak yönlendiriliyor


   while(1)
   {
 
   for (i=1;i<40;i++)  // Karakterin Matris LED'de görünmesi için tekrar döngüsü
       {
         for(j=0;j<15;j++) // // Bu döngüde tarama işlemi yapılıyor burdaki 15 kullandigim
         //3 matrisin toplam kolon sayisina esit  yani 3x5=15 yalnisim varsa duzelt
  
         {
        
          
            output_bit(data,sutunsec(j));
          
            output_b(yazi[j]);     // Gösterilecek harfin satır bilgisini B portuna gönder
 
 
          

           output_high(clock);
           output_low(clock);
           delay_ms(10);
           }
           }

           }

}

sole oldumu
 
en kolayi bi yere upload et sonra linkini koy
------------------
schema açılmıyo
 
Son düzenleme:
dedigin gibi yaptim upload etdim. valla ben actim
 
tamam bende actim şimdi senin resmi.sen burda shift register kullanmıssın ama datasheetine baktigim da yazilimi ters yapmissin gibi geldi.
output_bit(data,sutunsec(j));

bu komutunda hata var sanki,dedigim gibi output_bit pin_c0 ı high yada low yapar.output_bit(pin_c0,1) gibi kullanılır,oysa sen bunu output_bit(pin_c0,0x80) gibi kullanmaya calismişsin,burda yapman gereken bi döngü oluşturmak ve seri olarak yazmak istedigin datanın bitlerini LSB den baslayarak yazmak ve her bit yazdıgında clock a bi yukselen kenar gondermek,umarım anlatmak istedigimi acıklayablmisimdir
 
Evet dogru diyorsun hatam shift register programlamasinda
ornek olarak sole yani
asagidaki digit[10]={0- 9 arasi sayilar(hexadesimal formatinda)}
Kod:
  while(1)
   {
     for(i=0;i<10;i++)   // Displayde gösterilecek 0-9 sayıları için döngü

     {

        for(j=0;j<8;j++) // Gönderilecek verinin bit bit gönderilmesi için
                         // oluşturulan döngü
        {
           output_bit(data,bit_test(digit[i],j)); // Bit değeri data pinine gönderiliyor

           output_high(clock); // Clock sinyali lojik-1 yapılıyor
           output_low(clock);  // Clock sinyali lojik-0 yapılıyor
        }
        delay_ms(500); // Gecikme veriliyor
    }
   }
}

bu mesala iki display surmek icin

iste ben bunu kendi devre semama uygulmaya calistim olmadi tabi tipki aynisin degil farkli sekilde.aklima sey geldi acaba shift register icin bir fonksiyon yazsam ayri ve onu ana menude cagirsam.ole olurmu.Normalde C dilim ama picde zorlaniyorum biraz.kesmelere daha yeni geciyorum kesmelerle bu isi yapabilirim herhalde.Yani baska oluru varmi diye bura sordum.

Bu arada turkcem bozuk olabilir kusura bakma, ben azeriyim.
 
sorun deil turkcen gayet iyi,sen bilirsin ister ayrı fonksiyon yaza cagırsın ister yazdıgın döngüyle halledersin orası sana kalmış,kesmelerle yapamazsın kesmeler daha farklidir,onlar kesmeler inputtur,senin burda bir 2 pine (data ve clock) uygun formatta data göndermen gerekiyo o kadar...
 

Yeni mesajlar

Forum istatistikleri

Konular
128,362
Mesajlar
917,022
Kullanıcılar
450,232
Son üye
burak.s

Yeni konular

Geri
Üst