PIC16F877 ve 5x7 matrix LED'de kayan harf nasıl yazılır?

oflibabalaz

Centipat
Katılım
25 Haziran 2022
Mesajlar
40
Daha fazla  
Cinsiyet
Erkek
Kod:
#include <16f877.h>
#use delay(clock=4000000)
#fuses XT,NOWDT,NOPUT,NOLVP,NOCPD,NOPROTECT,NODEBUG,NOBROWNOUT,NOWRT

#use fast_io(b)
#use fast_io(c)


int tekrar,i;

int satir[]={0x00,0x3F,0x3F,0x3F,0x3F};
int sutun[]={0x01,0x02,0x04,0x08,0x10};


void main()
{
   setup_psp(PSP_DISABLED);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_CCP1(CCP_OFF);
   setup_CCP2(CCP_OFF);
 
   set_tris_b(0x00);
   set_tris_c(0x00);
 
   while(true)
   {
   for(tekrar=0;tekrar<10;tekrar++)
   {
      for(i=0;i<5;i++)
      {
         output_c(sutun[i]);
         output_b(satir[i]);
         delay_ms(1);
      }
 
 
   }
   }

}

Bu kod şuan L harfini gösteriyor matrix led'de. Ben buna 16 tane harf eklemem lazım. YouTube'da aradım bulamadım, hepsi arduino ile yapıyor.
 
Son düzenleyen: Moderatör:
Kod:
#include <16f877.h>
#use delay(clock=4000000)
#fuses XT,NOWDT,NOPUT,NOLVP,NOCPD,NOPROTECT,NODEBUG,NOBROWNOUT,NOWRT

#use fast_io(b)
#use fast_io(c)


int tekrar,i;

int satir[]={0x00,0x3F,0x3F,0x3F,0x3F};
int sutun[]={0x01,0x02,0x04,0x08,0x10};


void main()
{
   setup_psp(PSP_DISABLED);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_CCP1(CCP_OFF);
   setup_CCP2(CCP_OFF);
 
   set_tris_b(0x00);
   set_tris_c(0x00);
 
   while(true)
   {
   for(tekrar=0;tekrar<10;tekrar++)
   {
      for(i=0;i<5;i++)
      {
         output_c(sutun[i]);
         output_b(satir[i]);
         delay_ms(1);
      }
 
 
   }
   }

}

Bu kod şuan L harfini gösteriyor matrix led'de. Ben buna 16 tane harf eklemem lazım. YouTube'da aradım bulamadım, hepsi arduino ile yapıyor.
Biraz daha açıklayabilir misin ?

Kod:
#include <16f877.h>
#use delay(clock=4000000)
#fuses XT,NOWDT,NOPUT,NOLVP,NOCPD,NOPROTECT,NODEBUG,NOBROWNOUT,NOWRT

#use fast_io(b)
#use fast_io(c)


int tekrar,i;

int satir[]={0x00,0x3F,0x3F,0x3F,0x3F};
int sutun[]={0x01,0x02,0x04,0x08,0x10};


void main()
{
   setup_psp(PSP_DISABLED);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_CCP1(CCP_OFF);
   setup_CCP2(CCP_OFF);
 
   set_tris_b(0x00);
   set_tris_c(0x00);
 
   while(true)
   {
   for(tekrar=0;tekrar<10;tekrar++)
   {
      for(i=0;i<5;i++)
      {
         output_c(sutun[i]);
         output_b(satir[i]);
         delay_ms(1);
      }
 
 
   }
   }

}

Bu kod şuan L harfini gösteriyor matrix led'de. Ben buna 16 tane harf eklemem lazım. YouTube'da aradım bulamadım, hepsi arduino ile yapıyor.
Eklemeniz gerekeniz 16 harf nereden nereye kadar olması lazım L'e kadar 16 mı L'den sonra 16 mı ona göre yazayım kodu.
 
Biraz daha açıklayabilir misin?

Eklemeniz gerekeniz 16 harf nereden nereye kadar olması lazım L'e kadar 16 mı L'den sonra 16 mı ona göre yazayım kodu.

Hocam benim adımı ve soyadımı matrix LED'e yazmam gerekiyor YALCIN HARBUT olarak youtubda anlatan bir adamı dinledim sadece bir harf yazdırabildim bu kodda onun sadece ben harf eklemey çalıştım.
 
Hocam benim adımı ve soyadımı matrix LED'e yazmam gerekiyor YALCIN HARBUT olarak youtubda anlatan bir adamı dinledim sadece bir harf yazdırabildim bu kodda onun sadece ben harf eklemey çalıştım.
C++:
int Y[] = {0x41, 0x22, 0x14, 0x08, 0x08};
int A[] = {0x7E, 0x11, 0x11, 0x11, 0x7E};
int L[] = {0x7F, 0x40, 0x40, 0x40, 0x40};
int C[] = {0x3E, 0x41, 0x41, 0x41, 0x22};
int I[] = {0x00, 0x41, 0x7F, 0x41, 0x00};
int N[] = {0x7F, 0x02, 0x04, 0x08, 0x7F};


int H[] = {0x7F, 0x08, 0x08, 0x08, 0x7F};
int R[] = {0x7F, 0x09, 0x09, 0x09, 0x76};
int B[] = {0x7F, 0x49, 0x49, 0x49, 0x36};
int U[] = {0x3E, 0x40, 0x40, 0x40, 0x3E};
int T[] = {0x01, 0x01, 0x7F, 0x01, 0x01};


int* isimbulamadimbirseyyazarsin[] = {Y, A, L, C, I, N, H, A, R, B, U, T};


for(int harf=0; harf<12; harf++)
{
    for(tekrar=0;tekrar<10;tekrar++)
    {
        for(i=0;i<5;i++)
        {
            output_c(sutun[i]);
            output_b(isimbulamadimbirseyyazarsin[harf][i]);
            delay_ms(1);
        }
    }
}

C++:
int Y[] = {0x41, 0x22, 0x14, 0x08, 0x08};
int A[] = {0x7E, 0x11, 0x11, 0x11, 0x7E};
int L[] = {0x7F, 0x40, 0x40, 0x40, 0x40};
int C[] = {0x3E, 0x41, 0x41, 0x41, 0x22};
int I[] = {0x00, 0x41, 0x7F, 0x41, 0x00};
int N[] = {0x7F, 0x02, 0x04, 0x08, 0x7F};


int H[] = {0x7F, 0x08, 0x08, 0x08, 0x7F};
int R[] = {0x7F, 0x09, 0x09, 0x09, 0x76};
int B[] = {0x7F, 0x49, 0x49, 0x49, 0x36};
int U[] = {0x3E, 0x40, 0x40, 0x40, 0x3E};
int T[] = {0x01, 0x01, 0x7F, 0x01, 0x01};


int* isimbulamadimbirseyyazarsin[] = {Y, A, L, C, I, N, H, A, R, B, U, T};


for(int harf=0; harf<12; harf++)
{
    for(tekrar=0;tekrar<10;tekrar++)
    {
        for(i=0;i<5;i++)
        {
            output_c(sutun[i]);
            output_b(isimbulamadimbirseyyazarsin[harf][i]);
            delay_ms(1);
        }
    }
}
(5x5 oldu ancak bir deneyin)
 
C++:
int Y[] = {0x41, 0x22, 0x14, 0x08, 0x08};
int A[] = {0x7E, 0x11, 0x11, 0x11, 0x7E};
int L[] = {0x7F, 0x40, 0x40, 0x40, 0x40};
int C[] = {0x3E, 0x41, 0x41, 0x41, 0x22};
int I[] = {0x00, 0x41, 0x7F, 0x41, 0x00};
int N[] = {0x7F, 0x02, 0x04, 0x08, 0x7F};


int H[] = {0x7F, 0x08, 0x08, 0x08, 0x7F};
int R[] = {0x7F, 0x09, 0x09, 0x09, 0x76};
int B[] = {0x7F, 0x49, 0x49, 0x49, 0x36};
int U[] = {0x3E, 0x40, 0x40, 0x40, 0x3E};
int T[] = {0x01, 0x01, 0x7F, 0x01, 0x01};


int* isimbulamadimbirseyyazarsin[] = {Y, A, L, C, I, N, H, A, R, B, U, T};


for(int harf=0; harf<12; harf++)
{
    for(tekrar=0;tekrar<10;tekrar++)
    {
        for(i=0;i<5;i++)
        {
            output_c(sutun[i]);
            output_b(isimbulamadimbirseyyazarsin[harf][i]);
            delay_ms(1);
        }
    }
}


(5x5 oldu ancak bir deneyin)
CSS:
#include <16F877.h>
 
#FUSES NOWDT              //Watch Dog Timer Kullanma
#FUSES XT                 //Kristal  Osilatör ile CLKOUT
#FUSES NOPUT              //Power Up Timer Kullanma
#FUSES NOPROTECT          //Rom'a Yazılan Veriler Okunabilir
#FUSES NOBROWNOUT         //Brownout Reset Kullanma
#FUSES NOLVP              //Düşük Gerilimler ile Programlamayı Kapt
#FUSES NOCPD              //Data EEPROM Korumasız
#FUSES NOWRT              //Program Belleği Yazmaya Açık
#FUSES NODEBUG            //ICD için Hata Ayıklama Modu Kapalı
 
#use delay(clock=4000000)
 
#use fast_io(b)
#use fast_io(c) 
 
// Matrise gelecek karakterler
int   Y[]={0x7C,0x7B,0x07,0x7B,0x7C},
      A[]={0x01,0x76,0x76,0x76,0x01},
      L[]={0x00,0x3F,0x3F,0x3F,0x3F},
      C[]={0x40,0x5E,0x1E,0x5E,0x5E},
      I[]={0x7F,0x3E,0x00,0x3E,0x7F},
      N[]={0x00,0x7B,0x77,0x6F,0x00},
      H[]={0x00,0x77,0x77,0x77,0x00},
      Q[]={0x01,0x76,0x76,0x76,0x01},
      R[]={0x00,0x76,0x76,0x76,0x09},
      B[]={0x00,0x36,0x36,0x36,0x49},
      U[]={0x40,0x3F,0x3F,0x3F,0x40},
      T[]={0x7E,0x7E,0x00,0x7E,0x7E},
      O[]={0x41,0x3E,0x3E,0x3E,0x41},
      G[]={0x41,0x3E,0x36,0x36,0x45},
      J[]={0x00,0x3F,0x3F,0x3F,0x3F},
      M[]={0x40,0x3F,0x3F,0x3F,0x40},
      P[]={0x6F,0x5B,0x5F,0x5B,0x6F};
/*Hangi sütnun seçileceği fonksiyon*/
int sutunsec(int s)
{
   switch(s)
   {
      case 0: return(0x10);break;
      case 1: return(0x08);break;
      case 2: return(0x04);break;
      case 3: return(0x02);break;
      case 4: return(0x01);break;
   }
}
/* Matrise karakter gönderme fonkisyonu*/
void matris_karakter_gonder(char harf[],int tekrar)
{
   int i,j,k;
   for(i=1;i<tekrar;i++)
   {
      for(k=0;k<10;k++)
      {
         for(j=0;j<16;j++)
         {
            output_c(sutunsec(j));
            output_b(harf[j]);
            delay_ms(1);   
         }
      }
   }
 
}
/* Ana fonksiyon*/ 
void main()
{
   setup_psp(PSP_DISABLED); // Paralel Slave Prot devre dışı
   setup_adc_ports(NO_ANALOGS); // Analog Dijital Converter  Portları devre dışı
   setup_adc(ADC_OFF); //Analog Dijital Converter devre dışı
   setup_timer_1(T1_DISABLED);  // Timer 1 devre dışı
   setup_timer_2(T2_DISABLED,0,1); // Timer 2 devre dışı
   setup_CCP1(CCP_OFF); // Capture Compare PWM devre dışı
   setup_CCP2(CCP_OFF); // Capture Compare PWM devre dışı
 
   set_tris_b(0x00); // B portu çıkış olarak yönlendirildi
   set_tris_c(0x00); // C portu çıkış olarak yönlendirildi
 
   while(1)
   {
   matris_karakter_gonder(Y,5);     
   matris_karakter_gonder(A,5);     
   matris_karakter_gonder(L,5);     
   matris_karakter_gonder(C,5);     
   matris_karakter_gonder(I,5);     
   matris_karakter_gonder(N,5);     
   matris_karakter_gonder(H,5);     
   matris_karakter_gonder(Q,5);
   matris_karakter_gonder(R,5);
   matris_karakter_gonder(B,5);
   matris_karakter_gonder(U,5);
   matris_karakter_gonder(T,5);
   matris_karakter_gonder(O,5);
   matris_karakter_gonder(G,5);
   matris_karakter_gonder(J,5);
   matris_karakter_gonder(M,5);
   matris_karakter_gonder(P,5);
   }
}
bu kod senin yazdığına +nete bakarak yaptım harfler tek tek geliyo şimdi sadece kayarak sırayla gelmeleri lazım nasıl olur
 
CSS:
#include <16F877.h>
 
#FUSES NOWDT              //Watch Dog Timer Kullanma
#FUSES XT                 //Kristal  Osilatör ile CLKOUT
#FUSES NOPUT              //Power Up Timer Kullanma
#FUSES NOPROTECT          //Rom'a Yazılan Veriler Okunabilir
#FUSES NOBROWNOUT         //Brownout Reset Kullanma
#FUSES NOLVP              //Düşük Gerilimler ile Programlamayı Kapt
#FUSES NOCPD              //Data EEPROM Korumasız
#FUSES NOWRT              //Program Belleği Yazmaya Açık
#FUSES NODEBUG            //ICD için Hata Ayıklama Modu Kapalı
 
#use delay(clock=4000000)
 
#use fast_io(b)
#use fast_io(c)
 
// Matrise gelecek karakterler
int   Y[]={0x7C,0x7B,0x07,0x7B,0x7C},
      A[]={0x01,0x76,0x76,0x76,0x01},
      L[]={0x00,0x3F,0x3F,0x3F,0x3F},
      C[]={0x40,0x5E,0x1E,0x5E,0x5E},
      I[]={0x7F,0x3E,0x00,0x3E,0x7F},
      N[]={0x00,0x7B,0x77,0x6F,0x00},
      H[]={0x00,0x77,0x77,0x77,0x00},
      Q[]={0x01,0x76,0x76,0x76,0x01},
      R[]={0x00,0x76,0x76,0x76,0x09},
      B[]={0x00,0x36,0x36,0x36,0x49},
      U[]={0x40,0x3F,0x3F,0x3F,0x40},
      T[]={0x7E,0x7E,0x00,0x7E,0x7E},
      O[]={0x41,0x3E,0x3E,0x3E,0x41},
      G[]={0x41,0x3E,0x36,0x36,0x45},
      J[]={0x00,0x3F,0x3F,0x3F,0x3F},
      M[]={0x40,0x3F,0x3F,0x3F,0x40},
      P[]={0x6F,0x5B,0x5F,0x5B,0x6F};
/*Hangi sütnun seçileceği fonksiyon*/
int sutunsec(int s)
{
   switch(s)
   {
      case 0: return(0x10);break;
      case 1: return(0x08);break;
      case 2: return(0x04);break;
      case 3: return(0x02);break;
      case 4: return(0x01);break;
   }
}
/* Matrise karakter gönderme fonkisyonu*/
void matris_karakter_gonder(char harf[],int tekrar)
{
   int i,j,k;
   for(i=1;i<tekrar;i++)
   {
      for(k=0;k<10;k++)
      {
         for(j=0;j<16;j++)
         {
            output_c(sutunsec(j));
            output_b(harf[j]);
            delay_ms(1);  
         }
      }
   }
 
}
/* Ana fonksiyon*/
void main()
{
   setup_psp(PSP_DISABLED); // Paralel Slave Prot devre dışı
   setup_adc_ports(NO_ANALOGS); // Analog Dijital Converter  Portları devre dışı
   setup_adc(ADC_OFF); //Analog Dijital Converter devre dışı
   setup_timer_1(T1_DISABLED);  // Timer 1 devre dışı
   setup_timer_2(T2_DISABLED,0,1); // Timer 2 devre dışı
   setup_CCP1(CCP_OFF); // Capture Compare PWM devre dışı
   setup_CCP2(CCP_OFF); // Capture Compare PWM devre dışı
 
   set_tris_b(0x00); // B portu çıkış olarak yönlendirildi
   set_tris_c(0x00); // C portu çıkış olarak yönlendirildi
 
   while(1)
   {
   matris_karakter_gonder(Y,5);    
   matris_karakter_gonder(A,5);    
   matris_karakter_gonder(L,5);    
   matris_karakter_gonder(C,5);    
   matris_karakter_gonder(I,5);    
   matris_karakter_gonder(N,5);    
   matris_karakter_gonder(H,5);    
   matris_karakter_gonder(Q,5);
   matris_karakter_gonder(R,5);
   matris_karakter_gonder(B,5);
   matris_karakter_gonder(U,5);
   matris_karakter_gonder(T,5);
   matris_karakter_gonder(O,5);
   matris_karakter_gonder(G,5);
   matris_karakter_gonder(J,5);
   matris_karakter_gonder(M,5);
   matris_karakter_gonder(P,5);
   }
}
bu kod senin yazdığına +nete bakarak yaptım harfler tek tek geliyo şimdi sadece kayarak sırayla gelmeleri lazım nasıl olur
CHATGPT gibi duruyor ama şunu deneyebilirsin:
C++:
void matris_karakter_gonder(char harf1[], char harf2[], int tekrar)
{
   int i,j,k;
   for(i=1;i<tekrar;i++)
   {
      for(k=0;k<10;k++)
      {
         for(j=0;j<16;j++)
         {
            output_c(sutunsec(j));
            if (j < 8) {
                output_b(harf1[j+8]);
            } else {
                output_b(harf2[j-8]);
            }
            delay_ms(1);   
         }
      }
   }
}
garip değişken isim seçimleriniz var ama birşey demiyeceğim.YALCINHARBUTOGJMP gibi birşey olacak büyük ihtimal ama bir deneyin
 
CHATGPT gibi duruyor ama şunu deneyebilirsin:
C++:
void matris_karakter_gonder(char harf1[], char harf2[], int tekrar)
{
   int i,j,k;
   for(i=1;i<tekrar;i++)
   {
      for(k=0;k<10;k++)
      {
         for(j=0;j<16;j++)
         {
            output_c(sutunsec(j));
            if (j < 8) {
                output_b(harf1[j+8]);
            } else {
                output_b(harf2[j-8]);
            }
            delay_ms(1);  
         }
      }
   }
}
garip değişken isim seçimleriniz var ama birşey demiyeceğim.YALCINHARBUTOGJMP gibi birşey olacak büyük ihtimal ama bir deneyin
j aslında L m de U iki defa kullanınca harfi hata veriyo hocam

CHATGPT gibi duruyor ama şunu deneyebilirsin:
C++:
void matris_karakter_gonder(char harf1[], char harf2[], int tekrar)
{
   int i,j,k;
   for(i=1;i<tekrar;i++)
   {
      for(k=0;k<10;k++)
      {
         for(j=0;j<16;j++)
         {
            output_c(sutunsec(j));
            if (j < 8) {
                output_b(harf1[j+8]);
            } else {
                output_b(harf2[j-8]);
            }
            delay_ms(1);  
         }
      }
   }
}
garip değişken isim seçimleriniz var ama birşey demiyeceğim.YALCINHARBUTOGJMP gibi birşey olacak büyük ihtimal ama bir deneyin
harf1 ,harf2 ye undefined identifier hatası verdi
 
Son düzenleme:
j aslında L m de U iki defa kullanınca harfi hata veriyo hocam
C++:
void matris_karakter_gonder(char harf1[], char harf2[], char harf3[], char harf4[], int tekrar) {
    int i,j,k;
    for(i=1;i<tekrar;i++) {
        for(k=0;k<10;k++) {
            for(j=0;j<16;j++) {
                output_c(sutunsec(j));
                if (j < 8) {
                    output_b(harf1[j+8]);
                } else if (j < 16) {
                    output_b(harf2[j-8]);
                } else if (j < 24) {
                    output_b(harf3[j-16]);
                } else {
                    output_b(harf4[j-24]);
                }
                delay_ms(1);
            }
        }
    }
}
şöyle garip birşey yaptım ama olur mu bilemiyorum.

j aslında L m de U iki defa kullanınca harfi hata veriyo hocam


harf1 ,harf2 ye undefined identifier hatası verdi
C++:
char harf1[] = {0x7C,0x7B,0x07,0x7B,0x7C};
char harf2[] = {0x01,0x76,0x76,0x76,0x01};
matris_karakter_gonder(harf1, harf2, 5);
şu şekil yaparsan olur gibi hocam.
 
Son düzenleme:

Yeni konular

Geri
Yukarı