Thông báo

Collapse
No announcement yet.

Led matrix 16*xx trang trí ngày tết

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

  • Led matrix 16*xx trang trí ngày tết

    Chào các bạn, dạo này mình thấy trên diễn đàn nhiều người muốn làm bảng led matrix chạy chữ để trang trí cho noel hay ngày tết quá, mình cũng mới làm xong sản phẩm này cách đây 1 tháng. Hôm nay mình xin giới thiệu với mọi người để những ai muốn làm thì tham khảo.
    Đây là sản phẩm của mình như thế này các bạn xem nhé.
    digital clock - YouTube
    Giới thiệu qua: Đồng hồ số hiển thị trên led matrix 16x48 sử dụng 89S52, DS1820 để điều khiển và hiển thị. Đồng hồ có các phím chức năng như sau:
    + Phím mode: dùng để chỉnh giờ, phút, giây…
    + Phìm up: dùng để tăng giờ, phút, giây...
    + Phím down: dùng để giảm giờ, phút, giây…
    + Phím select: dùng để chọn xem chỉnh giờ, phút hay cái gì nhé.
    Hết các phím.
    Cái này nó cũng tương tự như làm chạy chữ trên led matrix thôi, và ở phần đầu của đồng hồ mình cũng đã cho nó chạy chữ theo code mà mình tham khảo được trên diễn dàn của bác tienhuypro, mình up code và file mô phỏng ở đây các bạn down về tham khảo.
    Các bạn có thể lược bỏ phần code cho đồng hồ cho đỡ phức tạp hoặc lấy code của bác tienhuypro sửa đổi chút là được. mình cũng đã sửa như vậy.
    dongho16x48.zip
    Code này không hẳn là tất cả do mình viết mà là cả 1 quá trình theo dõi, tham khảo và học hỏi các anh em trên diễn đàn rất nhiều và đặc biệt là phải cảm ơn bác tienhuypro về phần chạy chữ.
    Như trong file gửi kèm thì mình dung 89c52 điều khiển, mình dùng theo phương pháp quét hàng và dung IC giải mã 4 -> 16 là 74HC154 để đưa data quét ra hàng. ở 74hc154 thì các chân 20,21,22,23 là các chân data input, chân 18,19 là các chân cho phép IC hoạt động, chân 1,2,3,…,11,13,…,17. là các chân output. Chân 12 là GND chân 24 là VCC
    Ở cột thì mình dùng IC dịch từ nối tiếp sang song song là 74hc595 để đưa data ra cột. và cách hoạt động của 74hc595
    74595 có các chân và hoạt tác dụng của chúng như sau:
    - 8 chân xuất dữ liệu, chân reset (10), cho phép chip (13): Mấy chân này chắc ko phải nói j rồi.
    - Một chân nhận dữ liệu vào nối tiếp (14): Bạn muốn dịch bit 0 hay 1 thì tác động vào đây.
    - Một chân xung clock (11): Cứ mỗi xung tác động vào chân này thì bit logic tại chân nhận dữ liệu (14) sẽ đc dịch vào một lần.
    - Một chân chốt dữ liệu (12): Mỗi lần có xung tác động vào chân này thì dữ liệu đc xuất ra một lần
    - Còn chân 9: Thì cứ có 8 xung tác động vào chân clock nó lại xuất ra một xung.
    VD: Bạn nối một chú LED 7 thanh vào 74595 (a nối Q0,..., g nối Q6) rồi thử cho hiện số 5 chẳng hạn:
    - Muốn có số 5 thi Q0 - Q7 có mức logic là: 01001000.
    - Đầu tiên cho chân 14 nhận mức logic 1
    - Kick một xung clock vào chân 11 rồi lại đưa chân 14 xuống mức logic 0 sau đó tác động 2 xung vào chân 11 rồi lại đưa chân 14 lên mức logic 1 tác động một xung vào chân 11 rồi lại đưa 14 xuống 0. Cuối cùng tác động một xung vào chân 11, sau đó chốt bằng cách tác động một xung vào chân 12, nhìn trên Proteus bạn sẽ thấy kết quả.
    Bài nguyên lý đưa data và chốt data của IC 74hc595
    Mình lấy ở đây nhé :
    http://www.dientuvietnam.net/forums/...74hc595-29976/
    Nguyên lý hoạt động của led matrix nếu ai chưa rõ thì tham khảo ở đây nhé
    Trao đổi học tập - chi tiết
    mình nghĩ là nó sẽ dễ hiểu và hứng thú với các bạn mới tìm hiểu.

    Tiếp đến là phần tính công suất cho mạch. Theo như các bài vở trên lớp thầy dạy thì mình tính như thế này. Matrix 16x48 thì có tổng cộng 16x48=768 led, mỗi led cần 10ma, => 768led sẽ cần 10x768=7680ma tính cho trường hợp tất cả các led sang cùng 1 lúc.
    Nhưng theo mình nghĩ thì như thế này trong 1 thời điểm chỉ có 1 hàng được tích cực (quét 16 hàng) nên công suất chỉ tính cho 1 hàng ( cái này không biết có phải không các bác cho ý kiến nhé) => nguồn cần là 48x10ma=480ma + thêm dòng sử dụng cho các ic nữa chắc cũng tầm 700ma đấy nhỉ..
    Cách thiết kế mạch này của mình đưa thẳng 5v vào các led, vì theo thầy giáo nói các led được quét sáng trong khoảng thời gian rất nhỏ nên sẽ không ảnh hưởng đến tuổi thọ của led cũng thấy đúng.
    Ở con 74hc154 dữ liệu được quét ra mức 0 nên mình nhờ nó tính đưa data đó để kích các tran PNP để đưa data mức 1 ra các hàng.
    Về phía con 74hc595 thì mình có biết qua qua là nó có thể nuốt dòng tới 30ma thì phải nên mình đã cho nối trực tiếp vào các cột ( cũng hơi liều nhưng giờ nó chạy rất ổn không sao cả). Theo như cách quét đưa mức 1 ra các hàng thì để tích cực các led (sáng) thì mình phải đưa data ra các cột ở mức 0.
    Ở đây mình cũng chỉ nói về làm led matrix chạy chữ là như vậy, mình đã gửi code và mô phỏng có cả đồng hồ sử dụng IC thời gian thực DS1307 nếu ai muốn tìm hiểu thêm về đồng hồ với DS1307 thì tham khảo luôn code đó nhé
    Nói chung là để tìm hiểu về cái này thì bạn phải biết về lập trình VXL 8051 , tìm hiểu nguyên lý hoạt động của con 74HC595, 74HC154 cách quét led matrix. Mình cũng chỉ biết nói như vậy thôi không được chi tiết cho lắm( do kiến thức còn hạn hẹp ) nếu các bạn trong quá trình làm có gì thắc mắc thì hỏi, mình biết đến đâu thì sẽ trả lời đến đó, vì cái này là cái để làm chơi nên sẽ không có chuyện giấu nghề hay gì cả. Mọi người ủng hộ nếu thấy thích nhé

    cái này cũng quan trọng mà em quên mất.em bổ xung thêm phần mềm LCDFontmaker dùng để dịch mã cho led matrix các bác down ở đây nhé
    http://www.mediafire.com/?ebf5n5bk1agf2qt
    Last edited by lengo90; 19-12-2011, 00:55.

  • #2
    tổng thiệt hại vụ này nhiêu vậy chú!
    ĐT: 0972 20 58 68
    Gmail:

    Comment


    • #3
      Nguyên văn bởi hoangnam555 Xem bài viết
      tổng thiệt hại vụ này nhiêu vậy chú!
      nói ra thì sợ các bạn mới tìm hiểu sẽ nản nhưng e có nghe 1 bác trên diễn đàn nói là nếu không có tiền thì đừng học điện tử, nghĩ lại cũng đúng đấy rất tốn kém.
      em ước tính như thế này tại mua lâu rồi cũng không nhớ rõ lắm:
      + 12 con led 8*8 mỗi con 25k = 300k (loại 2 màu)
      + 1 con 89s52 =20k
      + 1 con 74hc154 = 20k
      + 6 con 74hc595 = 30k
      + 16 tran B562 = 16k thì phải không nhớ lắm
      đây là những thứ chủ chốt, còn mấy thứ râu ria như trở, phím bấm, thạch anh, tụ, ic nguồn, nguồn...nữa cũng khá tốn kém. Tổng thể chắc cũng mất toi 500k đấy, chưa kể mất tiền ngu

      Comment


      • #4
        Nguyên văn bởi lengo90 Xem bài viết
        nói ra thì sợ các bạn mới tìm hiểu sẽ nản nhưng e có nghe 1 bác trên diễn đàn nói là nếu không có tiền thì đừng học điện tử, nghĩ lại cũng đúng đấy rất tốn kém.
        em ước tính như thế này tại mua lâu rồi cũng không nhớ rõ lắm:
        + 12 con led 8*8 mỗi con 25k = 300k (loại 2 màu)
        + 1 con 89s52 =20k
        + 1 con 74hc154 = 20k
        + 6 con 74hc595 = 30k
        + 16 tran B562 = 16k thì phải không nhớ lắm
        đây là những thứ chủ chốt, còn mấy thứ râu ria như trở, phím bấm, thạch anh, tụ, ic nguồn, nguồn...nữa cũng khá tốn kém. Tổng thể chắc cũng mất toi 500k đấy, chưa kể mất tiền ngu
        thanks pác, nhưng pác có loại nào khủng hơn k.
        Chả là nhà em đang thừa 55 chú led 8*8 2 màu ạ. muốn tận dụng hết luôn

        Comment


        • #5
          ah. phần chữ và giờ thì ok. nhưng em muốn nó khoảng 1-2p thì chạy chữ lại 1 lần thì ntn ạ. vì đồng hồ mình bật 24/24 mà chạy chữ mỗi lần đầu tiên thì chỉ mình bật mình đọc thui ạ. khi chạy xong thì nó k chạy nữa lên ng khác muốn đọc cũng k đọc dc.
          mà còn nữa. trong file mô phỏng là gép trực tiếp. nhưng khi lắp thực tế thì mình đấu qua trans để nâng dòng thì nó lại bị đảo pha thì phải đấu ntn ạ.

          Comment


          • #6
            Nguyên văn bởi hadaica_pro Xem bài viết
            ah. phần chữ và giờ thì ok. nhưng em muốn nó khoảng 1-2p thì chạy chữ lại 1 lần thì ntn ạ. vì đồng hồ mình bật 24/24 mà chạy chữ mỗi lần đầu tiên thì chỉ mình bật mình đọc thui ạ. khi chạy xong thì nó k chạy nữa lên ng khác muốn đọc cũng k đọc dc.
            mà còn nữa. trong file mô phỏng là gép trực tiếp. nhưng khi lắp thực tế thì mình đấu qua trans để nâng dòng thì nó lại bị đảo pha thì phải đấu ntn ạ.
            cái mạch này thì mình chịu,ko làm nỗi.
            bị đảo pha thì đảo thêm lần nữa hoặc tìm cách mắc thích hợp.Ví dụ mắc kiểu CC thì vào B ra E, cùng pha đối với NPN.
            ĐT: 0972 20 58 68
            Gmail:

            Comment


            • #7
              Nguyên văn bởi hadaica_pro Xem bài viết
              ah. phần chữ và giờ thì ok. nhưng em muốn nó khoảng 1-2p thì chạy chữ lại 1 lần thì ntn ạ. vì đồng hồ mình bật 24/24 mà chạy chữ mỗi lần đầu tiên thì chỉ mình bật mình đọc thui ạ. khi chạy xong thì nó k chạy nữa lên ng khác muốn đọc cũng k đọc dc.
              mà còn nữa. trong file mô phỏng là gép trực tiếp. nhưng khi lắp thực tế thì mình đấu qua trans để nâng dòng thì nó lại bị đảo pha thì phải đấu ntn ạ.
              trong mạch mình đấu trực tiếp từ 74hc154 vào matrix vì matrix này điều khiển hàng bằng mức 0 => đưa data ra cột bằng mức 1, vì thế nên mình đã thêm cổng not từ p3.3 rồi mới vào chân data của 74hc595, nếu làm mạch thực thì để ngang sao cho các tín hiệu điều khiển hàng tích cực mức cao vi sau khi qua tran pnp tín hiệu sẽ bị đảo như cổng not ấy. vd như trong proteus thì bạn xuay ngang nó ra thì hàng biến thành cột, cột biến thành hàng rồi, lúc này mức cao để điều khiển hàng, mức thấp điều khiển cột rồi

              muốn cho nó 2p chạy 1 lần thì bạn cho chương trình chính của đồng hồ vào vòng lặp sau khi thực hiện xong vòng lặp đó thì bạn cho lệnh ljmp main thì nó sẽ chạy lại chữ
              Last edited by lengo90; 19-12-2011, 00:16.

              Comment


              • #8
                bạn có thể chia sẻ sơ đồ cho a,e tham khảo được không mình cũng muốn làm matrix từ lâu rồi nhưng sinh viên nghèo chưa có kinh phí nên chưa làm được.chắc phải chờ đến lúc hoc xong ra trường mới làm được.huhu
                Sửa chữa, cung cấp máy cắt dây, máy xung, máy phay CNC....
                website: suntech-vn.com
                phone. 0974 354 077
                Email.

                Comment


                • #9
                  Bác có thể chỉ em cách dịch dữ liệu từ trái sang phải hay ngược lại ko. Ví dụ như bảng led của em có 96 cột vậy là sẽ cần 12byte dữ liệu cho mõi hàng,vậy làm cách nào để dịch 12byte dữ liệu này sáng phải 1 bit cho từng hàng để chữ của ta di chuyển từ trái sang phải bảng led. Em đã ngâm cứu cái này mãi rồi mà chưa thể hiểu đc

                  Comment


                  • #10
                    Nguyên văn bởi v.sondt Xem bài viết
                    bạn có thể chia sẻ sơ đồ cho a,e tham khảo được không mình cũng muốn làm matrix từ lâu rồi nhưng sinh viên nghèo chưa có kinh phí nên chưa làm được.chắc phải chờ đến lúc hoc xong ra trường mới làm được.huhu
                    mô phỏng mình đã up lên, bạn muốn sơ đồ gì

                    Comment


                    • #11
                      sơ đồ nguyên lí đó bạn
                      Sửa chữa, cung cấp máy cắt dây, máy xung, máy phay CNC....
                      website: suntech-vn.com
                      phone. 0974 354 077
                      Email.

                      Comment


                      • #12
                        Nguyên văn bởi student_dtvt Xem bài viết
                        Bác có thể chỉ em cách dịch dữ liệu từ trái sang phải hay ngược lại ko. Ví dụ như bảng led của em có 96 cột vậy là sẽ cần 12byte dữ liệu cho mõi hàng,vậy làm cách nào để dịch 12byte dữ liệu này sáng phải 1 bit cho từng hàng để chữ của ta di chuyển từ trái sang phải bảng led. Em đã ngâm cứu cái này mãi rồi mà chưa thể hiểu đc
                        cái này mình cũng chưa tìm hiểu, nhưng mình nghĩ đọc dữ liệu từ cuối bảng mã rồi cho dec index_point thay vì inc index_point. mình nghĩ như vậy

                        Comment


                        • #13
                          Nguyên văn bởi v.sondt Xem bài viết
                          sơ đồ nguyên lí đó bạn
                          cái sơ đồ nguyên lí không biết mình đê đâu rồi k biết có lẽ hôm trước cài win không cất nó nên bay hơi rồi. cái phần cứng nó cũng không khác mô phỏng lắm đâu chỉ thêm mấy con tran nữa thôi mà

                          Comment


                          • #14
                            PHP Code:
                            #include <at89x52.h>
                            #include<stdlib.h>
                            #include<intrins.h>
                            #include<stdio.h>
                            sbit    DATA P0^7;
                            sbit    CLK P0^6

                            unsigned char code mahang[7]={0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE};    
                                
                            unsigned char code array[119]={
                                                        
                            0x000x00,0x00,0x000x00,0x000x00,0x00,0xF00x700xEE0x460x730xE20x380xC0,0x00,
                                                           
                            0x000x00,0x00,0x000x00,0x000x00,0x00,0x480x880x440x420x220xA20x190x80,0x00,
                                                        
                            0x000x00,0x00,0x000x00,0x000x00,0x00,0x440x880x440xA30x200x850x150x80,0x00
                                                        
                            0x000x00,0x00,0x000x00,0x000x00,0x00,0x440x880x280xA20xA00x850x160x80,0x00
                                                        
                            0x000x00,0x00,0x000x00,0x000x00,0x00,0x440x880x280xE20x600x870x120x80,0x00
                                                        
                            0x000x00,0x00,0x000x00,0x000x00,0x00,0x480x880x290x120x200x880x920x80,0x00
                                                        
                            0x000x00,0x00,0x000x00,0x000x00,0x00,0xF00x700x130x9F0x210xDC0xFA0xC0,0x00
                                                         
                            };
                            unsigned char warray=17;
                            unsigned char *contro[7];
                            unsigned char *Backcontro[7];
                            //======================================================================================================== 
                            void delay()
                            {
                             
                            unsigned char b=50;
                                while(
                            b--);


                            //=================================================
                            void xuat(void)
                            {
                                
                            CLK=0;     //xuat du lieu ra output
                                
                            CLK=1;
                            }     
                            //===============================================
                            void chay()
                            {    
                                
                                
                            unsigned char i,j,k,kk,n,temp,hang=0,*byte1st,*byteth;
                                 
                            unsigned int tre;
                                for(
                            i=0;i<=warray;i++)
                                {
                                    for(
                            kk=0;kk<=7;kk++)
                                    {  
                            hang=0;tre=2000;
                                    while(
                            tre--){
                                    while(
                            hang<7) {                    
                                     
                            byte1st contro[hang];
                                     
                            //lay tu bit thu 0 den bit kk cua byte dau tien
                                     
                            temp= ~(*byte1st);
                                     if(
                            kk!=0temp=temp<<kk;
                                     for(
                            j=kk;j<=7;j++)
                                     {
                                         
                            temp=temp<<1;
                                        
                            DATA=CY;           //carry flag
                                        
                            CLK=0CLK=1;
                                     }
                                     
                            //lay du bit 0..7 cua n byte tiep theo
                                     
                            for(j=1;j<=11;j++)          //11 la 12 ma 8 bit cho bang led 96 cot (tru 1)
                                     
                            {
                                         
                            byteth=byte1st+j;
                                        
                            temp= ~(*byteth);
                                        for(
                            k=0;k<=7;k++)
                                        {
                                            
                            temp=temp<<1;
                                            
                            DATA=CY;
                                            
                            CLK=0CLK=1;
                                        }    
                                     }
                                     
                            //lay tu bit thu kk den bit thu 7 cua byte cuoi cung
                                     
                            if(kk!=0)
                                     {
                                         
                            byteth=byte1st+12;
                                        
                            temp=~(*byteth);
                                        for(
                            j=0;j<=kk-1;j++)
                                        {
                                            
                            temp=temp<<1;
                                            
                            DATA=CY;
                                            
                            CLK=0CLK=1;
                                        }
                                      } 
                                      
                                      
                            xuat();
                                      
                            P2=mahang[hang];     
                                      
                            delay();                              
                                      
                            P2=0xff;
                                      
                            hang++;
                                    } 
                                    }    
                            //delay(200);
                                    
                            }
                                    for(
                            n=0;n<=6;n++)
                                        {
                                            
                            contro[n]++;
                                        }
                                }
                                
                            }
                            //======================================== 
                            void main()
                            {  
                                
                            unsigned char i;
                                for(
                            i=0;i<=6;i++)
                                {
                                    
                            contro[i]=array+i*warray;
                                    
                            Backcontro[i]=contro[i];
                                }
                            while(
                            1)
                            {    
                                for(
                            i=0;i<=6;i++)
                                {
                                    
                            contro[i]=Backcontro[i];
                                }
                                
                            delay();
                                
                            chay();
                            }
                                

                            Đây là code em viết dùng mảng con trỏ, em học theo bài của bác nghaiha :http://www.dientuvietnam.net/forums/...6/index34.html

                            Ko biết nó bị sai chỗ nào mà cái chuỗi "DO VAN TAM" nó chạy thì vẫn chạy nhưng nó bị dich lên phía trên mất 1 hàng. Các bác xem giùm e với

                            Comment


                            • #15
                              cái này mình không biết bạn ơi, mình mới chỉ biết về asm thôi à. mình đoán code của bạn sai ở cái chỗ khai báo mảng mahang của bạn mình thấy bạn khai báo mảng có 7 phần tử, matrix 8x8 thì có 8 hàng, bạn thử khai báo mảng
                              mahang[8]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE}; và sửa như thế này xem được không nhé
                              xuat();
                              P2=mahang[hang];
                              delay();
                              P2=0xff;
                              hang++;
                              }
                              } //delay(200);
                              }
                              for(n=0;n<=7;n++)
                              {
                              contro[n]++;

                              mình không biết về C nên chỉ đoán vậy thôi, nếu không đúng bạn đừng chê cười nhé
                              Last edited by lengo90; 19-12-2011, 03:21.

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X