1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...
Nis
29th

CCS C ile Kayan Yazı

img059.jpg

CCS C ile yapıp çalıştırdığım bu kayanyazı devresini verdiğm kodlarını inceleyerek kendinize uyarlayabilirsiniz.

schematics1ll.gif

Benim yaptığım devre yukarıdakiyle neredeyse aynı olup shift register olarak tpic6b595 kullandım ama 74595 ilede devre çalışacaktır.

Devreye ilk enerji verildiÄŸinde çiersine default olarak verilen yazı dizisini kaydırmaya baÅŸlayacaktır. Yazıyı deÄŸiÅŸtirmek isterseniz terminal programı ile haberleÅŸmeyi baÅŸlatmak için “EL” harflerini yazıp enter’a basmanız gerekli

Daha sonra terminal ekranına “Karakter sayisini giriniz.” diye bir uyarı gelecektir. Buraya göndereceiÄŸiniz yazı dizisinde yer alan karakter sayısını boÅŸluklarla girmeniz gereklidir. EÄŸer yazınız 10 karakterden küçükse örneÄŸin 7 ise terminale 07 olarak giriniz. Karakter sayısını girip enter’a bastığınızda yazı hemen kaymaya baÅŸlayacaktır.

Yapacaklara kolay gelsin

/**********************************************/
/*          www.ccspic.com                   */
/*********************************************/

#include <18F452.h>
#fuses HS,NOWDT,PUT,NOPROTECT,BROWNOUT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, parity=N, bits=8)

#define PIN_RCLK      PIN_D3  // RCLK —-> Pin 12
#define PIN_SCLK      PIN_D4  // SRCLK —> Pin 13
#define PIN_SER_IN    PIN_D2  // SER —–> Pin 3

//Kaydırılacak Karakter sayısı
long s1_char_size=22;
char s1[240];
long i;
// Default mesaj
char  const msg_default[22] = ”    www.ccspic.com”;

//Karakter tablosu 1
char  const ascii1[32][5] = {
   {0,0,0,0,0}
   {0,0,95,0,0}
   {0,7,0,7,0}
   {20,127,20,127,20}
   {36, 42, 127, 42, 18}
   {39, 21, 107, 84, 114}
   {54, 73, 86, 32, 80}
   {0, 11, 7,0,0}
   {0, 28, 34, 65,0}
   {0, 65, 34, 28,0}
   {42, 28, 127, 28, 42}
   {8, 8, 62, 8, 8}
   {0, 88, 56, 0,0}
   {8,8,8,8,8}
   {0, 96, 96, 0,0}
   {32, 16, 8, 4, 2}
   {62, 81, 73, 69, 62}
   {0, 66, 127, 64,0}
   {114, 73, 73, 73, 70}
   {34, 65, 73, 73, 54}
   {24, 20, 18, 127, 16}
   {39, 69, 69, 69, 57}
   {60, 74, 73, 73, 48}
   {1, 113, 9, 5, 3}
   {54, 73, 73, 73, 54}
   {6, 73, 73, 41, 30}
   {0, 54,54,0,0}
   {0, 91, 59, 0,0}
   {8, 20, 34, 65,0}
   {20, 20, 20, 20, 20}
   {65, 34, 20, 8,0}
   {2, 1, 81, 9, 6}
   };
//Karakter tablosu devamı
char  const ascii2[32][5] = {
{50, 73, 121, 65, 62}
{124, 18, 17, 18, 124}
{65, 127, 73, 73, 54}
{62, 65, 65, 65, 34}
{65, 127, 65, 65, 62}
{127, 73, 73, 65, 65 }
{127, 9, 9, 1, 1}
{62, 65, 73, 73, 58}
{127, 8, 8, 8, 127}
{0, 65, 127, 65, 0}
{32, 64, 65, 63, 1}
{127, 8, 20, 34, 65}
{127, 64, 64, 64, 64}
{127, 2, 12, 2, 127}
{127, 2,  4, 8, 127}
{62, 65, 65, 65, 62}
{127, 9, 9, 9, 6}
{62, 65, 81, 33, 94}
{127, 9, 25, 41, 70}
{38, 73, 73, 73, 50}
{1,1,127, 1, 1}
{63, 64, 64, 64, 63}
{7, 24, 96, 24, 7}
{127, 32, 24, 32, 127}
{99, 20, 8, 20, 99}
{3, 4, 120, 4, 3}
{97, 81, 73, 69, 67}
{0, 127, 65, 65,0}
{2, 4, 8, 16, 32}
{0, 65, 65, 127,0}
{4, 2, 1, 2, 4}
{64, 64, 64, 64, 64}
};
//Karakter tablosu devamı
char  const ascii3[31][5] = {
   {0, 0, 7, 11,0}
   {32, 84, 84, 84, 56}
   {127, 40, 68, 68, 56}
   {56, 68, 68, 68,0}
   {56, 68, 68, 40, 127}
   {56, 84, 84, 84, 24}
   {8, 126, 9, 9, 2}
   {8, 84, 84, 84, 60}
   {127, 8, 4, 4, 120}
   {0, 68, 125, 64,0}
   {32, 64, 68, 61,0}
   {127, 16, 40, 68,0}
   {0, 65, 127, 64, 0}
   {124, 4, 120, 4, 120}
   {124, 8, 4, 4, 120}
   {56, 68, 68, 68, 56}
   {124, 20, 20, 20, 8}
   {8, 20, 20, 20, 124}
   {124, 8, 4, 4, 8}
   {72, 84, 84, 84, 36}
   {4, 63, 68, 68,0}
   {60, 64, 64, 32, 124}
   {28, 32, 64, 32, 28}
   {60, 64, 48, 64, 60}
   {68, 40, 16, 40, 68}
   {12,80, 80, 80, 60}
   {68, 100, 84, 76, 68}
   {0, 8, 54, 65,0}
   {0,0,119,0,0}
   {0, 65, 54, 8,0}
   {2,1,2,4,2}
};
//Girilen sayı kadar karakter diziye alınır
void get_line1(void)
{
  for(i=0; i
  {
    if(kbhit())
    {
      s1[i]=getc();
      delay_cycles(2);
      printf(”%C”,s1[i]);
      delay_us(1);
    }
    else
      i -= 1;
  }
} 

//Mesajdaki karakter sayısı bulunur
void ext_isr()
{long MSD, LSD;
  int a;
  MSD=0;
  LSD=0;

do
      {
        delay_cycles(2);
        printf(”\f\r\n Karakter sayisini giriniz.”);
        MSD=getc();
        delay_cycles(2);
        delay_us(1);
      }while(!isamoung(MSD,”0123456789″));
      do
      {
        LSD=getc();
        delay_cycles(2);
        delay_us(1);
      }while(!isamoung(LSD,”0123456789″));

      s1_char_size = 10*(MSD-48) + (LSD-48);
      delay_cycles(2);
      get_line1();
      enable_interrupts(INT_RDA);
    }

//Seri Port Kesmesi
#INT_RDA
void RDA_isr(void)
{int m,n;
m=getc();
n=getc();
 if(m == ‘E’ && n == ‘L’)
 {disable_interrupts(INT_RDA);
   ext_isr();}
   delay_ms(300);
}

void main(void)
{
  int char_index; // karakter indeksi
  int col_index;  //karakterdeki kolon indeksi
  int x = 0;
  long MSD, LSD;
  int32 delaycount;
  int16 startposition;
  enable_interrupts(INT_RDA);
  enable_interrupts(global);
  delay_ms(100);
  startposition = 0;

 //
 for(i=0; i
   s1[i] = msg_default[i];

  delay_ms(100);
  do
  {

    //delaycount mesajın kayma hızını ayarlar
    //buradaki 5 mesajın ekranda 5 kez gösterir yazı sonra
    //bir karakter kayar
    delaycount=5;
    while (delaycount)
    {
      // Karakterin kaçıncı sütunu taranacak bulunur
      col_index = startposition % 6;
      // Dizideki kaçıncı karakter bulunur
      char_index = startposition / 6;

      // Bulunan karakter nosu dizi sınırları içerisinde
      // değilse başa dön
      if (char_index >= s1_char_size)
      {
        startposition = 0;
        char_index = 0;
        col_index = 0;
      }
      //Karakter değişkene alınır
      x = s1[char_index];

      // Taramaya başlanacağından ilk sütuna 1 olur
      // yani aktifleÅŸir daha sonra bu 1 bilgisi
      // shift registerde kaydırılarak diğer sütunlar
      // sırasıyla kaydırılır
      output_high(PIN_RCLK);
      output_high(PIN_SCLK);

      output_high(PIN_SER_IN);
      output_low(PIN_SCLK);
      delay_us(1);
      output_high(PIN_SCLK);
      output_low(PIN_SER_IN);

      // Burası taranacak sütun sayısını belirler.
      //Benim yaptığım devrede 48 sütun olduğundan i<48 burada yer almıştır
      //Siz kendi yaptığınız devrede kaç sütun kullanacaksanız onu yazınız.
      for (i=0;i<48;i++)
      {
        output_b(0);

        // Shift register verileri çıkışlara verilir
        output_low(PIN_RCLK);
        delay_us(1);
        output_high(PIN_RCLK);

        delay_us(1);
        // İlk yüklenen "1"  595ler arası dolaştırılır
        output_low(PIN_SCLK);
        delay_us(1);
        output_high(PIN_SCLK);
         delay_us(50);
        // Sütun indeksi 5 olursa sıradaki karaktere geçilir
       if (col_index == 5)
        {//Geçerli karakter bitti demektir
          col_index = 0; // Sütunu sıfırlar
          char_index++;  // Sonraki karakktere geçer
          if (char_index >= s1_char_size) //Dizide karakter bittiyse
            char_index = 0;               // Başa döner
          x = s1[char_index];
        }
        else
        {
          // Geçersiz karakter gelirse ekranda boşluk gösterilir
          if ( x < 32) //Ascii numara 32den küçük olanlar karakter değildir
            output_b(0);
          // Sırası gelen karakter ekrana yazdırılmak için önceden tanımlanmış
          // Karakter dizileri içinde aranır.
          // s1[]'in  ascii1[] dizisinde olup olmadığı kontrol edilir
          else if( x < 64)
             output_b(ascii1[x-32][col_index]);//İçinde ise 

          // s1[]'in  ascii2[] dizisinde olup olmadığı kontrol edilir
          else if( x < 96 )
             output_b(ascii2[x-64][col_index]);

         // s1[]'in  ascii3[] dizisinde olup olmadığı kontrol edilir
          else if( x < 128)
             output_b(ascii3[x-96][col_index]);
          //Ekranda gösterme işlemi tamamlanır

          // Karakterin sonraki sütununa geçlir.
          col_index++;
        }
        // Ekranda gösterme zamanıdır.
        // Kısa tutulursa parlaklı azalır hızlı kaydırır
        // Uzun tutulursa yazı bulanık akar
        delay_us(250);

      } // for döngüsü sonu

      // for döngüsünün kaç kere tekrarlanacağı bir kez azaltılır
      delaycount--;
    }

    //Başlangıç notası bir sütun kaydırılır
    startposition++;

  } while(1);  // do-while döngüsü sonu

}// Program sonu


Benzer Yazılar


7 Yorum “CCS C ile Kayan Yazı”

  1. musa Eyl 6, 2008

    kod hata veriyor

  2. admin Eyl 7, 2008

    program içinde yer alan tek tırnak ve çift tırnakları programın editöründe tekrar yaznınız hata kodlama farkından kaynaklanmakta

  3. espirik Eki 9, 2008

    arkadaşlar karakter tablosundan sonra gelen ilk for döngüsünde şunu ekleyerek deneyin.

    for(i=0; i<s1_char_size; i++)

    ben yaptım devre çalışıyor. sadece porttan bilgi gönderemedim henüz ona da uğraşıyorum.

  4. espirik Eki 9, 2008

    aynı durum bir yerde daha var arkadaşlar.

    for (i=0; i

    şeklinde bi satır. bunu da

    for (i=0; i<s1_char_size; i++)

    şeklinde tamamlamanız lazım. kolay gelsin

  5. admin Eki 12, 2008

    Arkadaşların da farkettiği üzere programda bazı satırlar çıkmamış
    Bunun nedeni kodların okunabilirliÄŸini artırmak için kullanılan “google pretty print” plug inidir. ÖBu plug in kodda kullanılan bazı iÅŸaret ve sembolleri php diliyle karıştırarak göstermemekte veya baÅŸka fonksiyonlar atamaktadır. Dikkatinize..

  6. Ganesh Eki 19, 2008

    i getting all the LEDs are glowing ,please help me what is the error.

  7. Ganesh Eki 20, 2008

    Where i have to adjust the speed of Scrolling

Yorum yapın