Mạch Quang Báo Matrix 74HC595 16x64

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • Thienprodhtd
    Thành viên mới
    • Jan 2012
    • 5

    #1

    Mạch Quang Báo Matrix 74HC595 16x64

    Mạch Quang Báo Matrix 74HC595 16x64

    Bạn nhấp vào ảnh để xem ảnh lớn hơn nha !!

    Click image for larger version

Name:	c.jpg
Views:	1
Size:	94.6 KB
ID:	1413037

    Dưới đây là code chương trình.


    #include "regx52.h"
    #include "font_code.h"
    #define scan_led P2
    /////////////////////////////
    //////THIET LAP BAN DAU//////
    #define so_led 8 //boi cu?a 8
    #define so_hang 16 //chieu cao cua font chu
    #define multi so_hang+1 //
    #define cot_font 11 //chieu ngang cua font chu
    #define en_run 1 //1: chay <----> 0 dung
    ////////////////////////////

    typedef unsigned char uchar;
    typedef unsigned int uint;
    sbit rck=P3^2;
    sbit srck=P3^0;
    sbit ser_in=P3^1;
    sbit en_hc154=P3^3;

    bit run=0,en=en_run;
    idata uchar display_buffer[so_hang][so_led];
    idata uchar shift_buffer[so_hang];
    uchar row_buffer[16]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
    uchar row_led[16]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
    uchar tocdoh=0xf6,tocdol=0x00;
    uchar kitu_code=0;
    char row=multi;
    void shift_dataled();
    void test_led();
    void clear_buffer();
    void run_string();
    void copy_datacode();
    void scan_dataled_code();
    void init_interrupt();

    ////////////////////////////////
    ///////ngat timer 0////////////
    void isr_timer0() interrupt 1 using 1
    {
    TH0=tocdoh,TL0=tocdol;
    if(--row==-1) row=multi-1;
    shift_dataled();
    if(row==so_hang) run=1;
    }
    ////////////////////////////////
    /////////chuong trinh chinh/////
    void main()
    {
    uchar w;
    init_interrupt();
    test_led();
    clear_buffer();
    if(en==0) scan_dataled_code();

    while(1)
    {
    if((run==1)&(en==1)){
    IE&=0xfd;
    run_string(),run=0;
    if(++w==8) copy_datacode(),w=0;
    row=so_hang;
    IE|=0x02;
    }

    }

    }
    ////////////////////////////////
    ////////kiem tra led////////////
    void test_led()
    {
    uchar i,j;
    uint t_delay=10000;
    for(i=0;i<so_hang;i++)
    for(j=0;j<so_led;j++)
    display_buffer[i][j]=0xff;
    while(--t_delay);
    }
    void clear_buffer()
    {
    uchar i,j;
    for(i=0;i<so_hang;i++)
    for(j=0;j<so_led;j++)
    display_buffer[i][j]=0;
    }

    ////////////////////////////////
    ///////dich data va quet led////
    void shift_dataled()
    {
    char i,j;

    srck=0;
    rck=0;
    if(row<so_hang){
    for(i=0;i<so_led;i++)
    for(j=0;j<8;j++){
    ser_in=display_buffer[row][i]&row_buffer[7-j];
    srck=1;
    srck=0;
    }
    en_hc154=1;
    rck=1;
    rck=0;
    scan_led=row_led[row];
    en_hc154=0;
    }

    }
    void copy_datacode()
    {
    uchar i;
    static uchar j;
    for(i=0;i<so_hang;i++)
    shift_buffer[i]=Bmp002[Bmp002[2]*i+3+j];
    if(++j==Bmp002[2]) j=0;
    }
    ////////////////////////////////
    ////////chay chuoi//////////////
    void run_string()
    {
    uchar i,j;
    for(i=0;i<so_hang;i++)
    {
    for(j=0;j<so_led;j++)
    {
    display_buffer[i][j]<<=1;
    if(j!=(so_led-1)) display_buffer[i][j]|display_buffer[i][j+1]&0x80)>>7);
    else display_buffer[i][j]|shift_buffer[i]&0x80)>>7);
    }
    shift_buffer[i]<<=1;
    }
    }
    void scan_dataled_code()
    {
    uchar i,j;
    for(i=0;i<so_hang;i++){
    for(j=0;j<so_led;j++){
    display_buffer[i][j]=Bmp002[Bmp002[2]*i + 3+j];
    }
    }
    }
    ////////////////////////////////
    //////khoi dong ngat////////////
    void init_interrupt()
    {
    TMOD=0x01; //timer0 che do 1 16b
    TH0=0xF8;
    TL0=0x30;
    TR0=1;
    TR1=1;
    IE=0x82; //cho phep ngat timer0
    }
  • cogaihalan
    Thành viên chính thức
    • Mar 2012
    • 92

    #2
    Nguyên văn bởi Thienprodhtd Xem bài viết
    Mạch Quang Báo Matrix 74HC595 16x64

    Bạn nhấp vào ảnh để xem ảnh lớn hơn nha !!

    [ATTACH=CONFIG]45432[/ATTACH]

    Dưới đây là code chương trình.


    #include "regx52.h"
    #include "font_code.h"
    #define scan_led P2
    /////////////////////////////
    //////THIET LAP BAN DAU//////
    #define so_led 8 //boi cu?a 8
    #define so_hang 16 //chieu cao cua font chu
    #define multi so_hang+1 //
    #define cot_font 11 //chieu ngang cua font chu
    #define en_run 1 //1: chay <----> 0 dung
    ////////////////////////////

    typedef unsigned char uchar;
    typedef unsigned int uint;
    sbit rck=P3^2;
    sbit srck=P3^0;
    sbit ser_in=P3^1;
    sbit en_hc154=P3^3;

    bit run=0,en=en_run;
    idata uchar display_buffer[so_hang][so_led];
    idata uchar shift_buffer[so_hang];
    uchar row_buffer[16]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
    uchar row_led[16]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
    uchar tocdoh=0xf6,tocdol=0x00;
    uchar kitu_code=0;
    char row=multi;
    void shift_dataled();
    void test_led();
    void clear_buffer();
    void run_string();
    void copy_datacode();
    void scan_dataled_code();
    void init_interrupt();

    ////////////////////////////////
    ///////ngat timer 0////////////
    void isr_timer0() interrupt 1 using 1
    {
    TH0=tocdoh,TL0=tocdol;
    if(--row==-1) row=multi-1;
    shift_dataled();
    if(row==so_hang) run=1;
    }
    ////////////////////////////////
    /////////chuong trinh chinh/////
    void main()
    {
    uchar w;
    init_interrupt();
    test_led();
    clear_buffer();
    if(en==0) scan_dataled_code();

    while(1)
    {
    if((run==1)&(en==1)){
    IE&=0xfd;
    run_string(),run=0;
    if(++w==8) copy_datacode(),w=0;
    row=so_hang;
    IE|=0x02;
    }

    }

    }
    ////////////////////////////////
    ////////kiem tra led////////////
    void test_led()
    {
    uchar i,j;
    uint t_delay=10000;
    for(i=0;i<so_hang;i++)
    for(j=0;j<so_led;j++)
    display_buffer[i][j]=0xff;
    while(--t_delay);
    }
    void clear_buffer()
    {
    uchar i,j;
    for(i=0;i<so_hang;i++)
    for(j=0;j<so_led;j++)
    display_buffer[i][j]=0;
    }

    ////////////////////////////////
    ///////dich data va quet led////
    void shift_dataled()
    {
    char i,j;

    srck=0;
    rck=0;
    if(row<so_hang){
    for(i=0;i<so_led;i++)
    for(j=0;j<8;j++){
    ser_in=display_buffer[row][i]&row_buffer[7-j];
    srck=1;
    srck=0;
    }
    en_hc154=1;
    rck=1;
    rck=0;
    scan_led=row_led[row];
    en_hc154=0;
    }

    }
    void copy_datacode()
    {
    uchar i;
    static uchar j;
    for(i=0;i<so_hang;i++)
    shift_buffer[i]=Bmp002[Bmp002[2]*i+3+j];
    if(++j==Bmp002[2]) j=0;
    }
    ////////////////////////////////
    ////////chay chuoi//////////////
    void run_string()
    {
    uchar i,j;
    for(i=0;i<so_hang;i++)
    {
    for(j=0;j<so_led;j++)
    {
    display_buffer[i][j]<<=1;
    if(j!=(so_led-1)) display_buffer[i][j]|display_buffer[i][j+1]&0x80)>>7);
    else display_buffer[i][j]|shift_buffer[i]&0x80)>>7);
    }
    shift_buffer[i]<<=1;
    }
    }
    void scan_dataled_code()
    {
    uchar i,j;
    for(i=0;i<so_hang;i++){
    for(j=0;j<so_led;j++){
    display_buffer[i][j]=Bmp002[Bmp002[2]*i + 3+j];
    }
    }
    }
    ////////////////////////////////
    //////khoi dong ngat////////////
    void init_interrupt()
    {
    TMOD=0x01; //timer0 che do 1 16b
    TH0=0xF8;
    TL0=0x30;
    TR0=1;
    TR1=1;
    IE=0x82; //cho phep ngat timer0
    }
    bạn ơj bạn có thêm hjệu ứng mới k ở đây có 1 hjệu ứng à

    Comment

    • maingochoc
      Thành viên tích cực
      • Jan 2010
      • 501

      #3
      Hiệu ứng.

      Muốn thay đổi hiệu ứng thì thay các mã hex trong RAM cụ thể là trong mảng display_buffer

      Comment

      • cogaihalan
        Thành viên chính thức
        • Mar 2012
        • 92

        #4
        ////////////////////////////////
        ////////chay chuoi//////////////
        void run_string()
        {
        uchar i,j;
        for(i=0;i<so_hang;i++)
        {
        for(j=0;j<so_led;j++)
        {
        display_buffer[i][j]>>=1;
        if(j!=(so_led-1)) display_buffer[i][j]|display_buffer[i][j+1]&0x01)<<7);
        else display_buffer[i][j]|shift_buffer[i]&0x01)<<7);
        }
        shift_buffer[i]>>=1;
        }
        }
        Bạn coi sai chỗ nào vậy bạn?

        Comment

        • maingochoc
          Thành viên tích cực
          • Jan 2010
          • 501

          #5
          Code

          Mình thấy bình thường mà.
          Code này của bác tienhuypro trên 4r mình.
          Code chạy ngon lành.
          Nếu pạn copy ở bên trên thì không lỗi đâu.

          Comment

          • cogaihalan
            Thành viên chính thức
            • Mar 2012
            • 92

            #6
            Nguyên văn bởi maingochoc Xem bài viết
            Mình thấy bình thường mà.
            Code này của bác tienhuypro trên 4r mình.
            Code chạy ngon lành.
            Nếu pạn copy ở bên trên thì không lỗi đâu.
            thì mình có nói code sai đâu ý mình là thêm 1 số hiệu ứng nữa bạn coi code trên nó chưa đúng chỗ nào vậy?

            Comment

            • maingochoc
              Thành viên tích cực
              • Jan 2010
              • 501

              #7
              Hehe !

              Bạn muốn nó chạy từ trái sang phải hả.
              Sửa mỗi chỗ này không được đâu.
              Còn phải sửa ở hàm copy data code led,... nữa

              Comment

              • cogaihalan
                Thành viên chính thức
                • Mar 2012
                • 92

                #8
                Nếu bạn làm rồi úp code lên đây đc k bạn

                Comment

                • maingochoc
                  Thành viên tích cực
                  • Jan 2010
                  • 501

                  #9
                  Sr !

                  Mình chỉ đọc hiểu code thui chứ chưa sửa.

                  Comment

                  • cogaihalan
                    Thành viên chính thức
                    • Mar 2012
                    • 92

                    #10
                    à vậy a ^^ nhưng bạn cũng hiểu thì mới nói vậy chứ nếu bạn rảnh thì chia sẻ code nha!!
                    bye!

                    Comment

                    • myth-coder
                      Thành viên tích cực
                      • Aug 2011
                      • 303

                      #11
                      Đây là những thứ cơ bản nhất để để bạn lập trình với matrix, bạn nhớ cài notepad++ để mở các tệp .c hoặc .h vì rất có thể trong đó có ghi chú bằng tiếng việt. Nếu có gì không hiểu các bạn cứ đưa câu hỏi lên đây mình sẽ giải thích trong phạm vi hiểu biết của mình. Chúc các bạn học tốt, mong rằng đừng ai nhờ đưa chữ "này" chữ "kia" lên matrix nữa.
                      Attached Files

                      Comment

                      • capuchino
                        Thành viên mới
                        • Aug 2007
                        • 26

                        #12
                        Bạn myth-coder có thể nói thêm về chữ có dấu được không ạ?

                        Comment

                        • maingochoc
                          Thành viên tích cực
                          • Jan 2010
                          • 501

                          #13
                          Chữ có dấu.

                          Bạn muốn hỏi chữ có dấu trong ghi chú hay trong hiển thị trên matrix.
                          Nếu hiển thị trên matrix thì cần dùng soft tạo font có dấu.

                          Comment

                          • myth-coder
                            Thành viên tích cực
                            • Aug 2011
                            • 303

                            #14
                            Dùng soft thì mình cũng không biết phần mềm nào cả, nhưng bạn có thể ngồi vẽ, mà do mã ở trên mình viết theo kiểu custom font nên bạn cứ vẽ chữ bình thường sau đó gán cho nó 1 ký tự bất kỳ nào đó để nhận dạng. Bạn chỉ cần vẽ ra những chữ mà bạn cần sử dụng thôi chứ không cần vẽ full bảng mã, những chữ nào không dùng thì có thể chuyển sang làm ký tự nhận dạng cho chữ có dấu ok. Hoặc nếu bạn thích 1 kiểu freestyle theo đúng nghĩa thì xây dựng lại hàm finloc để nó chấp nhận kiểu input "coongj hoaf xax hooij chur nghiax Vieetj Nam" và nó sẽ hiểu là "cộng hòa xã hội chủ nghĩa Việt Nam" mình cũng muốn xây dựng nhưng thực ra riêng mình thì chưa có nhu cầu sử dụng nên cũng tặc lưỡi cho qua. Ưu điểm của phuơng pháp này là bạn chỉ cần tạo bảng mã cho 1 số ký tự "có hạn" nên tốn rất ít dung lượng bộ nhớ, còn input text thì gần như "unlimited", bộ nhớ dành cho bảng mã sẽ gồm "Số ký tự cần dùng trong chuơng trình(KTSD)" * 8 (byte) KTSD thường rất ít chỉ khoảng <=100 ký tự cả có dấu và không dấu + 1 số ký tự đặc biệt nên bộ nhớ dành cho bộ font là <=800 bytes.
                            Last edited by myth-coder; 31-07-2013, 09:24. Lý do: thay finchar bằng findloc theo như trong code, mình viết cái này khá lâu rồi nên quên tên hàm mình dùng :(

                            Comment

                            • maingochoc
                              Thành viên tích cực
                              • Jan 2010
                              • 501

                              #15
                              Soft

                              Có nhiều soft để tạo mã mà. Ví dụ như RBT của Bùi Việt Hoàng,...
                              Ngồi vẽ thì hơi mất thời gian,và các chữ ko đều nhau.

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...