Tutorial: Led ma trận bằng hình ảnh (completed)

Collapse
This is a sticky topic.
X
X
 
  • Giờ
  • Show
Clear All
new posts
  • thiennv0109
    Thành viên tích cực
    • Dec 2010
    • 219

    #391
    bạn xem lại biến t xem
    Đối với Tôi Đam mê là yếu tố không thể thiếu để quyết định sự Thành Công ...!
    Gmail: -Mobile: 0989.194.472

    Comment

    • c144
      Thành viên chính thức
      • Apr 2012
      • 42

      #392
      chào bạn.bạn giúp mình nha,mình muốn ghép 4led matran lại với nhau,ghép với 4ic 74hc595 và hiển thị dòng chữ chạy là chào ngày mới.mình đã viết chương trình nhưng không hiểu sao nó không chạy,mình không biết sai ở đâu nữa.mình dùng ic89c51,bạn xem hộ cái code này và giúp mình nha,
      #include <REGX51.H>
      sbit DATA=P2^0;
      sbit CLK=P2^1;
      sbit RLK=P2^2;
      //ham tre
      void tre(long time)
      {
      while(time--);
      }
      int n,m,lap,t;
      unsigned char mangcot[8]={chõ này ghi mã c?t};
      unsigned char manghang[8]={chõ này ghi mã hàng};
      //ham quet
      void quet(unsigned char x)
      {
      int i,temp;
      for(i=0;i<=7;i++)
      {
      temp=x;
      temp=temp&0x80;
      if(temp==0x80)
      {
      DATA=1;
      }
      else
      DATA=0;
      x*=2;
      CLK=0;
      CLK=1;
      }
      RLK=0;
      RLK=1;
      }
      //ham chinh
      void main(void)
      {
      while(1)
      {
      for(m=0;m<=7;m++)
      for(lap=0;lap<=20;lap++)
      for(n=0;n<=7;n++)
      {
      if((m+n<=7))
      {
      P1=mangcot[n];
      quet(manghang[n+m]);
      tre(45);
      }
      if((m+n>7))
      {
      P1=mangcot[n];
      quet(manghang[n+m-8]);
      tre(45);
      }
      }
      }
      }

      Comment

      • nmt91
        Thành viên mới
        • Feb 2012
        • 1

        #393
        a cho e hỏi
        sao dùng phần mềm vision4 để chuyển doạn code C trên sang file .hex sao nó báo lỗi
        chao.c(2): warning C318: can't open file 'delay.h'
        chao.c(4): warning C318: can't open file 'spi.h'
        CHAO.C(19): error C129: missing ';' before 'XINCHAO'

        giúp em với !

        Comment

        • c144
          Thành viên chính thức
          • Apr 2012
          • 42

          #394
          Hieuues cho mình hỏi trong đoạn code của bạn có khai báo mangcot2 mà trong chương trình không thấy dùng nghĩa là sao?với lại cho mình hỏi thêm bạn dùng mangcot1 nghĩa là bạn đang quét led theo kiểu nào?bạn nói rõ hộ mình nha.mình cũng đang làm chương trình giống bạn nhưng mình cũng đang mắc lỗi tương tự

          Comment

          • hieult153
            Thành viên mới
            • Apr 2012
            • 12

            #395
            Nguyên văn bởi c144 Xem bài viết
            Hieuues cho mình hỏi trong đoạn code của bạn có khai báo mangcot2 mà trong chương trình không thấy dùng nghĩa là sao?với lại cho mình hỏi thêm bạn dùng mangcot1 nghĩa là bạn đang quét led theo kiểu nào?bạn nói rõ hộ mình nha.mình cũng đang làm chương trình giống bạn nhưng mình cũng đang mắc lỗi tương tự
            Bài của mình sửa lại chạy được rồi, bạn lấy về tham khảo Led8x8.rar
            Còn cái vụ mangcot2 kia là vì mình muốn quét Anot từ phải sang trái nhưng không dùng cũng quên không xóa đi. Mangcot1 là quét từ trái sang phải (từ giá trị 0x80 đến 0x00) để hàng chữ nó chạy từ phải qua trái (có vẻ hơi ngược nhưng nó là vậy).Nếu bạn dùng mangcot2 thì khi quét font chữ bị quay từ phải qua trái giống chữ trong gương.

            Comment

            • lenhoc91
              Thành viên tích cực
              • Oct 2011
              • 208

              #396
              //-------------Ham hien thi ra LED ma tran-----------------
              hienthi()
              {
              for(n=0;n<=7;n++)
              {
              if(n+m>=24)
              data_byte(hang[n+m-24]);
              else
              data_byte(hang[n]);
              if(n+m>=16)
              data_byte(hang[n+m-16]);
              else
              data_byte(hang[n]);
              if(n+m>=8)
              data_byte(hang[n+m-8]);
              else
              data_byte(hang[n]);
              if(n+m<=21*8-1)
              data_byte(hang[n+m]);
              else
              data_byte(hang[n]);
              P1=cot[n];
              xuat();
              delay(2);
              }
              }
              //-----------Ham chinh------------------
              main(void)
              {
              //int i;
              //xuly();
              //a=0;
              //for(i=0;i<strlen(hang);i++){if(hang[i]!='\0')a++;};
              m=0;
              while(1)
              {
              for(k=0;k<=10;k++)
              {
              hienthi();
              delay(2);
              }
              m++;
              if(m==21*8-1)m=0;
              }
              }



              a Hiếu giải thích dùm e đoạn này a Hiếu ơi
              thank a nhiều
              lenhoc91@gmail.com

              Comment

              • lenhoc91
                Thành viên tích cực
                • Oct 2011
                • 208

                #397
                a Hiếu e sửa cột lại là unsigned char cot[] ={0x00,0x80,0x40,0xc0,0x20,0xa0,0x60,0xff}; dùng cho giải mã 74138, 74138 thi xuất được xung như mảng cột củ rồi nhưng hiển thị bị lỗi ak. ko bik khi dùng 74138 co sữa chổ nào trong code nua ko chỉ dum e


                #include<at89x52.h>
                #include<string.h>
                //#include<font8x8.c>
                //-------------Khai bao bien-------------
                sbit SCK=P3^0;
                sbit DATA=P3^1;
                sbit LATCH=P3^2;
                int m,n,k,a;
                //--------------Khai bao mang------------

                unsigned char code hang[]=
                {
                0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,//led tat
                0xFF,0x81,0x00,0x7E,0x7E,0x7E,0xBD,0xFF,//C
                0xFF,0x00,0x00,0xEF,0xEF,0x00,0x00,0xFF,//H
                0xFF,0x01,0x00,0xFE,0xFE,0x00,0x01,0xFF,//U
                0xFF,0x81,0x00,0x7E,0x7E,0x7E,0xBD,0xFF,//C
                0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,//led tat
                0x00,0x80,0xDF,0xEF,0xDF,0x80,0x00,0xFF,//M
                0xFF,0x01,0x00,0xFE,0xFE,0x00,0x01,0xFF,//U
                0x00,0x80,0xDF,0xEF,0xF7,0x00,0x00,0xFF,//N
                0xFF,0x81,0x00,0x7E,0x76,0x76,0xB1,0xFF,//G
                0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,//led tat
                0x00,0x80,0xDF,0xEF,0xF7,0x00,0x00,0xFF,//N
                0xFF,0xC0,0x80,0x77,0x77,0x80,0xC0,0xFF,//A
                0x00,0x80,0xDF,0xEF,0xDF,0x80,0x00,0xFF,//M
                0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,//led tat
                0x00,0x80,0xDF,0xEF,0xDF,0x80,0x00,0xFF,//M
                0xFF,0x81,0x00,0x7E,0x7E,0x00,0x81,0xFF,//0
                0xFF,0xFF,0x7E,0x00,0x00,0x7E,0xFF,0xFF,//I
                0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,//led tat
                0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,//led tat
                0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,//led tat
                };

                //unsigned char xdata hang[200];
                unsigned char cot[] ={0x00,0x80,0x40,0xc0,0x20,0xa0,0x60,0xff};//chổ này dùng cho 74138
                //unsigned char text[]="LE TRUNG HIEU ";//Nhap text vao day de hien thi
                //--------------Ham xu ly text-------------
                /*
                xuly()
                {
                unsigned char data i,j,l;
                l=strlen(text);
                for(i=0;i<l;i++)
                {
                for(j=0;j<=7;j++)
                {
                if(text[i]==20){hang[8*i+j]=font2[j];}
                else {hang[8*i+j]=font2[8*(text[i]-32)+j];}
                }
                }
                }
                */
                //-------------Ham tre-----------------
                delay(long t)
                {
                int i=0,j;
                for(;i<=4;i++)
                for(j=0;j<=t;j++);
                }
                //-----------Ham cho phep ghi vao thanh ghi HC595---------------
                Data_bit()
                {
                SCK=1;
                SCK=0;
                }
                //------------Ham viet 8 bit vao thanh ghi HC595--------------
                void data_byte(unsigned char x)
                {
                unsigned char data temp,i;
                for(i=0;i<8;i++)
                {
                temp=x;
                temp=temp&0x80;
                if(temp==0x80)
                DATA=1;
                else
                DATA=0;
                x=x<<1;
                Data_bit();
                }
                }
                //-------------Ham xuat gia tri tu thanh ghi ra cong ra HC595--------------
                xuat()
                {
                LATCH=1;
                LATCH=0;
                }
                //-------------Ham hien thi ra LED ma tran-----------------
                hienthi()
                {
                for(n=0;n<=7;n++)
                {
                if(n+m>=24)
                data_byte(hang[n+m-24]);
                else
                data_byte(hang[n]);
                if(n+m>=16)
                data_byte(hang[n+m-16]);
                else
                data_byte(hang[n]);
                if(n+m>=8)
                data_byte(hang[n+m-8]);
                else
                data_byte(hang[n]);
                if(n+m<=21*8-1)
                data_byte(hang[n+m]);
                else
                data_byte(hang[n]);
                P1=cot[n];
                xuat();
                delay(2);
                }
                }
                //-----------Ham chinh------------------
                main(void)
                {
                //int i;
                //xuly();
                //a=0;
                //for(i=0;i<strlen(hang);i++){if(hang[i]!='\0')a++;};
                m=0;
                while(1)
                {
                for(k=0;k<=10;k++)
                {
                hienthi();
                delay(2);
                }
                m++;
                if(m==21*8-1)m=0;
                }
                }

                Comment

                • hieult153
                  Thành viên mới
                  • Apr 2012
                  • 12

                  #398
                  Nguyên văn bởi lenhoc91 Xem bài viết
                  a Hiếu e sửa cột lại là unsigned char cot[] ={0x00,0x80,0x40,0xc0,0x20,0xa0,0x60,0xff}; dùng cho giải mã 74138, 74138 thi xuất được xung như mảng cột củ rồi nhưng hiển thị bị lỗi ak. ko bik khi dùng 74138 co sữa chổ nào trong code nua ko chỉ dum e
                  unsigned char cot[] ={0x00,0x80,0x40,0xc0,0x20,0xa0,0x60,0xff};//chổ này dùng cho 74138
                  Hình như sai chỗ 0xff, phải sửa thành 0xE0 !!!
                  Nếu dùng 4 con này hoặc 2 con 154, chỉ dùng 1 con 595 thì bài này sẽ dễ hơn !!!
                  Last edited by hieult153; 10-05-2012, 18:48.

                  Comment

                  • hieult153
                    Thành viên mới
                    • Apr 2012
                    • 12

                    #399
                    Nguyên văn bởi lenhoc91 Xem bài viết
                    //-------------Ham hien thi ra LED ma tran-----------------
                    hienthi()
                    {
                    for(n=0;n<=7;n++)
                    {
                    if(n+m>=24)
                    data_byte(hang[n+m-24]);//Du lieu cho ra C25-C32
                    else
                    data_byte(hang[n]);//Nếu n+m<24 thì xuất ra 595 giá trị hang[0]->hang[7] để không bị nhiễu LED
                    if(n+m>=16)
                    data_byte(hang[n+m-16]);//Du lieu ra C17-C24
                    else
                    data_byte(hang[n]);
                    if(n+m>=8)
                    data_byte(hang[n+m-8]);
                    else
                    data_byte(hang[n]);
                    if(n+m<=21*8-1)
                    data_byte(hang[n+m]);
                    else
                    data_byte(hang[n]);//tuy m đã giới hạn giá trị nhưng khi cộng thêm n lại phát sinh giá trị không tồn tại trong hang[] nên phải trả về cột 1->cột 8 trong hang[].
                    P1=cot[n];
                    xuat();
                    delay(2);
                    }
                    }
                    //-----------Ham chinh------------------
                    main(void)
                    {
                    //int i;
                    //xuly();
                    //a=0;
                    //for(i=0;i<strlen(hang);i++){if(hang[i]!='\0')a++;};
                    m=0;
                    while(1)
                    {
                    for(k=0;k<=10;k++)
                    {
                    hienthi();
                    delay(2);
                    }
                    m++;
                    if(m==21*8-1)m=0;//Lap lai
                    }
                    }
                    Mình giải thích rồi, đọc lại đi nha !!

                    Comment

                    • lenhoc91
                      Thành viên tích cực
                      • Oct 2011
                      • 208

                      #400
                      Nguyên văn bởi hieult153 Xem bài viết
                      Hình như sai chỗ 0xff, phải sửa thành 0xE0 !!!
                      Nếu dùng 4 con này hoặc 2 con 154, chỉ dùng 1 con 595 thì bài này sẽ dễ hơn !!!
                      ý a là dùng 4 con 138 ak, e chưa hiểu lắm. E dùng 138 để quét cột thay ji dùng 8 cổng p1 thi e chỉ dùng 3 cổng

                      Comment

                      • lenhoc91
                        Thành viên tích cực
                        • Oct 2011
                        • 208

                        #401
                        a hiếu ơi chỉ dùm e với
                        để thêm mở rộng nhiều led nữa e làm
                        hienthi()
                        {
                        for(n=0;n<=8;n++)
                        {
                        if(n+m>=32)// thêm led thì + 8
                        data_byte(hang[n+m-32]);
                        else
                        data_byte(hang[n]);
                        if(n+m>=24)
                        data_byte(hang[n+m-24]);
                        else
                        data_byte(hang[n]);
                        if(n+m>=16)
                        data_byte(hang[n+m-16]);
                        else
                        data_byte(hang[n]);
                        if(n+m>=8)
                        data_byte(hang[n+m-8]);
                        else
                        data_byte(hang[n]);
                        if(n+m<=21*8-1)// so luong chu bang 21
                        data_byte(hang[n+m]);
                        else
                        data_byte(hang[n]);
                        P1=cot[n];
                        xuat();
                        delay(2);
                        }
                        }

                        nhưng lại bị ngược chữ

                        Comment

                        • hieult153
                          Thành viên mới
                          • Apr 2012
                          • 12

                          #402
                          Nguyên văn bởi lenhoc91 Xem bài viết
                          a hiếu ơi chỉ dùm e với
                          để thêm mở rộng nhiều led nữa e làm
                          hienthi()
                          {
                          for(n=0;n<=8;n++)
                          {
                          if(n+m>=32)// thêm led thì + 8
                          data_byte(hang[n+m-32]);
                          else
                          data_byte(hang[n]);
                          if(n+m>=24)
                          data_byte(hang[n+m-24]);
                          else
                          data_byte(hang[n]);
                          if(n+m>=16)
                          data_byte(hang[n+m-16]);
                          else
                          data_byte(hang[n]);
                          if(n+m>=8)
                          data_byte(hang[n+m-8]);
                          else
                          data_byte(hang[n]);
                          if(n+m<=21*8-1)// so luong chu bang 21
                          data_byte(hang[n+m]);
                          else
                          data_byte(hang[n]);
                          P1=cot[n];
                          xuat();
                          delay(2);
                          }
                          }

                          nhưng lại bị ngược chữ
                          Thì bạn cứ thêm n+m>=40,n+m>=48...và data_byte(n+m-40),data_byte(n+m-48)...là được mà, có gì đâu....mình đang làm chữ chạy lên mà nó cứ báo lỗi cũng nản quá,,,bạn làm được không?

                          Comment

                          • cd8687
                            Thành viên mới
                            • Jan 2011
                            • 8

                            #403
                            sao bác hướng dẫn toàn c vậy em không được học c buồn nhỉ em học asm mà đọc cái này thì ôi trời. bác có cái nào hướng dẫn asm thì gửi cho em xin nha thanks bác trước nha mail em hj
                            vuonghoatvuonghoat@gmail.com

                            Comment

                            • Sangstbk
                              Thành viên chính thức
                              • May 2011
                              • 98

                              #404
                              Tui cũng thích lập trình LED. Từ cái module bé tí vài 3 module LED ma trận đến bảng chục m2 đều từng lập trình rùi. Cũng vui vui ^_^

                              Comment

                              • hoangvanloc
                                Thành viên mới
                                • Mar 2011
                                • 4

                                #405
                                cho e hỏi tại sao e xuất dữ liệu như thế này:
                                #include <mega32.h>
                                #include <spi.h>
                                #include <delay.h>
                                #define LATCH PORTB.0
                                unsigned char flash DMem[]={28,0,0,0,0,0,28,0,0,0,0,0,0,0,0,0,0,0,0,0,
                                0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0};
                                unsigned char Q[7]={99,0,0,0,0,0,28} ;
                                unsigned char M[49];
                                int i,r=0;
                                // Timer 0 overflow interrupt service routine
                                interrupt [TIM0_OVF] void timer0_ovf_isr(void)
                                {
                                spi(M[r*7+6]);
                                spi(M[r*7+5]);
                                spi(M[r*7+4]);
                                spi(M[r*7+3]);
                                spi(M[r*7+2]);
                                spi(M[r*7+1]);
                                spi(M[r*7]);
                                LATCH = 1;
                                LATCH = 0;
                                PORTC=Q[r];
                                r++;
                                if (r==7) r=0;
                                }
                                void main(void)
                                {

                                PORTB=0x00;
                                DDRB=0xFF;
                                PORTC=0x00;
                                DDRC=0xFF;
                                // Timer/Counter 0 initialization
                                // Clock source: System Clock
                                // Clock value: 8000,000 kHz
                                // Mode: Normal top=0xFF
                                // OC0 output: Disconnected
                                TCCR0=0x01;
                                TCNT0=0x00;
                                OCR0=0x00;
                                // SPI initialization
                                // SPI Type: Master
                                // SPI Clock Rate: 2000,000 kHz
                                // SPI Clock Phase: Cycle Start
                                // SPI Clock Polarity: Low
                                // SPI Data Order: MSB First
                                SPCR=0x50;
                                SPSR=0x00;
                                LATCH = 0;
                                for(i=0;i<=49;i++)
                                {
                                M[i]=DMem[i] ;
                                }
                                #asm("sei")

                                while (1)
                                {
                                }
                                }


                                khi e mô phỏng bằng proteus led chớp tắt
                                74HC595.rar
                                nhờ mọi người debug hộ e với! e định làm led cube 7x7x7 mà chắc k làm được mất!
                                Last edited by hoangvanloc; 27-06-2012, 12:28.

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...