kayan yazı devresinde problem?

Başlatan AKP, 01 Temmuz 2009, 23:18:00

AKP

nette bir kayan yazı devresi buldum 80 karakter ccs ile tasarlanmış fakat yazıyı kısa yazdığımda yazının arkasından bir sürü nokta geliyor. Aşağıdaki gibi,



koddan aşağıdaki iki satırı siliyorum noktalar gelmiyor ama 80 karakterin geçmesi bekleniyor. Aşağıdaki satırları silmediğimde ise 80 karakterin geçmesi nokta şeklinde oluyor.

 //for(i=0; i<79; i++)
  //s1[i] = 46;


oysa ben 80 karakterin geçmesini beklemek istemiyorum matrislerde göstereceğim yazı bitince başa dönsün istiyorum. Proteus dosyası ve ccs kodu linktedir.

http://s1.dosya.tc/16f877.rar.html

yardımlarınızı bekliyorum Allaha emanet olun kendinize iyi bakın...

teşekkür ederim..

gallavi

codun basında eğer yoksa
#include <string.h>
satırını ekle ve for kısmınıda aşşağıdak gibi yep çalışması lazım
for(i=0; i<strlen(s1); i++)
DemirHan=gallavi;

AKP

Alıntı yapılan: "gallavi"codun basında eğer yoksa
#include <string.h>
satırını ekle ve for kısmınıda aşşağıdak gibi yep çalışması lazım
for(i=0; i<strlen(s1); i++)

sağolun hocam dediğiniz gibi yaptığımda satır taramıyor. Üç şekilde denedim kodlar;

 

  #include <string.h> 
  
   ...
   ..

  //for(i=0; i<79; i++)
  //s1[i] = 46;
  
  for(i=0; i<strlen(s1); i++)
  s1[i] = msg_default[i];


bu şekilde satır taramıyor ekranda görüntü yok.

 

  #include <string.h> 
  
   ...
   ..

   for(i=0; i<79; i++)
   s1[i] = 46;
  
   for(i=0; i<strlen(s1); i++)
   s1[i] = msg_default[i];


bu şekilde en başta çalıştığı gibi çalışıyor. Noktaların geçmesi bekleniyor.

#include <string.h> 
  
   ... 
   .. 

   for(i=0; i<strlen(s1); i++) 
   s1[i] = 46; 
  
   for(i=0; i<strlen(s1); i++) 
   s1[i] = msg_default[i];


birde bu şekilde denedim yazı kayarken noktalar görünmüyor ama noktaların geçiş süresi kadar bekleniyor. Baya uzun bir süre.

gallavi

codun tamamına bakmamıştım sizin gönderdiğiniz yerdeki code displayde yazılacak harflerin tutulduğu karakter dizisini içini nokta ile dolduruyor böylece sonradan üzerine yazılan karakterlerden sonrakiler nokta olarak görünüyor sizin istediğiniz gibi son karakterden sonra beklemeden basa dönmesi için assağıdaki kodun düzgün çalışması lazım

if (char_index >= sizeof(s1))
       char_index = 0;
ancak burda strlen yerine sizeof kullanılması bana yanlıs gibi geldi siz önce buraya sabit bir sayı girin
şu şekilde
         if (char_index >= 10){char_index = 0;}
eger 10 karakter yazıp tekrar basa donerse birde
         if (char_index >= strlen(s1)){char_index = 0;}
bu şekilde deneyin
DemirHan=gallavi;

AKP

hocam önerdiğiniz kodları denedim. Şu an ya sadece noktalar kayıyor yada 1. matrisde ilk harf kayıyor sonrası yok. Hocam sizin deneme şansınız yokmu?

gallavi

malesef şuan vaktim yok ilk fırsatta kodu detaylı inceleyip cevap yazarım
DemirHan=gallavi;

M_B

Merhaba @AKP
bendeki proteus 7.4 sp3 dosyanı acmadı.
mumkunse sonu sec ile biten dosyayı da upload edermısın.
bir deneme yapacagım da
Kolay gelsın
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

gallavi

Kod tam olarak senin istediğini yapmaya uygun değil ama biraz hile ile istediğin gibi yazının sonuna otomatikman baş kısmı eklemen mümkün yazacağın yazıyı arka arkaya 2 sefe yazıp aralarına istediğin kadar boşluk koyarak bu görüntüyü verebilirsin işin puf noktası 2. yazı tam olarak baş kısmına geldiğinde döngüyü yeniden başlatmak bunun içinde

     if (char_index >15)  //burdaki 15 sayısını yazının uzunluğuna uygun değer girmen gerek 1-2 deneme ile bulabilirsin
     {
       startposition = 0;
       char_index = 0;
       col_index = 0;
     }
     x = s1[char_index];



çalışan kodun tamamı aşşağıda


Alıntı Yap
#include <16F877.H>
#fuses HS,NOWDT,NOPUT,NOPROTECT,NOBROWNOUT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_A4, rcv=PIN_A5,RESTART_WDT, ERRORS)

#define PIN_ST_CP      PIN_C2  // RCLK ----> Pin 12 ST_CP
#define PIN_SH_CP      PIN_C3  // SRCLK ---> Pin 11 SH_CP
#define PIN_SER_IN     PIN_C5  // SER -----> Pin 14
//#define PIN_MRS       PIN_C1  // PIN 10
//#define PIN_OE        PIN_C3  // PIN 13


#use fast_io(B)
#use fast_io(C)
#use fast_io(D)

long s1_char_size=41;
char s1[79];
long i;

//***********************sutunlara bağlı hc595**********************************
#define clock      PIN_B0  // RCLK ----> Pin 12 ST_CP
#define latch      PIN_B2  // SRCLK ---> Pin 11 SH_CP
#define data       PIN_B1  // SER -----> Pin 14

void HC595_OUT_satir(unsigned char send_data)
{
  unsigned char bit_mask;

  for (bit_mask=1; bit_mask ;bit_mask <<=1)
  {
     // On an AVR you can set the bit directly and i'd use
     // "data = (send_data & bit_mask);"

     //Else use this if/else ....
     if((send_data & bit_mask))
       output_high(data);
     else
       output_low(data);

     output_high(clock);
     delay_us(1);
     output_low(clock);
  }

  output_high(latch);
  delay_us(1);
  output_low(latch);
}
//******************************************************************************
void get_line1(void)
{
 for(i=0; i<s1_char_size; i++)
 {
   if(kbhit())
   {
     s1=getc();
     delay_cycles(2);
     printf("%C",s1);
     delay_us(1);
   }
   else
     i -= 1;
 }
}

const char   msg_default[] = "Sofie & ilker   Sofie & ilker  ";

const char   ascii1[32][5] = {
  {0b00000000, //   0
   0b00000000,
   0b00000000,
   0b00000000,
   0b00000000}

  {0b00000000, //   1
   0b00000000,
   0b01011111,
   0b00000000,
   0b00000000}

  {0b00000000, //   2
   0b00000111,
   0b00000000,
   0b00000111,
   0b00000000}

  {0b00010100, //   3 ("#" işareti)
   0b01111111,
   0b00010100,
   0b01111111,
   0b00010100}

  {0b00100100, //   4 ("$" işareti)
   0b00101010,
   0b01111111,
   0b00101010,
   0b00010010}

  {0b00100111, //   5 ("%" işareti)
   0b00010101,
   0b01101011,
   0b01010100,
   0b01110010}

  {0b00110110, //   6
   0b01001001,
   0b01010110,
   0b00100000,
   0b01010000}

  {0b00000000, //   7
   0b00001011,
   0b00000111,
   0b00000000,
   0b00000000}

  {0b00000000, //   8 ( ")" işareti)
   0b00011100,
   0b00100010,
   0b01000001,
   0b00000000}

  {0b00000000, //   9 ( "(" işareti)
   0b01000001,
   0b00100010,
   0b00011100,
   0b00000000}

  {0b00101010, //   10
   0b00011100,
   0b01111111,
   0b00011100,
   0b00101010}

  {0b00001000, //   11 ( "+" işareti)
   0b00001000,
   0b00111110,
   0b00001000,
   0b00001000}

  {0b00000000, //   12 ( "'" işareti)
   0b01011000,
   0b00111000,
   0b00000000,
   0b00000000}

  {0b00001000, //   13 ("-" işareti)
   0b00001000,
   0b00001000,
   0b00001000,
   0b00001000}

  {0b00000000, //   14
   0b01100000,
   0b01100000,
   0b00000000,
   0b00000000}

  {0b00100000, //   15 ("/" işareti)
   0b00010000,
   0b00001000,
   0b00000100,
   0b00000010}

  {0b00111110, //   16 ( 0 rakamı )
   0b01010001,
   0b01001001,
   0b01000101,
   0b00111110}

  {0b00000000, //   17 ( 1 rakamı)
   0b01000010,
   0b01111111,
   0b01000000,
   0b00000000}

  {0b01110010, //   18 ( 2 rakamı)
   0b01001001,
   0b01001001,
   0b01001001,
   0b01000110}

  {0b00100010, //   19 ( 3 rakamı)
   0b01000001,
   0b01001001,
   0b01001001,
   0b00110110}

  {0b00011000, //   20 ( 4 rakamı)
   0b00010100,
   0b00010010,
   0b01111111,
   0b00010000}

  {0b00100111, //   21 ( 5 rakamı)
   0b01000101,
   0b01000101,
   0b01000101,
   0b00111001}

  {0b00111100, //   22 ( 6 rakamı)
   0b01001010,
   0b01001001,
   0b01001001,
   0b00110000}
  {1, 113, 9, 5, 3}           //   23
  {54, 73, 73, 73, 54}        //   24
  {6, 73, 73, 41, 30}         //   25
  {0, 54,54,0,0}         // {0, 54, 54,0,0,0}
  //   26
  {0, 91, 59, 0,0}         // {0, 91, 59,0,0,0}     // 27
  {8, 20, 34, 65,0}           //   28
  {20, 20, 20, 20, 20}        //   29
  {65, 34, 20, 8,0}           //   30
  {2, 1, 81, 9, 6}            //   31
  };

const char   ascii2[32][5] = {
{50, 73, 121, 65, 62}          //      0
{124, 18, 17, 18, 124}         //      1   A
{65, 127, 73, 73, 54}          //      2   B
{62, 65, 65, 65, 34}           //      3   C
{65, 127, 65, 65, 62}          //      4   D
{127, 73, 73, 65, 65 }         //      5   E
{127, 9, 9, 1, 1}              //      6
{62, 65, 73, 73, 58}           //      7
{127, 8, 8, 8, 127}            //      8
{0, 65, 127, 65, 0}       // {0, 65, 127, 65,0,0}
       //      9
{32, 64, 65, 63, 1}            //      10
{127, 8, 20, 34, 65}           //      11
{127, 64, 64, 64, 64}          //      12
{127, 2, 12, 2, 127}           //      13
{127, 2,  4, 8, 127}           //      14
{62, 65, 65, 65, 62}           //      15
{127, 9, 9, 9, 6}              //      16
{62, 65, 81, 33, 94}           //      17
{127, 9, 25, 41, 70}           //      18
{38, 73, 73, 73, 50}           //      19
{1,1,127, 1, 1}                //      20
{63, 64, 64, 64, 63}           //      21
{7, 24, 96, 24, 7}             //      22
{127, 32, 24, 32, 127}         //      23
{99, 20, 8, 20, 99}            //      24
{3, 4, 120, 4, 3}              //      25
{97, 81, 73, 69, 67}           //      26
{0, 127, 65, 65,0}          // {0, 127, 65, 65,0,0}
         //      27
{2, 4, 8, 16, 32}              //      28
{0, 65, 65, 127,0}          // {0, 65, 65, 127,0,0}
         //      29
{4, 2, 1, 2, 4}                //      30
{64, 64, 64, 64, 64}           //      31
};

const char   ascii3[32][5] = {    // 0 -- 30 == 31 elements
  {0, 0, 7, 11,0}        // {0, 7, 11,0,0,0}
 //   0
  {32, 84, 84, 84, 56}     //   1
  {127, 40, 68, 68, 56}    //   2
  {56, 68, 68, 68,0}     //   3
  {56, 68, 68, 40, 127}     //   4
  {56, 84, 84, 84, 24}     //   5
  {8, 126, 9, 9, 2}     //   6
  {8, 84, 84, 84, 60}     //   7
  {127, 8, 4, 4, 120}     //   8
  {0, 68, 125, 64,0}      // {0, 68, 125, 64,0,0}
//   9
  {32, 64, 68, 61,0}     //   10
  {127, 16, 40, 68,0}     //   11
  {0, 65, 127, 64, 0}      // {0, 65, 127, 64,0,0}
//   12
  {124, 4, 120, 4, 120}     //   13
  {124, 8, 4, 4, 120}     //   14
  {56, 68, 68, 68, 56}     //   15
  {124, 20, 20, 20, 8}     //   16
  {8, 20, 20, 20, 124}     //   17
  {124, 8, 4, 4, 8}     //   18
  {72, 84, 84, 84, 36}     //   19
  {4, 63, 68, 68,0}     //   20
  {60, 64, 64, 32, 124}     //   21
  {28, 32, 64, 32, 28}     //   22
  {60, 64, 48, 64, 60}     //   23
  {68, 40, 16, 40, 68}     //   24
  {12,80, 80, 80, 60}     //   25
  {68, 100, 84, 76, 68}     //   26
  {0, 8, 54, 65,0}           // {0, 8, 54, 65,0,0}
//   27
  {0,0,119,0,0}             // {0, 119,0,0,0,0}     // 28
  {0, 65, 54, 8,0}           // {0, 65, 54, 8,0,0}
//   29
  {2,1,2,4,2}     //   30

  {0b01111101, // ö harfi
   0b10000010,
   0b10000010,
   0b10000010,
   0b01111101,
  }
};


void main(void)
{
 int char_index;
 int col_index;
 int x = 0;
 long MSD, LSD;
 int delaycount;
 int16 startposition;

 set_tris_b(0);
 set_tris_c(0x40);
 set_tris_d(0);
 HC595_OUT_satir(0);
 output_c(0);
 startposition = 0;

 //for(i=0; i<79; i++)
 //s1 = 46;

   for(i=0; i<sizeof(msg_default); i++)
   s1 = msg_default; i=0;

 delay_ms(100);
 do
 {
   if(!input(PIN_E1)) //BUTONA BASILDI MI?
   {
     do
     {
       delay_cycles(2);
       printf("\f\r\n");
       printf("\f\r\n Kac karakter.(0--99):");
       MSD=getc();
       delay_cycles(2);
       printf("%C",MSD);
       delay_us(1);
     }while(!isamoung(MSD,"0123456789"));
     do
     {
       LSD=getc();
       delay_cycles(2);
       printf("%C",LSD);
       delay_us(1);
     }while(!isamoung(LSD,"0123456789"));

     s1_char_size = 10*(MSD-48) + (LSD-48);
     delay_cycles(2);
     printf("\r\n\n  %lu karakter girin: ",s1_char_size);
     get_line1();
   }
   delaycount=2; //-------> tarama hızı burdan ayarlanıyo..
   while (delaycount)
   {
     col_index = startposition % 6;
     char_index = startposition / 6;
     if (char_index >15)
     {
       startposition = 0;
       char_index = 0;
       col_index = 0;
     }
     x = s1[char_index];

// 74HC595 ler suruluyor
     output_high(PIN_SH_CP);
     output_high(PIN_ST_CP);
     output_high(PIN_SER_IN);
     output_low(PIN_SH_CP);
     delay_us(1);
     output_high(PIN_SH_CP);
     output_low(PIN_SER_IN);

     for (i=0;i<80;i++) // 80 tane kolon kullanıyoruz
     {
       //port_b=0;
       output_low(PIN_ST_CP);
       delay_us(200);
       output_high(PIN_ST_CP);
       delay_us(1);
       output_low(PIN_SH_CP);
       delay_us(1);
       output_high(PIN_SH_CP);

       if (col_index == 5)
       {
         col_index = 0;
         char_index++;
         if (char_index >= sizeof(s1))
           char_index = 0;
         x = s1[char_index];
       }
       else
       {
         if ( x < 32)
           HC595_OUT_satir(0);
         else if( x < 64)
           HC595_OUT_satir(ascii1[x-32][col_index]);
         else if( x < 96 )
           HC595_OUT_satir(ascii2[x-64][col_index]);
         else if( x < 128)
           HC595_OUT_satir(ascii3[x-96][col_index]);

         col_index++;
       }
       delay_us(120);
       HC595_OUT_satir(0);
     }
     delaycount--;
   }
   startposition++;
 } while(true);
}
DemirHan=gallavi;

aliveli

Sanırım kodu alınca default mesajı değiştirmiş fakat diğer değiştirmen gereken yerleri aynen bırakmışsın.
Kodun başlarında yer alan long s1_char_size=41;  değeri senin default mesajındaki değere eşit olmalı. Eşit olmazsa kalan boşlukları proteus kendi doldurur. Bu nedenle aşağıdaki değişiklikleri yapman gerekli.

long s1_char_size=10;

const char   msg_default[10] = "123456789"; // dizi elemanlarını belirle

AKP

gallavi ve aliveli sizlere teşekkür borçluyum ufakda olsa sayenizde birşeyler öğrendik.

M_B, dosyayı ne yaptıysam export edemedim. Bir arkadaş export ederse seviniriz. Fakat 7.5 sp3 yüklersen sende açabilirsin.

Allah hemizin yolunu açık etsin. Allaha emanet olun.