Thông báo

Collapse
No announcement yet.

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

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

  • 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
    }

  • #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


    • #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


      • #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


        • #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


          • #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


            • #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


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

                Comment


                • #9
                  Sr !

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

                  Comment


                  • #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


                    • #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


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

                        Comment


                        • #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


                          • #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, 10: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


                            • #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...
                              X