Thông báo

Collapse
No announcement yet.

Hỏi cách viết code cho led ma trận

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

  • Hỏi cách viết code cho led ma trận

    em có đọc tài liệu và hiểu được nguyên lí rồi nhưng không biết cách viết code,code gồm cái j,trình tự viết thế nào..... em đều không biết,em còn thắc mắc ở chỗ là nếu dùng IC giải mã thì code sẽ thay đổi ntn so với ko dùng,có cách nào để chuyển từ code chạy chữ cho led 8x8 lên 16x16 với chữ to gấp rưỡi(hoặc gấp đôi) không? và còn rất nhiều vấn đề khác
    anh chị có tài liệu nào cụ thể về cái này thì cho em xin,em có đọc nhìu trên mạng nhưng toàn qua loa đại khái,hướng dẫn vài dòng rồi cho nguyên code dài thòng lòng chả hỉu mô tê j hết

  • #2
    Theo mình thì khi quét led matrix thì bạn nên dùng IC 74595,hoạt động của con 595 này cũng khá đơn giản,dễ nắm bắt
    Trình tự viết chương trình:-Theo mình bạn nên dùng 2 phần mềm phục vụ cho việc viết code và mô phỏng là:ProteusKeilC
    -Dùng phần mềm tạo mã chữ cho từng chữ cái cần hiển thị bằng phần mềm này :Tao Ma Chu Cho Led Matrix.rar
    tùy theo cách mắc hàng,hoặc cột mà bạn chọn mức tích cực 0 hoặc 1 cũng như thứ tự từ bít 0- bít 7 hoặc ngược lại
    - Viết hàm chuyển đổi dữ liệu nối tiếp sang song song cho 595
    -Dùng hàm quet 595 để quét mã,cho tới khi đủ 8 bit dữ liệu thì xuất ra led matrix
    Tham khảo thêm tại đây: Quét led matrix

    Mình cũng chỉ nói sơ qua được vậy thôi,bạn tham khảo code này của mình,bạn chịu khó đọc,có gì khúc mắc thì lại hỏi tiếp
    Led 3 mau.rar
    Thân!
    vanduc0211@gmail.com

    Comment


    • #3
      Nguyên văn bởi viboyth.haui Xem bài viết
      Tham khảo thêm tại đây: Quét led matrix
      Thân!
      cho e hỏi ở ví dụ 1 có
      unsigned char mahang[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//mã hàng
      unsigned char macot[8]={0x00,0X7f,0Xff,0X88,0X88,0Xff,0X7f,0X00}; mã cột
      tại sao mã cột lại đối xứng như thế?
      ở ví dụ 2 lại có
      unsigned char hang[8]={0X80,0X40,0X20,0X10,0X08,0X04,0X02,0X01};
      tại sao lại giảm dần như thế?
      a có giải thích kĩ giúp e đc ko?

      Comment


      • #4
        Đấy là cách quét thôi bạn à:
        -Ví dụ 1: quét led theo hàng (hàng mức tích 0) theo mảng "mahang",dịch dần từ mức tích cực 0 từ bit 0 (0xfe=11111110) tới bit 7 (0x7f=01111111),khi đó mã cột sẽ là mức tích cực 1,bạn dùng phần mềm tạo mã chữ để tạo mã cho từng kí tự cần hiển thị như "macot"
        -Ví dụ 2: quét cột,tương tự như mảng "mahang" trên,mảng "hang" là để quét cho từng hàng,từ bit 7(0x80=10000000) tới bit 0(0x01=00000001),bạn dùng phần mềm tạo mã chữ với mức tích cực 0 để tạo mã chữ cần hiển thị
        vanduc0211@gmail.com

        Comment


        • #5
          hic,sao các ví dụ ko quét hoặc cột hoặc hàng cho người khác dễ đối chiếu nhỉ
          em hiểu mức tích cực 0 và 1 rồi,em dùng phần mềm tạo mã chữ của Lê Hoàng Việt (hui) thì nó chỉ ra mã cột thôi thì phải,vậy phần mềm đó chỉ dùng cho quét hàng thôi phải ko a?
          em nhờ anh 1 cái nữa,anh có thể biến ví dụ 2 từ "ko có 595" thành "có 595" đc ko a (dùng 595 điều khiển 32 chân) ? em chưa hỉu code sẽ thay đổi thế nào nếu có 595

          Comment


          • #6
            Nguyên văn bởi superpro Xem bài viết
            hic,sao các ví dụ ko quét hoặc cột hoặc hàng cho người khác dễ đối chiếu nhỉ
            em hiểu mức tích cực 0 và 1 rồi,em dùng phần mềm tạo mã chữ của Lê Hoàng Việt (hui) thì nó chỉ ra mã cột thôi thì phải,vậy phần mềm đó chỉ dùng cho quét hàng thôi phải ko a?
            em nhờ anh 1 cái nữa,anh có thể biến ví dụ 2 từ "ko có 595" thành "có 595" đc ko a (dùng 595 điều khiển 32 chân) ? em chưa hỉu code sẽ thay đổi thế nào nếu có 595
            mình dùng phần mềm của mấy anh HUI,quét cột hay quét hàng thì tùy vào sự quy định mức tích cực 0 hay 1 của bạn thôi,chứ làm gì phần mềm đó quy định là chỉ quét cột hay quét hàng. Còn về con 595 thì khi dùng phải có 1 đoạn code viết để biến dữ liệu vào nối tiếp ra song song,tích đủ 8 bit thì xuất dữ liệu ra thôi,thế này nhé: bây giờ nếu bạn muốn đưa thẳng dữ liệu là mã code "0x7f" chẳng hạn thì bạn viết P0=0xff(=11111111),còn nếu muồn quét dùng 595 thì phải đưa từng số 1 của cái mã kia cho tới khi đủ 8 số 1 rồi xuất đầy đủ ra cho led thôi mà
            void quet(unsigned char x)
            {
            unsigned int i,temp;
            for(i=0;i<8;i++)
            {
            temp=x;
            temp=temp&0x80;//lay ra bit dau tien (bit 7)
            if(temp==0x80)//so sanh bit
            DAT=1;//bang 1 thi xuat vao chip =1
            else
            DAT=0;//nguoc lai bang 0
            x=x*2;//dich bit lay bit trong so thap -(DICH SANG TRAI 1 BIT)
            SCK=0;//tao xung tren chan 11
            SCK=1;//1 xung dua vao 1 bit---DAY DU LIEU VAO IC 74595
            }
            STR=0;
            STR=1;
            }
            Last edited by viboyth.haui; 08-09-2012, 19:12.
            vanduc0211@gmail.com

            Comment


            • #7
              à vậy cái 0xff kia sẽ ko thay đổi j cả,nó vẫn ở trong code,nhưng trong code có thêm đoạn đưa từng bit ra led qua 595

              em cứ tưởng cái 0xff(111111111) kia nó biến thành cái j đó chỉ có 3 bit thôi (ví dụ 111) vì em thấy chỉ cần dùng 3 chân của vđk để ra 8 chân 595, 111111111 --> 111

              cảm ơn a nhiều nhé

              Comment


              • #8
                anh viboyth.haui ơi anh có thể nói rõ lại vấn đề quét hàng quét cột rồi vì sao chọn mức tích cực 0 là quét hàng và 1 là quét cột,rồi hàng và cột của led ma trận nữa
                hình như led ma trận có chân catod và anod chung đúng ko a? việc chân nào thành hàng hay thành cột là do mình chọn đúng ko a?

                Comment


                • #9
                  Nguyên văn bởi chjpchjp1991
                  Mình thấy phần mềm Lê Việt Hoàng chỉ thấy xuất mã dành cho asm toàn có H đăng sau,không biết có phần mềm nào viết mã chữ như Lê Viêt Hoàng mà lại xuất mã dùng code c không nhỉ ví dụ từ 0ffh thành 0xff hic/
                  Trong trình dich keil asm mình sử dụng 0FFH hoặc 0xFF đều đươc mà bạn....

                  Comment


                  • #10
                    Có nhiều cách để điều khiển, trong chữ kí bên dưới có đường dẫn đến các ứng dụng của mạch 89,

                    void scan_595(unsigned char dataout)
                    {
                    unsigned char i;
                    for(i=0;i<8;i++)
                    {
                    if(dataout&0x80)
                    {
                    DATA = 1;
                    }
                    else
                    {
                    DATA = 0;
                    }
                    _nop_();
                    SCK = 1;
                    _nop_();
                    SCK = 0;
                    dataout *= 2;
                    }
                    _nop_();
                    STROBE = 1;
                    _nop_();
                    STROBE = 0;
                    }

                    Chú ý cần có thư viện #include<INTRINS.H> để có hàm _nop();
                    Cung cấp linh kiện điện tử, mạch nạp 89,PIC,AVR - website: dientuphuongdung.com
                    .0973291368

                    Comment


                    • #11
                      Nguyên văn bởi chjpchjp1991
                      Mình thấy phần mềm Lê Việt Hoàng chỉ thấy xuất mã dành cho asm toàn có H đăng sau,không biết có phần mềm nào viết mã chữ như Lê Viêt Hoàng mà lại xuất mã dùng code c không nhỉ ví dụ từ 0ffh thành 0xff hic/
                      hihi! trong complier keil c van dung dc ma anh!

                      Comment


                      • #12
                        Cho mình hỏi dùng led matrix hiển thị thời gian đếm ngược viết = c ntn vậy??

                        Comment


                        • #13
                          bạn ơi link led 3 màu die rồi bạn

                          Comment


                          • #14
                            Nguyên văn bởi dtpd Xem bài viết
                            Có nhiều cách để điều khiển, trong chữ kí bên dưới có đường dẫn đến các ứng dụng của mạch 89,

                            void scan_595(unsigned char dataout)
                            {
                            unsigned char i;
                            for(i=0;i<8;i++)
                            {
                            if(dataout&0x80)
                            {
                            DATA = 1;
                            }
                            else
                            {
                            DATA = 0;
                            }
                            _nop_();
                            SCK = 1;
                            _nop_();
                            SCK = 0;
                            dataout *= 2;
                            }
                            _nop_();
                            STROBE = 1;
                            _nop_();
                            STROBE = 0;
                            }

                            Chú ý cần có thư viện #include<INTRINS.H> để có hàm _nop();
                            595 cho điều khiển ở tốc độ khá cao mà nếu dùng 89xx thì thoải mái điều khiển mà không có trễ bạn có thể sửa hàm send595 như sau cho gọn gàng, dễ nhìn.
                            PHP Code:
                            void send595(unsigned char ch)
                            {
                                
                            char i;
                                ;
                                for (
                            i=0i<8i++)
                                {
                                    
                            ch<<=1;
                                    
                            DATA=CY;
                                    
                            SCK=1;
                                    
                            SCK=0;
                                }
                                
                            STROBE=0;// Mà bạn chốt bị ngược rồi. =0 trước =1 sau
                                
                            STROBE=1;

                            Comment


                            • #15
                              Nguyên văn bởi myth-coder Xem bài viết
                              595 cho điều khiển ở tốc độ khá cao mà nếu dùng 89xx thì thoải mái điều khiển mà không có trễ bạn có thể sửa hàm send595 như sau cho gọn gàng, dễ nhìn.
                              PHP Code:
                              void send595(unsigned char ch)
                              {
                                  
                              char i;
                                  ;
                                  for (
                              i=0i<8i++)
                                  {
                                      
                              ch<<=1;
                                      
                              DATA=CY;
                                      
                              SCK=1;
                                      
                              SCK=0;
                                  }
                                  
                              STROBE=0;// Mà bạn chốt bị ngược rồi. =0 trước =1 sau
                                  
                              STROBE=1;

                              Cái chổ DATA=CY là như thế nào vậy ban? Mình chưa hiểu.

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X