Thông báo

Collapse
No announcement yet.

Xin giúp code LED MATRIX 8x32 dùng HC595

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Xin giúp code LED MATRIX 8x32 dùng HC595

    e đang tìm hiểu 1 cái code chạy led matrix 8x32 hi vọng sẽ làm được 1 cái chạy chữ cho thích... làm kịp thì tết treo lên cửa nhà cho bố mẹ mừng.
    nhưng mà đọc code e không hiểu 1 số lệnh, mong được các pro chỉ giúp
    đây là code:
    Code:
    //==============================================================================
    // Ten chuong trinh : Mach Ledmatrix Run Text
    // Nguoi thuc hien : demon52
    // Ngay thuc hien : 24/10/2012
    // Phien ban : Demo
    // Mo ta phan cung : Dung PIC16F877A - thach anh 20MHz
    // : 74HC595
    // : PortB dung dieu khien!
    //------------------------------------------------------------------------------
    // Notes: 
    // : dung che do Power On Reset
    //==============================================================================
    #include <16F877A.h>
    #include <def_877a.h>
    #device *=16 adc=10
    #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,NOLVP, NOCPD, NOWRT
    #use delay(clock=20000000)
    #include <C:\Users\OnePiece\Pictures\595\string.h>
    #include "font.c"
    
    #define ic595_sclk1 PIN_B0
    #define ic595_data1  PIN_B1
    #define ic595_lclk1 PIN_B2
    #define ic595_sclk2 PIN_B3
    #define ic595_data2  PIN_B4
    #define ic595_lclk2 PIN_B5
    
    unsigned int8 next=0,lengh_STR;
    unsigned char count=0;
    unsigned char welcome[]=" http://codientu.org  ";
    unsigned char *str;
    #int_timer0
    void ngat_time0()
       {
       set_timer0(8);
       count++;
       if(count==25){           
          count=0;
          next++;
          if(next>=lengh_STR)next=0;      
          }
       }
       
    void Ic74595_Write(char data,char ic,char bits) 
       {
       signed char count;                   
       if(ic==1)                    
          {
          for(count=bits-1;count>=0;count--)
             {
             if((( data>>count) & 0x01) ==1) 
                output_high(ic595_data1);
             else 
                output_low(ic595_data1);
             output_high(ic595_sclk1);
             output_low(ic595_sclk1);
             }
          output_high(ic595_lclk1); 
          output_low(ic595_lclk1);
          }
       if(ic==2)                    
          {
          for(count=bits-1;count>=0;count--)
             {
             if((( data>>count) & 0x01) ==1) 
                output_high(ic595_data2);
             else 
                output_low(ic595_data2);
             output_high(ic595_sclk2);  
             output_low(ic595_sclk2);
             }
          output_high(ic595_lclk2);
          output_low(ic595_lclk2);
          }
       } 
    
    void Run_str_RtoL()
       {
       lengh_str=strlen(str)*6;
       unsigned char j,temp_font;
       Ic74595_Write(1,1,1);       
       for(j=next;j<32+next;j++){
          Temp_font=font[str[(j%lengh_STR)/With_of_font] -32][j%With_of_font];
          Ic74595_Write(temp_font,2,8); 
          //delay_us(500);  
          Ic74595_Write(0,1,1);  
          }
       }
     
    void main (){ 
       TRISB=0x00;
       enable_interrupts(int_timer0);
       setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256); 
       enable_interrupts(global);
       set_timer0(8);
       str=welcome;
        while(true){    
                Run_str_RtoL();
                }
    }
    đây là đoạn mà e không hiểu:
    Code:
    void Run_str_RtoL()
       {
       lengh_str=strlen(str)*6;
       unsigned char j,temp_font;
       Ic74595_Write(1,1,1);       
       for(j=next;j<32+next;j++){
          Temp_font=font[str[(j%lengh_STR)/With_of_font] -32][j%With_of_font];
          Ic74595_Write(temp_font,2,8); 
          //delay_us(500);  
          Ic74595_Write(0,1,1);  
          }
       }
    đại ca/đại tỷ nào hảo tâm thì vào chỉ giúp e nhé.
    còn 1 chuyện nữa e xin được chỉ giáo luôn, code này e làm mạch trên bo test thấy chạy đc đúng như mô phỏng, kể ra thì không cần hiểu code cũng có thể làm mạch rồi cho chạy chữ như ý mình rồi, nhưng mà CCS của e build code này lại bị lỗi nó chỉ vào file string.h, e không biết xử lý thế nào, lỗi là: "C\....\string.h" Line 191(37,38): Expecting an identifier
    và nhiều dòng lỗi ở dưới nữa. xin mọi ngưởi chỉ giúp e có phải tại CCS của e lỗi không ạ!
    e xin cảm ơn nhiều!

  • #2
    hiện tại thì e đã chạy đc cái code này rồi
    nhưng mà có 1 lỗi tai hại mà e không giải quyết đc, đó là khi chạy chữ thì tất cả các cột đều bị nhân đôi (x2) ... ...
    khiến chữ cứ díu dít vào nhau không nhìn ra gì cả, đây là hình minh họa:
    nếu bình thường thì phải thế này:
    Click image for larger version

Name:	truoc.PNG
Views:	1
Size:	8.8 KB
ID:	1373178
    thực tế khi chạy lại thế này:
    Click image for larger version

Name:	sau.PNG
Views:	1
Size:	8.9 KB
ID:	1373179
    nhưng nếu là mấy chữ này thì còn nhìn đc chứ phải chữ m với n với w là không thấy j luôn:
    chuẩn là thế này:
    Click image for larger version

Name:	1.PNG
Views:	1
Size:	7.9 KB
ID:	1373180
    thế mà nó lại thế này:
    Click image for larger version

Name:	2.PNG
Views:	1
Size:	7.7 KB
ID:	1373181
    Thật là đau buồn quá, xin đại hiệp nào ra tay trượng nghĩa giúp e vụ này với...

    Comment


    • #3
      cái lỗi này là do bạn khi chuyển sang quét cột (hàng) bạn chưa tắt cột (hàng) trức đó.
      bạn chỉ cần tắt cột (hàng) trước đó là được.

      Comment


      • #4
        Nguyên văn bởi voiviqua Xem bài viết
        cái lỗi này là do bạn khi chuyển sang quét cột (hàng) bạn chưa tắt cột (hàng) trức đó.
        bạn chỉ cần tắt cột (hàng) trước đó là được.
        cảm ơn bạn, nói có lý quá, chỉnh lại cái chạy ngon ngay.
        cảm ơn nhiều nhé!

        Comment


        • #5
          mà bạn ngocnamdhgt2 cho mình xin code và phan cứng của bạn được không.mình cũng đang làm 8x32 mà chưa được(mình quét hàng nhưng không biết cách làm chữ dịch từ phải qua trái lên muốn chuyển sang quét cột xem sao).

          Comment


          • #6
            Nguyên văn bởi ngocnamdhgt2 Xem bài viết
            e đang tìm hiểu 1 cái code chạy led matrix 8x32 hi vọng sẽ làm được 1 cái chạy chữ cho thích... làm kịp thì tết treo lên cửa nhà cho bố mẹ mừng.
            nhưng mà đọc code e không hiểu 1 số lệnh, mong được các pro chỉ giúp
            đây là code:
            Code:
            //==============================================================================
            // Ten chuong trinh : Mach Ledmatrix Run Text
            // Nguoi thuc hien : demon52
            // Ngay thuc hien : 24/10/2012
            // Phien ban : Demo
            // Mo ta phan cung : Dung PIC16F877A - thach anh 20MHz
            // : 74HC595
            // : PortB dung dieu khien!
            //------------------------------------------------------------------------------
            // Notes: 
            // : dung che do Power On Reset
            //==============================================================================
            #include <16F877A.h>
            #include <def_877a.h>
            #device *=16 adc=10
            #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,NOLVP, NOCPD, NOWRT
            #use delay(clock=20000000)
            #include <C:\Users\OnePiece\Pictures\595\string.h>
            #include "font.c"
            
            #define ic595_sclk1 PIN_B0
            #define ic595_data1  PIN_B1
            #define ic595_lclk1 PIN_B2
            #define ic595_sclk2 PIN_B3
            #define ic595_data2  PIN_B4
            #define ic595_lclk2 PIN_B5
            
            unsigned int8 next=0,lengh_STR;
            unsigned char count=0;
            unsigned char welcome[]=" http://codientu.org  ";
            unsigned char *str;
            #int_timer0
            void ngat_time0()
               {
               set_timer0(8);
               count++;
               if(count==25){           
                  count=0;
                  next++;
                  if(next>=lengh_STR)next=0;      
                  }
               }
               
            void Ic74595_Write(char data,char ic,char bits) 
               {
               signed char count;                   
               if(ic==1)                    
                  {
                  for(count=bits-1;count>=0;count--)
                     {
                     if((( data>>count) & 0x01) ==1) 
                        output_high(ic595_data1);
                     else 
                        output_low(ic595_data1);
                     output_high(ic595_sclk1);
                     output_low(ic595_sclk1);
                     }
                  output_high(ic595_lclk1); 
                  output_low(ic595_lclk1);
                  }
               if(ic==2)                    
                  {
                  for(count=bits-1;count>=0;count--)
                     {
                     if((( data>>count) & 0x01) ==1) 
                        output_high(ic595_data2);
                     else 
                        output_low(ic595_data2);
                     output_high(ic595_sclk2);  
                     output_low(ic595_sclk2);
                     }
                  output_high(ic595_lclk2);
                  output_low(ic595_lclk2);
                  }
               } 
            
            void Run_str_RtoL()
               {
               lengh_str=strlen(str)*6;
               unsigned char j,temp_font;
               Ic74595_Write(1,1,1);       
               for(j=next;j<32+next;j++){
                  Temp_font=font[str[(j%lengh_STR)/With_of_font] -32][j%With_of_font];
                  Ic74595_Write(temp_font,2,8); 
                  //delay_us(500);  
                  Ic74595_Write(0,1,1);  
                  }
               }
             
            void main (){ 
               TRISB=0x00;
               enable_interrupts(int_timer0);
               setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256); 
               enable_interrupts(global);
               set_timer0(8);
               str=welcome;
                while(true){    
                        Run_str_RtoL();
                        }
            }
            đây là đoạn mà e không hiểu:
            Code:
            void Run_str_RtoL()
               {
               lengh_str=strlen(str)*6;
               unsigned char j,temp_font;
               Ic74595_Write(1,1,1);       
               for(j=next;j<32+next;j++){
                  Temp_font=font[str[(j%lengh_STR)/With_of_font] -32][j%With_of_font];
                  Ic74595_Write(temp_font,2,8); 
                  //delay_us(500);  
                  Ic74595_Write(0,1,1);  
                  }
               }
            đại ca/đại tỷ nào hảo tâm thì vào chỉ giúp e nhé.
            còn 1 chuyện nữa e xin được chỉ giáo luôn, code này e làm mạch trên bo test thấy chạy đc đúng như mô phỏng, kể ra thì không cần hiểu code cũng có thể làm mạch rồi cho chạy chữ như ý mình rồi, nhưng mà CCS của e build code này lại bị lỗi nó chỉ vào file string.h, e không biết xử lý thế nào, lỗi là: "C\....\string.h" Line 191(37,38): Expecting an identifier
            và nhiều dòng lỗi ở dưới nữa. xin mọi ngưởi chỉ giúp e có phải tại CCS của e lỗi không ạ!
            e xin cảm ơn nhiều!
            bạn cho mình hỏi bạn đã biết nguyên nhân tại sao nó báo lỗi ở string.h line 192(37,38) chưa? nếu biết rồi bạn giải thích cho mình được không?

            Comment


            • #7
              Nguyên văn bởi lotan_ht Xem bài viết
              bạn cho mình hỏi bạn đã biết nguyên nhân tại sao nó báo lỗi ở string.h line 192(37,38) chưa? nếu biết rồi bạn giải thích cho mình được không?
              mình nhớ là mình đổi lại thứ tự khai báo các thư viện là được, không nhớ là đổi cái nào nữa. bạn thử xem nhé

              Comment


              • #8
                bạn ơi nếu code chạy được rôi bạn up cho mình xin đi

                Comment


                • #9
                  code vẫn thế, thêm 1 lệnh thôi mà.
                  Code:
                  //==============================================================================
                  // Ten chuong trinh : Mach Ledmatrix Run Text
                  // Nguoi thuc hien : demon52
                  // Ngay thuc hien : 24/10/2012
                  // Phien ban : Demo
                  // Mo ta phan cung : Dung PIC16F877A - thach anh 20MHz
                  // : 74HC595
                  // : PortB dung dieu khien!
                  //------------------------------------------------------------------------------
                  // Notes: 
                  // : dung che do Power On Reset
                  //==============================================================================
                  #include <16F877A.h>
                  #include <def_877a.h>
                  #device *=16 adc=10
                  #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,NOLVP, NOCPD, NOWRT
                  #use delay(clock=20000000)
                  #include <C:\Users\OnePiece\Pictures\595\string.h>
                  #include "font.c"
                  
                  #define ic595_sclk1 PIN_B0
                  #define ic595_data1  PIN_B1
                  #define ic595_lclk1 PIN_B2
                  #define ic595_sclk2 PIN_B3
                  #define ic595_data2  PIN_B4
                  #define ic595_lclk2 PIN_B5
                  
                  unsigned int8 next=0,lengh_STR;
                  unsigned char count=0;
                  unsigned char welcome[]=" http://codientu.org  ";
                  unsigned char *str;
                  #int_timer0
                  void ngat_time0()
                     {
                     set_timer0(8);
                     count++;
                     if(count==25){           
                        count=0;
                        next++;
                        if(next>=lengh_STR)next=0;      
                        }
                     }
                     
                  void Ic74595_Write(char data,char ic,char bits) 
                     {
                     signed char count;                   
                     if(ic==1)                    
                        {
                        for(count=bits-1;count>=0;count--)
                           {
                           if((( data>>count) & 0x01) ==1) 
                              output_high(ic595_data1);
                           else 
                              output_low(ic595_data1);
                           output_high(ic595_sclk1);
                           output_low(ic595_sclk1);
                           }
                        output_high(ic595_lclk1); 
                        output_low(ic595_lclk1);
                        }
                     if(ic==2)                    
                        {
                        for(count=bits-1;count>=0;count--)
                           {
                           if((( data>>count) & 0x01) ==1) 
                              output_high(ic595_data2);
                           else 
                              output_low(ic595_data2);
                           output_high(ic595_sclk2);  
                           output_low(ic595_sclk2);
                           }
                        output_high(ic595_lclk2);
                        output_low(ic595_lclk2);
                        }
                     } 
                  
                  void Run_str_RtoL()
                     {
                     lengh_str=strlen(str)*6;
                     unsigned char j,temp_font;
                     Ic74595_Write(1,1,1);       
                     for(j=next;j<32+next;j++){
                        Temp_font=font[str[(j%lengh_STR)/With_of_font] -32][j%With_of_font];
                        Ic74595_Write(temp_font,2,8); 
                        //delay_us(500);  
                        Ic74595_Write(0,1,1);
                  //***************************************
                        Ic74595_Write(0xff,2,8);/// thêm lệnh này để tắt LED là ok
                  //******************************************  
                        }
                     }
                   
                  void main (){ 
                     TRISB=0x00;
                     enable_interrupts(int_timer0);
                     setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256); 
                     enable_interrupts(global);
                     set_timer0(8);
                     str=welcome;
                      while(true){    
                              Run_str_RtoL();
                              }
                  }

                  Comment


                  • #10
                    mình dùng code này .....kiểm tra sao báo lỗi là bị j m.n..........nhứ thế này
                    mấy kái thư viện bị lổi j...
                    *** Error 18 "kiet.c" Line 15(10,22): File can not be opened
                    Not in "C:\Program Files (x86)\PICC\devices\def_877a.h"
                    Not in "C:\Program Files (x86)\PICC\drivers\def_877a.h"
                    Not in project "D:\VIXULI\matranchaychu\def_877a.h"
                    *** Error 18 "kiet.c" Line 19(10,51): File can not be opened
                    Not in project "C:\Users\OnePiece\Pictures\595\string.h"
                    *** Error 18 "kiet.c" Line 20(10,18): File can not be opened
                    Not in project "D:\VIXULI\matranchaychu\font.c"
                    Not in "C:\Program Files (x86)\PICC\devices\font.c"
                    Not in "C:\Program Files (x86)\PICC\drivers\font.c"
                    *** Error 12 "kiet.c" Line 80(20,21): Undefined identifier -- strlen
                    *** Error 12 "kiet.c" Line 84(17,21): Undefined identifier font
                    *** Error 12 "kiet.c" Line 95(4,9): Undefined identifier TRISB
                    6 Errors, 0 Warnings.



                    giúp vs

                    Comment


                    • #11
                      m.n hướng dẫn mjh thay chữ codientu.org đc k ạ

                      Comment


                      • #12
                        Nguyên văn bởi ngocnamdhgt2 Xem bài viết
                        cảm ơn bạn, nói có lý quá, chỉnh lại cái chạy ngon ngay.
                        cảm ơn nhiều nhé!
                        chào bạn, bạn có đó không nhỉ. Mình có một số vấn đề muốn nhờ bạn giúp đỡ, cho mình mail của bạn được không?

                        Comment


                        • #13
                          [QUOTE=voiviqua;n980732]cái lỗi này là do bạn khi chuyển sang quét cột (hàng) bạn chưa tắt cột (hàng) trức đó.
                          bạn chỉ cần tắt cột (hàng) trước đó là được.[/QUOTEào bạn
                          mình gặp vài rắc rối khi quét led ma trận. Bạn cho mình hỏi chút. Khi mình quét dùng hàng cathode, cot anode. đến lúc làm thật gặp led matrix hàng anode, cot cathode mà mình sửa code chưa được. Bạn xem dùm mình được không? Cảm ơn nhiều.

                          Comment

                          Về tác giả

                          Collapse

                          ngocnamdhgt2 Tìm hiểu thêm về ngocnamdhgt2

                          Bài viết mới nhất

                          Collapse

                          Đang tải...
                          X