RP Store Tìm linh kiện theo mã, gửi BOM nhận báo giá Gửi BOM

giúp em hiệu ứng quét theo hàng

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts

  • beiudientu
    replied
    Nguyên văn bởi Mr_se7en Xem bài viết
    Mình kiếm được tài liệu rồi đây. Đã làm chạy thành công rồi. Chương trình này đưa 24 chữ cái ( Chữ IN HOA đó nha) vào rối muốn chữ nào xuât ra thì chỉ việc đổi chữ "DEMO" thành chữ mình muốn nha. Chúc bạn thành công


    #include <AT89X52.h>
    //--------------------------------
    //khai bao bien
    //16hang, 4led
    //P0 SELECT HANG
    sbit clk = P2^5;
    sbit s_clk = P2^4;
    sbit data_d = P2^6;
    sbit data_x = P2^7;
    //--------------------------------
    unsigned char n,m,l,step,color =0;
    unsigned int count =0,temp_1=0,temp_2=0;
    //----------------------------------------------
    /*font du lieu chi lap trinh cho chu IN HOA,
    neu muon cho chu thuong thi tao them font chu IN THUONG
    cho bang ma font */
    //FONT TIENG VIET 24 CHU CAI
    unsigned char code lib_font[]={
    0x00,0x00,0x00,0x10,0x38,0x7C,0xFE,0xC6,0xC6,0xFE, 0xFE,0xC6,0xC6,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xF8,0xFE,0xC6,0xC6,0xFC,0xFC,0xC6 ,0xC6,0xFE,0xFC,0x00,0x00,0x00
    ,0x00,0x00,0x00,0x7C,0xFE,0xC0,0xC0,0xC0,0xC0,0xC0 ,0xC0,0xFE,0x7C,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xF8,0xFC,0xC6,0xC6,0xC6,0xC6,0xC6 ,0xC6,0xFC,0xF8,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xFE,0xFE,0xC0,0xC0,0xF8,0xF8,0xC0 ,0xC0,0xFE,0xFE,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xFE,0xFE,0xC0,0xC0,0xFC,0xFC,0xC0 ,0xC0,0xC0,0xC0,0x00,0x00,0x00
    ,0x00,0x00,0x00,0x7C,0xFE,0xC0,0xC0,0xC0,0xCE,0xC6 ,0xC6,0xFE,0x7C,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xFE,0xFE,0xC6 ,0xC6,0xC6,0xC6,0x00,0x00,0x00
    ,0x00,0x00,0x00,0x7E,0x3C,0x18,0x18,0x18,0x18,0x18 ,0x18,0x3C,0x7E,0x00,0x00,0x00
    ,0x00,0x00,0x00,0x7E,0x7E,0x18,0x18,0x18,0x18,0x98 ,0xD8,0xF8,0x70,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xC6,0xCC,0xD8,0xF0,0xE0,0xE0,0xF0 ,0xD8,0xCC,0xCE,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC2 ,0xC6,0xFE,0xFE,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xC6,0xC6,0xEE,0xFE,0xD6,0xC6,0xC6 ,0xC6,0xC6,0xC6,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xC6,0xC6,0xE6,0xE6,0xF6,0xDE,0xCE ,0xCE,0xC6,0xC6,0x00,0x00,0x00
    ,0x00,0x00,0x00,0x7C,0xFE,0xC6,0xC6,0xC6,0xC6,0xC6 ,0xC6,0xFE,0x7C,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xFC,0xFE,0xC6,0xC6,0xFE,0xFC,0xC0 ,0xC0,0xC0,0xC0,0x00,0x00,0x00
    ,0x00,0x00,0x00,0x7C,0xFE,0xC6,0xC6,0xC6,0xD6,0xDA ,0xCC,0xF6,0x7B,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xFC,0xFE,0xC6,0xC6,0xFE,0xFC,0xD8 ,0xDC,0xCE,0xC6,0x00,0x00,0x00
    ,0x00,0x00,0x00,0x7C,0xFE,0xC0,0xC0,0xFC,0x7E,0x06 ,0x06,0xFE,0x7C,0x00,0x00,0x00
    ,0x00,0x00,0x00,0x7E,0x7E,0x5A,0x18,0x18,0x18,0x18 ,0x18,0x18,0x18,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6 ,0xC6,0xFE,0x7C,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xEE ,0x7C,0x38,0x10,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xD6,0xFE ,0xEE,0xC6,0xC6,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xC6,0xC6,0x6C,0x38,0x10,0x10,0x38 ,0x6C,0xC6,0xC6,0x00,0x00,0x00
    ,0x00,0x00,0x00,0x66,0x66,0x66,0x7E,0x3C,0x18,0x18 ,0x18,0x3C,0x7E,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xFE,0xFE,0x06,0x0C,0x18,0x30,0x60 ,0xC0,0xFE,0xFE,0x00,0x00,0x00
    ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00};
    unsigned char code lib_dis []={"ABCDEFGHIJKLMNOPQRSTUVWXYZ "};
    unsigned char code lib_out []={" DEMO @"};
    unsigned char data_out [5];
    unsigned char data_temp[5];
    void delay_ms(unsigned int data_in)
    {
    unsigned int i,j;
    for(i=0;i<=data_in;i++)
    for(j=0;j<=33;j++);
    }
    //------------------------------------------------------
    void out_serial(unsigned char data_in,unsigned char loop)
    {
    unsigned char i,j;
    for(i=0;i<=loop;i++)
    {
    j = data_in;
    j = j>>i;
    j &= 0x01;
    if(j ==0)
    {
    data_x =0;
    data_d =0;
    clk =0;
    clk =1;
    }
    else
    {
    if(color==0) //RED
    {
    data_d =1;
    data_x =0;
    clk =0;
    clk =1;
    }
    else
    if(color==1) //GREEN
    {
    data_d =0;
    data_x =1;
    clk =0;
    clk =1;
    }
    else
    {
    data_d =1; //YELLOW
    data_x =1;
    clk =0;
    clk =1;
    }
    }

    }
    }
    //----------------------------------------------------------
    void tra_ma (unsigned char data_in)
    {
    unsigned char i,j,k=0;
    for(i=data_in;i<=(data_in + 4);i++)
    {
    data_temp[k] = lib_out[i];
    k ++;
    }
    for(i=0;i<=4;i++)
    {
    for(j=0;j<=26;j++)
    {
    if(data_temp[i] == lib_dis[j])
    data_out[i] = j;
    }
    }
    }
    //------------------------------------------------------------
    void next_led(unsigned char data_in,unsigned char dich_bit)
    {
    out_serial(data_in,7-dich_bit);
    }
    //------------------------------------------------------------
    void hien_thi(unsigned char hang,unsigned char dich_bit)
    {
    unsigned char i;
    for(i=0;i<=3;i++)
    {
    out_serial(lib_font[(data_out[4-i])*16+hang],7);
    }
    next_led (lib_font [(data_out[0])*16+hang],dich_bit);
    }
    //-----------------------------------------------------
    void change_color () interrupt 1 //ngat timer0
    {
    TR0 =0;
    TH0=0x3C;
    TL0=0xB0;
    TR0=1;
    count ++;
    if(count == 40) //delay 50.000uS * 80 = 2s (Crystal = 22.1184MHz)
    {
    count =0;
    color ++;
    if(color==3)
    color=0;
    }
    }
    //---------------------------------------------------

    void stop_data()
    {
    unsigned char i,k,u;
    for(k=0;k<=150;k++)
    {
    for(u=0;u<=15;u++)
    {
    for(i=0;i<=3;i++)
    {
    out_serial(lib_font[(data_out[3-i])*16+u],7);
    }
    delay_ms(2);
    P0 =255;
    s_clk =0;
    s_clk =1;
    P0 =u;
    }
    }

    }
    //------------------------------------------------------
    void down_up()
    {
    unsigned int u,i,j,k,v;
    tra_ma(4);
    for(k=0;k<=15;k++)
    {
    for(j=0;j<=20;j++)
    {
    v = 0;
    for(u=0;u<=15;u++)
    {
    if(u>=15-k)
    {
    for(i=0;i<=3;i++)
    {
    out_serial(lib_font[(data_out[3-i])*16 + v],7);
    }
    delay_ms(2);
    P0 =255;
    s_clk =0;
    s_clk =1;
    P0 =u;
    v++;
    }
    }
    }
    }
    for(k=0;k<=15;k++)
    {

    for(j=0;j<=20;j++)
    {
    v = k;
    for(u=0;u<=15;u++)
    {
    if(u <= 15-k)
    {
    for(i=0;i<=3;i++)
    {
    out_serial(lib_font[(data_out[3-i])*16 + v],7);
    }
    delay_ms(2);
    P0 =255;
    s_clk =0;
    s_clk =1;
    P0 =u;
    v++;

    }
    }
    }
    }
    }
    void up_down()
    {
    unsigned int u,i,j,k,v;
    tra_ma(4);
    for(k=0;k<=15;k++)
    {
    for(j=0;j<=20;j++)
    {
    v = 15-k;
    for(u=0;u<=15;u++)
    {
    if(u<=k)
    {
    for(i=0;i<=3;i++)
    {
    out_serial(lib_font[(data_out[3-i])*16 + v],7);
    }
    delay_ms(2);
    P0 =255;
    s_clk =0;
    s_clk =1;
    P0 =u;
    v++;
    }
    }
    }
    }
    tra_ma(4);
    for(k=0;k<=15;k++)
    {
    for(j=0;j<=20;j++)
    {
    v = 0;
    for(u=0;u<=15;u++)
    {
    if(u>=k)
    {
    for(i=0;i<=3;i++)
    {
    out_serial(lib_font[(data_out[3-i])*16 + v],7);
    }
    delay_ms(2);
    P0 =255;
    s_clk =0;
    s_clk =1;
    P0 =u;
    v++;
    }
    }
    }
    }
    }
    @ Anh Mr_se7en sao trong chương trình này em không thấy hàm chính void main () đâu cả vậy... và vòng lặp liên tục vd while(1) chẳng hạn.. em đưa vào mô phỏng và điều khiển thực tế thì không thấy port điều khiển cho ic quét hàng 74hc154 được tác động... anh cho em hỏi thêm câu code này nữa out_serial(lib_font[(data_out[3-i])*16 + v],7); anh giải thích cho em cái lệnh data_out[3-i])*16 + v] nó sẽ trỏ tới mảng data_out nhưng sao cần *16 ..

    Leave a comment:


  • Mr_se7en
    replied
    Nguyên văn bởi hoangphat Xem bài viết
    wa cái này em định hỏi các pác có bít thì giúp em ha
    giải thích cho em cách làm dòng chữ chạy từ dưới lên dc ko
    có đoạn code ví dụ thì càng tốt (viết bàng asm)

    Chương trình mình up lên cũng có hiệu ứng chạy từ dưới lên đó. Có cả trên xuống, phải qua trái đó. có gì bạn tham khảo nha.

    Leave a comment:


  • hoangphat
    replied
    wa cái này em định hỏi các pác có bít thì giúp em ha
    giải thích cho em cách làm dòng chữ chạy từ dưới lên dc ko
    có đoạn code ví dụ thì càng tốt (viết bàng asm)

    Leave a comment:


  • Thanh Hieu
    replied
    mình chỉ làm 4 led ma tran ,mình muốn quét cột dung 74138,dich du liệu song song sang nối tiếp dùng 74595 thì phải làm sao?

    Leave a comment:


  • Mr_se7en
    replied
    đây là mạch ĐK
    Attached Files

    Leave a comment:


  • Mr_se7en
    replied
    Nguyên văn bởi beiudientu Xem bài viết
    Anh post bai thì trong câu lệnh anh chú thích trong từng câu lệnh với để mọi người cùng hiểu, không thì anh mô tả phần cứng thì còn hiểu chứ chương trình không thì khó xem was... ! dù sao cũng bít ơn anh.. ráng giúp anh nhé !!
    Đây là sơ đồ phần cứn. Mạch ĐK thì rõ ràng rồi còn mạch hiển thị thì sử dụng module 2 led ghép lại. Tùy y bạn muốn ghép bao nhiêu thì ghép. O mạch này thì mình ghép 16hàng*32cột đó. Phần mềm thì quét theo hàng.
    Attached Files

    Leave a comment:


  • beiudientu
    replied
    111111111111111111111

    Leave a comment:


  • beiudientu
    replied
    Nguyên văn bởi hai_abc Xem bài viết
    @ beiudientu
    Để mai mình xem kỹ rồi gửi cho bạn nhé!
    em đợi repply của anh dài cả cổ rồi đó nghen chờ tiếp vậy...!

    Leave a comment:


  • beiudientu
    replied
    Kết hợp assemly và Keilc như thế nào thế các anh ơi ??

    Mọi người nói assembly là ngôn ngữ cấp thấp mà em được học đầu tiên khi làm wen với dòng 8051.. tuy nhiên khi biết nó rồi chuyển sang dùng C có lẽ mấy anh ở đây cũng tự học ... thì cũng thấy nó có nhiều cái hay.. và trong chương trình C.. dùng trình dịch Keil C chẳng hạn có khả năng cho phép người lập trình kết hợp cả code assem.. và ngôn ngữ c.. nhưng khi em làm thử thì báo lỗi tùm lum ah !! các anh cho một ví dụ đơn giản có sự kết hợp cả c và assem nhé .. giải dụ nháy một con led đơn thôi mà trong đó tham số từ C có thể truyền vào đoạn code của assem và ngược lại !!..

    Leave a comment:


  • cddt061
    replied
    Mình học ASM nên đọc code C như nhìn bức vách, mà nhìn vách còn dễ chịu hơn
    Ai trình cao changslate qua ASM cho ae ASM vọc với!

    Leave a comment:


  • thanh_khuong
    replied
    bạn lên tìm hiêu ki về IC số nha

    Leave a comment:


  • beiudientu
    replied
    Nguyên văn bởi Mr_se7en Xem bài viết
    Mình kiếm được tài liệu rồi đây. Đã làm chạy thành công rồi. Chương trình này đưa 24 chữ cái ( Chữ IN HOA đó nha) vào rối muốn chữ nào xuât ra thì chỉ việc đổi chữ "DEMO" thành chữ mình muốn nha. Chúc bạn thành công


    #include <AT89X52.h>
    //--------------------------------
    //khai bao bien
    //16hang, 4led
    //P0 SELECT HANG
    sbit clk = P2^5;
    sbit s_clk = P2^4;
    sbit data_d = P2^6;
    sbit data_x = P2^7;
    //--------------------------------
    unsigned char n,m,l,step,color =0;
    unsigned int count =0,temp_1=0,temp_2=0;
    //----------------------------------------------
    /*font du lieu chi lap trinh cho chu IN HOA,
    neu muon cho chu thuong thi tao them font chu IN THUONG
    cho bang ma font */
    //FONT TIENG VIET 24 CHU CAI
    unsigned char code lib_font[]={
    0x00,0x00,0x00,0x10,0x38,0x7C,0xFE,0xC6,0xC6,0xFE, 0xFE,0xC6,0xC6,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xF8,0xFE,0xC6,0xC6,0xFC,0xFC,0xC6 ,0xC6,0xFE,0xFC,0x00,0x00,0x00
    ,0x00,0x00,0x00,0x7C,0xFE,0xC0,0xC0,0xC0,0xC0,0xC0 ,0xC0,0xFE,0x7C,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xF8,0xFC,0xC6,0xC6,0xC6,0xC6,0xC6 ,0xC6,0xFC,0xF8,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xFE,0xFE,0xC0,0xC0,0xF8,0xF8,0xC0 ,0xC0,0xFE,0xFE,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xFE,0xFE,0xC0,0xC0,0xFC,0xFC,0xC0 ,0xC0,0xC0,0xC0,0x00,0x00,0x00
    ,0x00,0x00,0x00,0x7C,0xFE,0xC0,0xC0,0xC0,0xCE,0xC6 ,0xC6,0xFE,0x7C,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xFE,0xFE,0xC6 ,0xC6,0xC6,0xC6,0x00,0x00,0x00
    ,0x00,0x00,0x00,0x7E,0x3C,0x18,0x18,0x18,0x18,0x18 ,0x18,0x3C,0x7E,0x00,0x00,0x00
    ,0x00,0x00,0x00,0x7E,0x7E,0x18,0x18,0x18,0x18,0x98 ,0xD8,0xF8,0x70,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xC6,0xCC,0xD8,0xF0,0xE0,0xE0,0xF0 ,0xD8,0xCC,0xCE,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC2 ,0xC6,0xFE,0xFE,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xC6,0xC6,0xEE,0xFE,0xD6,0xC6,0xC6 ,0xC6,0xC6,0xC6,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xC6,0xC6,0xE6,0xE6,0xF6,0xDE,0xCE ,0xCE,0xC6,0xC6,0x00,0x00,0x00
    ,0x00,0x00,0x00,0x7C,0xFE,0xC6,0xC6,0xC6,0xC6,0xC6 ,0xC6,0xFE,0x7C,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xFC,0xFE,0xC6,0xC6,0xFE,0xFC,0xC0 ,0xC0,0xC0,0xC0,0x00,0x00,0x00
    ,0x00,0x00,0x00,0x7C,0xFE,0xC6,0xC6,0xC6,0xD6,0xDA ,0xCC,0xF6,0x7B,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xFC,0xFE,0xC6,0xC6,0xFE,0xFC,0xD8 ,0xDC,0xCE,0xC6,0x00,0x00,0x00
    ,0x00,0x00,0x00,0x7C,0xFE,0xC0,0xC0,0xFC,0x7E,0x06 ,0x06,0xFE,0x7C,0x00,0x00,0x00
    ,0x00,0x00,0x00,0x7E,0x7E,0x5A,0x18,0x18,0x18,0x18 ,0x18,0x18,0x18,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6 ,0xC6,0xFE,0x7C,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xEE ,0x7C,0x38,0x10,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xD6,0xFE ,0xEE,0xC6,0xC6,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xC6,0xC6,0x6C,0x38,0x10,0x10,0x38 ,0x6C,0xC6,0xC6,0x00,0x00,0x00
    ,0x00,0x00,0x00,0x66,0x66,0x66,0x7E,0x3C,0x18,0x18 ,0x18,0x3C,0x7E,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xFE,0xFE,0x06,0x0C,0x18,0x30,0x60 ,0xC0,0xFE,0xFE,0x00,0x00,0x00
    ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00};
    unsigned char code lib_dis []={"ABCDEFGHIJKLMNOPQRSTUVWXYZ "};
    unsigned char code lib_out []={" DEMO @"};
    unsigned char data_out [5];
    unsigned char data_temp[5];
    void delay_ms(unsigned int data_in)
    {
    unsigned int i,j;
    for(i=0;i<=data_in;i++)
    for(j=0;j<=33;j++);
    }
    //------------------------------------------------------
    void out_serial(unsigned char data_in,unsigned char loop)
    {
    unsigned char i,j;
    for(i=0;i<=loop;i++)
    {
    j = data_in;
    j = j>>i;
    j &= 0x01;
    if(j ==0)
    {
    data_x =0;
    data_d =0;
    clk =0;
    clk =1;
    }
    else
    {
    if(color==0) //RED
    {
    data_d =1;
    data_x =0;
    clk =0;
    clk =1;
    }
    else
    if(color==1) //GREEN
    {
    data_d =0;
    data_x =1;
    clk =0;
    clk =1;
    }
    else
    {
    data_d =1; //YELLOW
    data_x =1;
    clk =0;
    clk =1;
    }
    }

    }
    }
    //----------------------------------------------------------
    void tra_ma (unsigned char data_in)
    {
    unsigned char i,j,k=0;
    for(i=data_in;i<=(data_in + 4);i++)
    {
    data_temp[k] = lib_out[i];
    k ++;
    }
    for(i=0;i<=4;i++)
    {
    for(j=0;j<=26;j++)
    {
    if(data_temp[i] == lib_dis[j])
    data_out[i] = j;
    }
    }
    }
    //------------------------------------------------------------
    void next_led(unsigned char data_in,unsigned char dich_bit)
    {
    out_serial(data_in,7-dich_bit);
    }
    //------------------------------------------------------------
    void hien_thi(unsigned char hang,unsigned char dich_bit)
    {
    unsigned char i;
    for(i=0;i<=3;i++)
    {
    out_serial(lib_font[(data_out[4-i])*16+hang],7);
    }
    next_led (lib_font [(data_out[0])*16+hang],dich_bit);
    }
    //-----------------------------------------------------
    void change_color () interrupt 1 //ngat timer0
    {
    TR0 =0;
    TH0=0x3C;
    TL0=0xB0;
    TR0=1;
    count ++;
    if(count == 40) //delay 50.000uS * 80 = 2s (Crystal = 22.1184MHz)
    {
    count =0;
    color ++;
    if(color==3)
    color=0;
    }
    }
    //---------------------------------------------------

    void stop_data()
    {
    unsigned char i,k,u;
    for(k=0;k<=150;k++)
    {
    for(u=0;u<=15;u++)
    {
    for(i=0;i<=3;i++)
    {
    out_serial(lib_font[(data_out[3-i])*16+u],7);
    }
    delay_ms(2);
    P0 =255;
    s_clk =0;
    s_clk =1;
    P0 =u;
    }
    }

    }
    //------------------------------------------------------
    void down_up()
    {
    unsigned int u,i,j,k,v;
    tra_ma(4);
    for(k=0;k<=15;k++)
    {
    for(j=0;j<=20;j++)
    {
    v = 0;
    for(u=0;u<=15;u++)
    {
    if(u>=15-k)
    {
    for(i=0;i<=3;i++)
    {
    out_serial(lib_font[(data_out[3-i])*16 + v],7);
    }
    delay_ms(2);
    P0 =255;
    s_clk =0;
    s_clk =1;
    P0 =u;
    v++;
    }
    }
    }
    }
    for(k=0;k<=15;k++)
    {

    for(j=0;j<=20;j++)
    {
    v = k;
    for(u=0;u<=15;u++)
    {
    if(u <= 15-k)
    {
    for(i=0;i<=3;i++)
    {
    out_serial(lib_font[(data_out[3-i])*16 + v],7);
    }
    delay_ms(2);
    P0 =255;
    s_clk =0;
    s_clk =1;
    P0 =u;
    v++;

    }
    }
    }
    }
    }
    void up_down()
    {
    unsigned int u,i,j,k,v;
    tra_ma(4);
    for(k=0;k<=15;k++)
    {
    for(j=0;j<=20;j++)
    {
    v = 15-k;
    for(u=0;u<=15;u++)
    {
    if(u<=k)
    {
    for(i=0;i<=3;i++)
    {
    out_serial(lib_font[(data_out[3-i])*16 + v],7);
    }
    delay_ms(2);
    P0 =255;
    s_clk =0;
    s_clk =1;
    P0 =u;
    v++;
    }
    }
    }
    }
    tra_ma(4);
    for(k=0;k<=15;k++)
    {
    for(j=0;j<=20;j++)
    {
    v = 0;
    for(u=0;u<=15;u++)
    {
    if(u>=k)
    {
    for(i=0;i<=3;i++)
    {
    out_serial(lib_font[(data_out[3-i])*16 + v],7);
    }
    delay_ms(2);
    P0 =255;
    s_clk =0;
    s_clk =1;
    P0 =u;
    v++;
    }
    }
    }
    }
    }
    Anh post bai thì trong câu lệnh anh chú thích trong từng câu lệnh với để mọi người cùng hiểu, không thì anh mô tả phần cứng thì còn hiểu chứ chương trình không thì khó xem was... ! dù sao cũng bít ơn anh.. ráng giúp anh nhé !!

    Leave a comment:


  • Mr_se7en
    replied
    Nguyên văn bởi beiudientu Xem bài viết
    @ hai_ABC
    em về ngâm cái code của anh rùi mà thui anh xem lại cái hình ý tưởng quét matrix theo hàng với hiệu ứng dịch kí tự từ phải qua trái.
    Rồi cho em đoạn code rõ hơn chút nhé !

    -Tất nhiên là trong chương trình em đã có một hàm riêng chỉ để đưa từng byte dữ liệu ra 74HC595 rồi.... void nt2ss(unsigned chardata). Và do em có 8 matrix nên sẽ gọi hàm này 8 lần là bơm đủ data cho một hàng...
    -Vấn đề chính của em là rối ở chỗ em cần một hàm nữa để lấy dữ liệu như trong hình em đính kèm để để được các byte dữ liệu như mong mún rồi em gọi cái hàm void nt2ss(unsigned char data) là có hiệu ứng dịch ổn..

    Mình kiếm được tài liệu rồi đây. Đã làm chạy thành công rồi. Chương trình này đưa 24 chữ cái ( Chữ IN HOA đó nha) vào rối muốn chữ nào xuât ra thì chỉ việc đổi chữ "DEMO" thành chữ mình muốn nha. Chúc bạn thành công


    #include <AT89X52.h>
    //--------------------------------
    //khai bao bien
    //16hang, 4led
    //P0 SELECT HANG
    sbit clk = P2^5;
    sbit s_clk = P2^4;
    sbit data_d = P2^6;
    sbit data_x = P2^7;
    //--------------------------------
    unsigned char n,m,l,step,color =0;
    unsigned int count =0,temp_1=0,temp_2=0;
    //----------------------------------------------
    /*font du lieu chi lap trinh cho chu IN HOA,
    neu muon cho chu thuong thi tao them font chu IN THUONG
    cho bang ma font */
    //FONT TIENG VIET 24 CHU CAI
    unsigned char code lib_font[]={
    0x00,0x00,0x00,0x10,0x38,0x7C,0xFE,0xC6,0xC6,0xFE, 0xFE,0xC6,0xC6,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xF8,0xFE,0xC6,0xC6,0xFC,0xFC,0xC6 ,0xC6,0xFE,0xFC,0x00,0x00,0x00
    ,0x00,0x00,0x00,0x7C,0xFE,0xC0,0xC0,0xC0,0xC0,0xC0 ,0xC0,0xFE,0x7C,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xF8,0xFC,0xC6,0xC6,0xC6,0xC6,0xC6 ,0xC6,0xFC,0xF8,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xFE,0xFE,0xC0,0xC0,0xF8,0xF8,0xC0 ,0xC0,0xFE,0xFE,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xFE,0xFE,0xC0,0xC0,0xFC,0xFC,0xC0 ,0xC0,0xC0,0xC0,0x00,0x00,0x00
    ,0x00,0x00,0x00,0x7C,0xFE,0xC0,0xC0,0xC0,0xCE,0xC6 ,0xC6,0xFE,0x7C,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xFE,0xFE,0xC6 ,0xC6,0xC6,0xC6,0x00,0x00,0x00
    ,0x00,0x00,0x00,0x7E,0x3C,0x18,0x18,0x18,0x18,0x18 ,0x18,0x3C,0x7E,0x00,0x00,0x00
    ,0x00,0x00,0x00,0x7E,0x7E,0x18,0x18,0x18,0x18,0x98 ,0xD8,0xF8,0x70,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xC6,0xCC,0xD8,0xF0,0xE0,0xE0,0xF0 ,0xD8,0xCC,0xCE,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC2 ,0xC6,0xFE,0xFE,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xC6,0xC6,0xEE,0xFE,0xD6,0xC6,0xC6 ,0xC6,0xC6,0xC6,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xC6,0xC6,0xE6,0xE6,0xF6,0xDE,0xCE ,0xCE,0xC6,0xC6,0x00,0x00,0x00
    ,0x00,0x00,0x00,0x7C,0xFE,0xC6,0xC6,0xC6,0xC6,0xC6 ,0xC6,0xFE,0x7C,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xFC,0xFE,0xC6,0xC6,0xFE,0xFC,0xC0 ,0xC0,0xC0,0xC0,0x00,0x00,0x00
    ,0x00,0x00,0x00,0x7C,0xFE,0xC6,0xC6,0xC6,0xD6,0xDA ,0xCC,0xF6,0x7B,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xFC,0xFE,0xC6,0xC6,0xFE,0xFC,0xD8 ,0xDC,0xCE,0xC6,0x00,0x00,0x00
    ,0x00,0x00,0x00,0x7C,0xFE,0xC0,0xC0,0xFC,0x7E,0x06 ,0x06,0xFE,0x7C,0x00,0x00,0x00
    ,0x00,0x00,0x00,0x7E,0x7E,0x5A,0x18,0x18,0x18,0x18 ,0x18,0x18,0x18,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6 ,0xC6,0xFE,0x7C,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0xEE ,0x7C,0x38,0x10,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xD6,0xFE ,0xEE,0xC6,0xC6,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xC6,0xC6,0x6C,0x38,0x10,0x10,0x38 ,0x6C,0xC6,0xC6,0x00,0x00,0x00
    ,0x00,0x00,0x00,0x66,0x66,0x66,0x7E,0x3C,0x18,0x18 ,0x18,0x3C,0x7E,0x00,0x00,0x00
    ,0x00,0x00,0x00,0xFE,0xFE,0x06,0x0C,0x18,0x30,0x60 ,0xC0,0xFE,0xFE,0x00,0x00,0x00
    ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00};
    unsigned char code lib_dis []={"ABCDEFGHIJKLMNOPQRSTUVWXYZ "};
    unsigned char code lib_out []={" DEMO @"};
    unsigned char data_out [5];
    unsigned char data_temp[5];
    void delay_ms(unsigned int data_in)
    {
    unsigned int i,j;
    for(i=0;i<=data_in;i++)
    for(j=0;j<=33;j++);
    }
    //------------------------------------------------------
    void out_serial(unsigned char data_in,unsigned char loop)
    {
    unsigned char i,j;
    for(i=0;i<=loop;i++)
    {
    j = data_in;
    j = j>>i;
    j &= 0x01;
    if(j ==0)
    {
    data_x =0;
    data_d =0;
    clk =0;
    clk =1;
    }
    else
    {
    if(color==0) //RED
    {
    data_d =1;
    data_x =0;
    clk =0;
    clk =1;
    }
    else
    if(color==1) //GREEN
    {
    data_d =0;
    data_x =1;
    clk =0;
    clk =1;
    }
    else
    {
    data_d =1; //YELLOW
    data_x =1;
    clk =0;
    clk =1;
    }
    }

    }
    }
    //----------------------------------------------------------
    void tra_ma (unsigned char data_in)
    {
    unsigned char i,j,k=0;
    for(i=data_in;i<=(data_in + 4);i++)
    {
    data_temp[k] = lib_out[i];
    k ++;
    }
    for(i=0;i<=4;i++)
    {
    for(j=0;j<=26;j++)
    {
    if(data_temp[i] == lib_dis[j])
    data_out[i] = j;
    }
    }
    }
    //------------------------------------------------------------
    void next_led(unsigned char data_in,unsigned char dich_bit)
    {
    out_serial(data_in,7-dich_bit);
    }
    //------------------------------------------------------------
    void hien_thi(unsigned char hang,unsigned char dich_bit)
    {
    unsigned char i;
    for(i=0;i<=3;i++)
    {
    out_serial(lib_font[(data_out[4-i])*16+hang],7);
    }
    next_led (lib_font [(data_out[0])*16+hang],dich_bit);
    }
    //-----------------------------------------------------
    void change_color () interrupt 1 //ngat timer0
    {
    TR0 =0;
    TH0=0x3C;
    TL0=0xB0;
    TR0=1;
    count ++;
    if(count == 40) //delay 50.000uS * 80 = 2s (Crystal = 22.1184MHz)
    {
    count =0;
    color ++;
    if(color==3)
    color=0;
    }
    }
    //---------------------------------------------------

    void stop_data()
    {
    unsigned char i,k,u;
    for(k=0;k<=150;k++)
    {
    for(u=0;u<=15;u++)
    {
    for(i=0;i<=3;i++)
    {
    out_serial(lib_font[(data_out[3-i])*16+u],7);
    }
    delay_ms(2);
    P0 =255;
    s_clk =0;
    s_clk =1;
    P0 =u;
    }
    }

    }
    //------------------------------------------------------
    void down_up()
    {
    unsigned int u,i,j,k,v;
    tra_ma(4);
    for(k=0;k<=15;k++)
    {
    for(j=0;j<=20;j++)
    {
    v = 0;
    for(u=0;u<=15;u++)
    {
    if(u>=15-k)
    {
    for(i=0;i<=3;i++)
    {
    out_serial(lib_font[(data_out[3-i])*16 + v],7);
    }
    delay_ms(2);
    P0 =255;
    s_clk =0;
    s_clk =1;
    P0 =u;
    v++;
    }
    }
    }
    }
    for(k=0;k<=15;k++)
    {

    for(j=0;j<=20;j++)
    {
    v = k;
    for(u=0;u<=15;u++)
    {
    if(u <= 15-k)
    {
    for(i=0;i<=3;i++)
    {
    out_serial(lib_font[(data_out[3-i])*16 + v],7);
    }
    delay_ms(2);
    P0 =255;
    s_clk =0;
    s_clk =1;
    P0 =u;
    v++;

    }
    }
    }
    }
    }
    void up_down()
    {
    unsigned int u,i,j,k,v;
    tra_ma(4);
    for(k=0;k<=15;k++)
    {
    for(j=0;j<=20;j++)
    {
    v = 15-k;
    for(u=0;u<=15;u++)
    {
    if(u<=k)
    {
    for(i=0;i<=3;i++)
    {
    out_serial(lib_font[(data_out[3-i])*16 + v],7);
    }
    delay_ms(2);
    P0 =255;
    s_clk =0;
    s_clk =1;
    P0 =u;
    v++;
    }
    }
    }
    }
    tra_ma(4);
    for(k=0;k<=15;k++)
    {
    for(j=0;j<=20;j++)
    {
    v = 0;
    for(u=0;u<=15;u++)
    {
    if(u>=k)
    {
    for(i=0;i<=3;i++)
    {
    out_serial(lib_font[(data_out[3-i])*16 + v],7);
    }
    delay_ms(2);
    P0 =255;
    s_clk =0;
    s_clk =1;
    P0 =u;
    v++;
    }
    }
    }
    }
    }

    Leave a comment:


  • hai_abc
    replied
    @ beiudientu
    Để mai mình xem kỹ rồi gửi cho bạn nhé!

    Leave a comment:


  • beiudientu
    replied
    @ hai_ABC
    em về ngâm cái code của anh rùi mà thui anh xem lại cái hình ý tưởng quét matrix theo hàng với hiệu ứng dịch kí tự từ phải qua trái.
    Rồi cho em đoạn code rõ hơn chút nhé !

    -Tất nhiên là trong chương trình em đã có một hàm riêng chỉ để đưa từng byte dữ liệu ra 74HC595 rồi.... void nt2ss(unsigned chardata). Và do em có 8 matrix nên sẽ gọi hàm này 8 lần là bơm đủ data cho một hàng...
    -Vấn đề chính của em là rối ở chỗ em cần một hàm nữa để lấy dữ liệu như trong hình em đính kèm để để được các byte dữ liệu như mong mún rồi em gọi cái hàm void nt2ss(unsigned char data) là có hiệu ứng dịch ổn..
    Attached Files

    Leave a comment:

Về tác giả

Collapse

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

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

Collapse

Đang tải...