PIC Lesson: Dot Matrix

August 19th, 2009  Posted at   Lesson PIC

Dot Matrix adalah sejenis display yang seakan-akan 7 Segment. Kelebihannya berbanding 7 Segment adalah Dot Matrix boleh memaparkan lebih banyak character berbanding 7 Segment yang hanya memaparkan nombor. Binaan Dot Matrix adalah seperti sejumlah LED yang disambung secara matrix. Contoh 8X8 Dot Matrix, mempunyai 64 LED di dalam satu set.

Sambungan matrix akan mengurangkan I/O berbanding sambungan LED secara direct. Kendaliannya adalah membuat blinking bagi setiap row. Ini kerana tidak boleh menyalakan dua row serentak. Schematic bagi 8X8 Dot Matrix adalah seperti di bawah.

Di bawah adalah videonya

PIC Source Code

21 Responses to “PIC Lesson: Dot Matrix”

  1. abi says:

    can i get the code for scrolling led display using pic 16f877a micro controller please……….

  2. Ling says:

    Thanks for the reply… Then how to know which pins for row and column…?? Thanks…

  3. Ling says:

    Hi, this is dot matrix with 16 pins. Anyone know how to connect dot matrix with 24 pins? What I saw in Cytron product page (http://www.cytron.com.my/viewProduct.php?pcode=DS-MAT-6060-R&name=Matrix%20Display%20%28Red%29) is that not all the pins are connected. Anyone can confirm with me whether is it the correct way to connect it? Thank you very much.

  4. firdaus says:

    Assalamualaikum..nk tnya ni guna pic model apa?

  5. musa says:

    salam saudara shahrul, klu pakai 5×7 dot matrix.. boleh config yg sama ke? tq

  6. fazley says:

    assalam…ni compile pakai MPLAB IDE ker?

  7. dz says:

    Okay.. maaf mengganggu en. Saya cuma minta bantuan klu bagaimana nak looping saja supaya alphabet tu sentiasa scrol berulang2.. maaf yer..

  8. Dz says:

    Assalamualaikum Mr. Shahrul sya mempunyai 1 kemusykilan. saya telah membuat satu aturcara untulk scroll message pada dot matrik 5×7. kenapa apabila sampai pada alphabet z ia x looping.
    padahal saya telah menggunakan for loop. mintak tlg tgk kan bleh x?

    Program seperti dibawah:

    /*
    Project: Interfacing an LED matrix
    Description : A 7×5 LED matrix
    MCU: PIC16F877, External crystal = 20.0 MHz,
    7 rows are driven by PORTB, and 5 colums by PORTA pins
    English Alphabets from A through Z are displayed sequentially.

    02 / 03 / 2012

    */

    // Define row values for each of the five columns corresponding
    // to Alphabets A through Z

    #include
    #include
    #define _XTAL_FREQ 20000000
    __CONFIG(0x3D39); //configuration bits@ microcontroller// 0x3D39 877

    void delay_ms(unsigned int ui_value);
    /* Use XT mode, No Watch Dog, No Code Protect, No Power-up Timer */

    main(){
    char const pat[156]={0x7E,0x09,0x09,0x09,0x7E,0x00,//A tujuan diletakkan 0x00 supaya ada space antara huruf iaitu 1 baris colum space.
    0x7F,0x49,0x49,0x49,0x36,0x00,//B
    0x3E,0x41,0x41,0x41,0x22,0x00,//C
    0x7F,0x41,0x41,0x41,0x3E,0x00,//D
    0x7F,0x49,0x49,0x49,0x49,0x00,//E
    0x7F,0x09,0x09,0x09,0x09,0x00,//F
    0x3E,0x41,0x49,0x49,0x3A,0x00,//G
    0x7F,0x08,0x08,0x08,0x7F,0x00,//H
    0x41,0x41,0x7F,0x41,0x41,0x00,//I
    0x21,0x41,0x41,0x41,0x3F,0x00,//J
    0x7F,0x08,0x14,0x22,0x41,0x00,//K
    0x7F,0x40,0x40,0x40,0x40,0x00,//L
    0x7F,0x04,0x08,0x04,0x7F,0x00,//M
    0x7F,0x04,0x08,0x10,0x7F,0x00,//N
    0x3E,0x41,0x41,0x41,0x3E,0x00,//O
    0x7F,0x09,0x09,0x09,0x06,0x00,//P
    0x3E,0x41,0x51,0x61,0x7E,0x00,//Q
    0x7F,0x09,0x19,0x29,0x46,0x00,//R
    0x46,0x49,0x49,0x49,0x31,0x00,//S
    0x03,0x01,0x7F,0x01,0x03,0x00,//T
    0x3F,0x40,0x40,0x40,0x3F,0x00,//U
    0x1F,0x20,0x40,0x20,0x1F,0x00,//V
    0x3F,0x40,0x38,0x40,0x3F,0x00,//W
    0x63,0x14,0x18,0x14,0x63,0x00,//X
    0x03,0x04,0x78,0x04,0x03,0x00,//Y
    0x61,0x51,0x49,0x45,0x43,0x00,//Z
    };

    char cnt, cnt2, scrollcnt, col;

    TRISB=0b00000000; /* set port_b sebagai output */
    TRISA=0b00000000; /* set port_a sebagai output */
    PORTB=0b00000000; /* ZERO port_a & port_b */
    PORTA=0b00000000;

    scrollcnt = 0;
    cnt2 = 0;

    for (;;) // Infinite loop to avoid run on code
    {

    //delay_ms(10); sekiranya isi delay disini , colum akan bergerak makin perlahan bergantung masa delay yang kita setkan
    col = 0b00000001; // Colum bermula pada colum pertama pada porta_0.
    ++scrollcnt; // scrollcnt digunakan sebagai satu delay sebelum kita switch kan colum

    if (scrollcnt == 20) // semakin kecil nilai scrollcnt semakin cepat tulisan bergerak
    {
    scrollcnt = 0;
    ++cnt2;

    if (cnt2 == 156)
    cnt2 = 0;
    }

    for(cnt = 0; cnt<5; cnt++) // sekiranya cnt=3 maknanya tulisan akan mula bergerak bermula dari colum ketiga.
    {
    PORTA = 0; // Padam semua data sebelumnya
    PORTB = pat[cnt+cnt2]; // Setup data untuk dipaparkan
    PORTA = col; // Papar data baru

    delay_ms(1); // Lengahkan sedikit masa sebelum kita keluarkan output pada colum berikutnya.Sekurang2nya letak 1 delayms.

    col< 0) // ui_value adalah variable bagi unsigned int.
    { // menggunakan control statement while
    __delay_ms(1); // cth: while (expression) statement; atau
    } // cth: while (expression) {statement;}
    } // variable ui_value–>0 maksudnya adalah variable ui_value ditolak dengan 1
    // dan >0 maksudnya nilai variable ui_value lebih besar dari 0

  9. genrozzi says:

    manteb nih mas…panduannya
    bisa minta saran nih….saya mo buat jam digital pake ATmega8535 dg display dot matrix 5×7 (8 buah)
    gmana saran dari mas shahrul….??
    please

  10. mohamad taib says:

    salam..
    nak tanya, kalau kita nak buat 10 character, maknanya kena guna banyak PIC la ye?(e.g 10 PIC) ada cara yang lebih mudah tak?

    • Shahrul says:

      Untuk byk character, menjadikan byk I/O, jd mmg memerlukan lebih byk PIC. Boleh juga extend I/O menggunakan Mux/Demux, tetapi itu juga menambah bilangan IC.
      Sy lebih suka menjadikan PIC itu spt driver, cth 1 PIC untuk mengawal 2 Dot Matrix. Jd, 10 Dot Matrix memerlukan 5 PIC. Kemudian, terdapat PIC utama yg mengawal 5 PIC yg lainnya.

Leave a Reply

What is 10 + 12 ?
Please leave these two fields as-is:
IMPORTANT! To be able to proceed, you need to solve the following simple math (so we know that you are a human) :-)