Controlling the LED matrix is actually almost the same as controlling seven segment. The difference is that the LEDs of seven segment are organized into seven sections which could form the figures. While the LED matrix, LEDs are arranged into a matrix that can be referenced by column and row. The columns on the LED matrix can be equated with the digits on the seven segment. While the lines on the LED matrix can be equated with LED a through LED g plus a decimal point LED on seven segment. Thus between the seven segment and LED matrix is basically the same, especially if the number of rows are only eight.

Then how to display images on the LED matrix? Yes basically the same as displaying the numbers on the seven segment. If you are already familiar with how to display data on the seven segment display using the buffer as is done in discussion about seven segment in the Easy and Fun Learning Microcontroller book, in which to display data on the seven segment, all we have to do is fill the display buffers, then to display image on the LED matrix, all we need to do is also just fill data on corresponding display buffers.

In the picture above, the size of the LED matrix that we use is 8 rows x 32 columns. This size is equivalent to seven segment which the number of digits are 32 digits. Thus basically we need a total of 32 bytes of display buffers. The LEDs on the top line we associate with bit 0 of port and successively LEDs on the lines below to bit 1, bit 2, and so on until bit 7. To make a LED lit on a particular line, then we need only fill the correlated bits with 0 or 1 depending on the configuration of the matrix that we use, active low or active high. For ease of understanding, we usually use active high so to lit the LED on the top line then we have to make the bit 0 to has the value of 1.

As an example, consider the logo below. The logo size is 32 x 32. Therefore, the logo may not be displayed on the LED matrix with the size of 32 x 8 at once. To display it, we have to split the logo into four parts. After that we have to show four parts one by one.

To the left of the logo there is a number from 0 to 7 and repeated up to four times. While above the logo are the numbers from 0 to 31. These figures will show us how to display the parts of the logo on the LED matrix. The figure above the logo shows the buffer index, while the figure at left of the logo shows the bit position. Thus, to show the first part of the logo (the top), then the buffer [0] must be filled with data 11111111b, buffer [1] = 00000001b, buffer [10] = 00011001b, and so on.

  0.        1.        2.        3.
  01234567890123456789012345678901
0 ©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©
1 © .............................©
2 ©..........©©©©..©©©©..........©
3 ©........©©©©©©..©©©©©©........©
4 ©......©©©©©©©©..©©©©©©©©......©
5 ©.....©©©©...©©..©©...©©©©.....©
6 ©....©©©.....©©..©©.....©©©....©
7 ©...©©©......©©..©©......©©©...©
0 ©..©©©.......©©..©©.......©©©..©
1 ©..©©........©©..©©........©©..©
2 ©.©©©............©©............©
3 ©.©©.............©©............©
4 ©.©©©©©©©©©©©©©..©©©©©©©©©©©©©.©
5 ©.©©©©©©©©©©©©©..©©©©©©©©©©©©©.©
6 ©............©©.............©©.©
7 ©............©©............©©©.©
0 ©..©©........©©..©©........©©..©
1 ©..©©©.......©©..©©.......©©©..©
2 ©...©©©......©©..©©......©©©...©
3 ©....©©©.....©©..©©.....©©©....©
4 ©.....©©©©...©©..©©...©©©©.....©
5 ©......©©©©©©©©..©©©©©©©©......©
6 ©........©©©©©©..©©©©©©........©
7 ©..........©©©©..©©©©..........©
0 ©..............................©
1 ©..©©©.©..©..©©..©...©.©..©©©©.©
2 ©.©....©..©.©..©.©©..©.©.©.....©
3 ©.©....©©©©.©©©©.©.©.©....©©©..©
4 ©.©....©..©.©..©.©..©©.......©.©
5 ©..©©©.©..©.©..©.©...©...©©©©..©
6 ©..............................©
7 ©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©
The Logo.

To be able to fill these data to the buffer with ease, then we can create an image data table. This technique is similar to how to show the variation of Running LED on exercise 5 of the Easy and Fun Learning Microcontroller book or on the LED Simulation article. Each image table has the same size with the size of the buffer. And for the case of the logo above, we need four 32 bytes size image tables.

Like on the Running LED exercise, the work of preparing the table is a tedious job and requires precision. But you should not be discouraged if you want to make the table of the large and complicated image because you can use the aid program ImgTable.exe. The program will help you to convert bmp format images into an image table that we can use it in the program using either the M51 format or using the SDCC format. So to get an image table, you simply create an image using MSPaint, and then do the conversion using ImgTable.exe.

ImgTable.exe can do the conversion from bmp file with a monochrome format up to 24 bits format. But because the table will be used to lit the LED which of course is equivalent to a monochrome format, the 24 bits format would be first converted by ImgTable.exe into the monochrome format. Therefore, it is better if you save the images you create with monochrome format to save on file size.

Rules applied by ImgTable is that the pixels that are black will be converted into 1, while the white pixels into 0. For colors other than black and white, then the three basic color elements will be summed first, then divided by three. After that, if the value is closer to the black will be interpreted as black, and if it is closer to white will be interpreted as white.

Table creation sequence is from left to right and from top to bottom. From top to bottom means every eight pixels will be taken as one byte. For example, an image with a size of 32 x 32, it will be four tables with the size of 32 bytes. The first table stores the data of the coordinates (0,0) to (31,7) by the rule that the upper left pixel is (0,0) and the lower right pixel is (31.31). The second table is (0,8) to (31,15). So forth.

In this example, all tables store the entire image data appropriately because the high of the image size is a multiples of eight. If the size of the image is not a multiples of eight, then the final table will have the remaining bits. For example if the image size is 32 (width) x 33 (height), then the number of tables are five tables with size of 32 bytes. And the last table only use bit 0. While bit 1 to bit 7 will be filled with 0.

Return to the LED matrix, we must display the four parts of the logo one by one. But if we display them alternately, then the shape of the logo will not be seen clearly. We will only see the incomplete images that appear alternately. Therefore we have to show by shifting it up or down. However, we have created tables that contains the data of the image blocks. So we can not retrieve data from the image coordinates (0,1) to (31,8) directly. For that, we need one more buffer with the same size as the first buffer. If we call the first buffer as the display buffer, then we call the second buffer as hidden buffer because it was not for displaying data to the LED matrix. This buffer is only used as an aid in manipulating the display data.

In case we want to shift the image up, then we can describe the arrangement as if the buffer is as follows:

01245...
abcde...
Numbers = the display buffer, alfabets = hidden buffer.

The first time, we fill the display buffer with data 0, so that all the LEDs will be turned off. Then we put the first image block table on hidden buffer. After that do a bit shifting between a and 0, b and 1, c and 2, and so on. Do these shifts of up to eight times, which means that all parts of the image block has been on display buffer. And before doing the ninth shift, we must place the second image block into the hidden buffer. And the next step is an iteration of the previous step.

For more details, you can see the program listing for the demo above that is written in the format of M51 and c. In the listing, there is DelayTime constants that you can replace to change the speed of picture motions.

To try on the simulator, then you must set the port link so that both Port0 and Port1 are linked to MXLED.exe by the message link with the WM_USER message, and lParam of Port0 is 2 and lParam of Port1 is 1. You also have to set the configuration of MXLED size as 8 x 32 landscape.

Happy trying and please do not hesitate to ask if there are less clear. Hopefully useful.

111 thoughts on “Showing Images on LED Matrix using Simulator

    1. Kalo menurutku sih rugi kalau PLC digunakan untuk mengontrol LED Matriks,soalnya kan harga PLC jauh lebih mahal ketimbang harga mikrokontroler. Disamping itu, ngontrol LED Matriks dengan PLC juga menjadi jauh lebih repot ketimbang menggunakan mikrokontroler. Sudah mahal, repot, rugi kan?

  1. om sulhan, aq maw bikin running led display kira2 25*5, trus yang maw aq tanyain, komponen ap aj yg dibutuhkan selain mikro, trs kira2 gmbr diagramnya gmana…?

    thx

    1. contoh aplikasi ngontrol LED Matriks dengan PLC dong???
      beserta datanya kalo ada…
      thx

    2. lala satu kampus ma awe ya 🙂 tugas kuliah yg aneh. ngontrol LED Matriks pake PLC :mrgreen: liat komentar pertama donk ❗

  2. Salam kenal. Mas Sulhan, saya br belajar mikrokontroler Atmel at89xx dan untuk display 7 seg sdh mengerti tp menggunakan bhs asmbly. Saat saya membuka listing program pd contoh demo di atas, saya blm tau bhs yg digunakan? Dan klo boleh informasinya utk bs belajar bhs tersbt, atau utk bukunya. Sebelumnya, saya ucapkan terima kasih.

  3. PA Sulhan Tolong Jelaskan lebih Detail Lagi Mengenai Dan Cara Kerja Sub Program Di Bawah Ini, Soal nya Saya Belum Paham, Tolong ya.
    1.

     ;-----------------------------------------------------
    ;menggeser gambar ke atas
    ShitImageUp:
              mov   R0,#BufferDisplay
              mov   R1,#BufferHiden
              mov   R2,#DispWidth
    ShiftUpLoop:
              mov   a,@R1
              mov   C,Acc.0
              mov   a,@R0
              rrc   a
              mov   @R0,a
              mov   a,@R1
              rrc   a
              mov   @R1,a
              inc   R0
              inc   R1
              djnz  R2,ShiftUpLoop
              ret

    2.

              mov   R3,#0
    CorpLoop: mov   dptr,#YCcorpStart
              mov   a,R3
              inc   R3
              add   a,dpl
              mov   dpl,a
              clr   a
              addc  a,dph
              mov   dph,a
              acall LoadImage2BuffDisp
              mov   R2,#DelayTime
              acall Delay
              cjne  R3,#YCcorpEnd-YCcorp+DispWidth,CorpLoop
              ajmp  Loop

    Terima kasih dan Salam Kenal ya.

    1. Lam kenal juga Alan.

      1.
      Prosedur ini digunakan untuk menggeser gambar ke atas. Kita tahu bahwa ada dua buah buffer, yaitu buffer display dan buffer hidden. Buffer display berisi data yang akan ditampilkan, sedangkan buffer hidden hanya digunakan untuk penyimpan sementara. Untuk menggeser gambar, maka kita menggeser bit pada buffer hidden masuk ke buffer hidden masuk ke buffer display. Pertama kita ambil bit 0 dari buffer hidden dan tempatkan ke carry. Setelah itu, kita putar bit pada buffer display melalui carry. Dengan demikian bit 0 pada buffer hidden akan masuk sebagai bit 7 dari buffer display, dan bit 0 dari buffer display akan masuk ke carry. Kemidian, lakukan pemutaran pada buffer hidden melalui carry. Dengan demikian bit 0 dari buffer display akan masuk sebagai bit 7 dari buffer hidden. Langkah ini merupakan cara untuk memutar bit-bit dari dua buah byte.
      Lebar kedua buffer sama, yaitu sebesar DispWidht. Oleh karena itu, kita harus melakukan pergeseran bit sebanyak lebar data

      2.
      Prosedur ini digunakan untuk menampilkan tulisan bergeser ke kiri. Tulisan tersebut sebenarnya juga merupakan data-data gambar di YCcorp. Sedangkan YCcorpStart dan YCcorpEnd hanyalah konstanta untuk membuat spasi di awal dan di akhir tulisan. YCcorp berisi gambar yang lebih lebar dibandingkan DispWidth. Oleh karena itu kita hanya bisa menampilkan sebagiannya saja. Dan agar semua gambar tampil, kita menggeser bagian gambar paling kiri yang ditampilkan.
      Untuk menampilkan gambar, kita mengisi buffer display dengan data gambar. Prosedur ini akan mengisi buffer display dengan data gambar yang alamatnya ditujuk oleh dptr. Oleh karena itu, agar gambar yang ditampilkan bergeser ke kanan, maka kita harus menaikkan dptr disetiap perulangannya. Hal ini dilakukan dengan menambahkan R3 ke dptr yang selalu diawali dengan diisi alamat YCcorpStart. Dan karena setiap perulangan R3 selalu ditambah 1, maka dptr jg akan naik setiap perulangannya.
      Perulangan diakhiri jika data yang ditampilkan sudah mencapai posisi YCcorpEnd. Tetapi posisi ini adalah posisi setelah dptr (yang menunjuk YCcorpStart) ditambah dengan R3. Padahal yang kita deteksi hanya R3 saja. Oleh karena itu, posisi akhir terjadi jika R3 sudah berisi YCcorpEnd-YCcorp+DispWidth. Sebenarnya ada beberapa cara untuk mengetahui batas akhir perulangan.

      Gitu ya Alan, semoga bisa dipahami lebih baik. Dan kalau suatu saat Alan menemui sebuah program dan belum paham cara kerjanya, sebaiknya cobalah untuk menjalankan program tersebut dengan simulator, dan jalankan secara singgle step. Setiap step, perhatikan perubahan yang terjadi pada register-register yang bersangkutan. Hal ini akan sangat membantu pemahaman jalannya program.
      OK bro 🙂

  4. mas chans…saya pernah buat running text ukuran karakter 5×7..awalnya cuma contoh buat 3 karakter, pas bikin 6 mpe 10 karakter koko semakin panjang semakin keliatan kedip.sudah diutak-atik delaynya masih saja belum memuaskan..ada solusi ga cak..? btw hatur nuhun aa’ sulhan nu kasep..

    1. Aku menduga teknik scanning matriksnya tidak menggunakan interupsi timer. Cobalah menggunakan intrupsi timer untuk scanningnya. Contohnya ada di sini. Donlot aja trus pelajari tekniknya. Jika menggunakan teknik ini masih berkedip, gunakan kristal yg lebih tinggi. Jika kristal yg digunakan sudah maksimal, coba ganti dg mikrokontroler yg kecepatannya lebih tinggi. Tp menurut perhitunganku, mcs51 mampu untuk tidak berkedip sampe sekitar 150 kolom dg kristal 33MHz. Dan jika setiap karakter termasuk spasi karakter menggunakan 6 kolom, maka 150 kolom berarti 25 karakter.

    2. betul dugaan sampeyan…aq pake kristal juga cuma 12MHz..contoh source int timer dmana kang?…

  5. Salam kenal mas chans. Saya lagi pengen bikin LED MATRIX.Kemarin dapat skema menggunakan AT90S2313 dan 74HC595 sebagai shift register, tapi nyari AT90s2313 gak dapat-dapat,kebetulan di rumah adanya AT89S51.Secara logika pasti bisa di ganti menggunakan AT89S51. Tapi masalahnya saya belum paham dengan LED matrix, bagaimana cara mengontrolnya. Sudah membaca artikel di sini,tapi masih belum paham.

    Sebenarnya gimana sih logikanya? Lalu dalam listing programnya, apa saja yang harus di lakukan.

    Referensi yang saya gunakan http://koti.mbnet.fi/zyc/LedDisp

    mohon Pencerahannya.

    1. @Bayu: Seperti yang saya tulis di atas, bahwa mengontrol matiks LED sebenernya sama dengan mengontrol seven segment yg disusun dg multipleks. Apakah bayu sudah memahami pengendalian seven segment secara multipleks? jika belum, sebaiknya pelajari itu dulu sebelum mempelajari matriks LED.

    2. Saya sudah bisa mengendalikan seven segmen, ya saya paham bagaimana multipleks. Yang menyalakan lampu secara bergantian dengan kecepatan tinggi sehinggal tidak terlihat kedipan. Kalau seven segmen hanya mengontrol lampu 7/8. kalau led matrix kan baynya. itu yang tidak saya maksudkan. Mohon pencerahan…

    3. Nah, sekarang bayu bayangkan membuat seven segment sebayak 32 digit. Akan tetapi, seven segmentnya diganti dengan led yang berurutan dari atas ke bawah. Ada 7 lampu segment (a-g) ditambah 1 lampu titik. Jd jumlahnya ada 8 lampu. Nah, segment a dihubungkan ke LED paling atas, kemudian segment b ke LED dibawahnya, dan terus-menurus hingga lampu titik dihubungkan ke LED paling bahwah.

         O  (a)
         O  (b)
         O  (c)
         O  (d)
         O  (e)
         O  (f)
         O  (g)
         O  (.)

      Nah, jika seven segement ada 30 digit, maka akan ada 30 kolom LED seperti itu.
      Sekarang bagaimana menampilkan gambarnya? sebenernya sama juga. Saat kita ingin menyalakan angka 1, maka kita membuat segment b dan c saja yg menyala, sedangkan yg lain padam. Dengan cara yang sama kita bisa menentukan titik2 mana dari LED2 tersebut yg akan menyala, dan titik mana yg padam. Begitu saja intinya, sederhana bukan?

    1. Kunci itu hanya berguna untuk mencegah agar kode yang diprogramkan tidak bisa dibajak. jadi tentu saja kuncinya tidak bisa dibuka lagi. Akan tetapi walau sudah dikunci, chip masih bisa dihapus lagi dan diprogram ulang. DT HQ dengan program mikro? maksudnya Microcontroller Project? Microcontroller Project bisa diintegrasikan dengan downloader manapun asalkan downloader tersebut bisa memprogram file hex dengan perintah dari command prompt. Apakan DT HQ bisa?

  6. mas..aku pengin belajar asembler untuk mcs mulai dari mana ya..referen apa yang harus ada (punya),trim’s sebelumnya.

  7. rangakian realnya untuk led matrik pada simulator gimana ya…mas,tolong donk aku minta kirim ke emailku,trim’s sebelumnya.

  8. lam knal mas,,,saya mau bikin led dot matrik pake 8×20,,pake ATMega 16,,bisa gk shift registernya d ganti pake ic 4017,,gimana cara merangkainya,,trus minta sample listing programnya dong yg pake bahasa C,,thanks

    1. maap mas,,,kalo pake 74hc595 kan bisa d serial..maksudnya output untuk kolom nya bisa lebih dari 8 kolom,,kalo pake 4017 bisa gk,,trus koneksinya seperti apa,,..misal saya pake led 8×20,.

    2. 4017 memiliki 10 output. jd klo mau lebih dari 10 harus ditingkat. kita harus membuat blok kolom. Setiap blok kolom terdiri dr 10 kolom. Setiap kolom pada blok kolom ini diberi nomor 0 hingga 9. Setiap kolom dengan nomor sama dari masing2 blok kolom digabungkan menjadi satu. Sebagai contoh, krn hada mau membuat 20 kolom, maka kolom no 0 dihubungkan dg kolom 10, kolom 1 dg kolom 11, begitu seterusnya. Dengan demikian, kita hanya membutuhkan 10 pengendali saja, dan itu cukup dengan 4017. Jadi, sebenarnya ada 2 kolom yg aktif pada saat yang bersamaan. Akan tetapi, kita menambahkan lg sebuah pengendali blok. Jadi, hanya kolom yg bloknya sedang aktif saja yg benar2 aktif. Karena hada hanya membuat 20 kolom saja, maka hanya dibutuhkan 2 pengendali blok. Jadi pengendalinya bisa menggunakan flip-flop togle sederhana. Input dari flip-flop ini diberi masukan dari keluaran carry dari 4017. Jadi setiap keluaran aktif berubah dari keluaran 9 ke keluaran 0, maka blok yang aktif jg akan berubah.
      Dengan teknik tersebut, kita bisa membuat sampe 100 kolom hanya menggunakan 2 buah 4017. 4017 pertama digunakan untuk mengendalikan kolom, sedangkan 4017 kedua digunakan untuk mengendalikan blok kolom.
      Memang penjelasan ini terasa cukup abstrak, tp jika hada telah terbiasa merancang rangkaian digital, pasti penjelasan ini bisa dijadikan acuan untuk mewujudkan pengendalian matriks LED dengan banyak kolom.

    3. Ok mas,,,makasih atas penjelasannya…saya lg pesan buku Mudah dan Menyenagkan Belajar Mikrokontroler,,mudah2n gk bosen kalo saya nanya lagi…thanks
      hada_karawang

    4. ganggu lagi nich mas,,,saya udah ngerti maksudnya pengendali blok,,jadi tujuannya agar outputnya berjalan dari kolom 1 s.d 20 ,dan balik lagi ke 1,,yg saya blm tau yaitu cara membuat flip flop togle nya mas,,bisa d jelaskan komponen apa yg d butuhkan dan cara merangkainya gk..

    5. 🙂 Belum tau filp flop togle ya? klo gitu aku ralat aja deh, ga usah pake itu, tp cukup dg menyediakan satu pin port aja. Jd hada menambahkan 1 pin port untuk menentukan blok kolom. Jika pin itu kondisinya L (0) maka blok pertama yg harus aktif dan blok kedua harus mati. Sementara jika pin itu kondisinya H (1) maka blok pertama harus mati dan blok kedua ya harus aktif. Pengaturan itu harus ditambahkan di dalam software. Gampang kan?

    6. sorry gan, apakah flip flop togle itu adalah flip flop yang bisa dibuat dengan menggunakan JK flip flop itu y? dengan kondisi J=K=1. sorry kalo salah gan….:-}
      oh, y gan untuk memperlebar hitungan 4017 itu apakah seperti yang digambarkan pada datasheet 4017 punyanya philip instrument pada halaman terakhir itu y?, kalo gk salah halaman 16… sorry sblumnya gan… and tengkyu gan…

    7. Pake flip-flop JK jg bisa, tapi ga harus dg itu, dan uda aku ralat biar ga usah pake itu. broden ga ngasih link datasheetnya sih, jd aku ga bisa liat yg dimaksud broden tu kaya apa, tp yg jelas 4017 ga perlu diperlebar, soalnya 4017 tetep hanya mengendalikan 10 keluaran saja. Tp, yg 10 keluaran ini digunakan untuk mengendalikan kolom2 dari semua blok kolom. Tapi blok kolom ini jg harus dikendalikan dg 4017 jika jumlahnya cukup banyak. Jika jumlahnya paling 2, 3 atau 4 saja, dan masih ada sisa port yg nganggur, maka sebaiknya gunakan saja sisa port itu. Makanya penggunaan flip-flop togle aku ralat 😀

    8. mas aku coba dg menggunakan proteus 8×10 koq scanningnya kacau ya padahal aku sudah hubungkan kaki-kaki ic 4017 sesuai dg petunjuk mas,mohon penjelasan,tks

    9. 🙂 mungkin yitno salah dalam mengimplementasikan petunjukku, soalnya itu bahkan telah aku buat rangkaian sesungguhnya dan berhasil. Dan simulasi untuk MXLED menggunakan teknik ini. Dan lihat sendiri di atas, berjalan dengan mulus kan? (kalau di atas menggunakan flash, kalau mau lihat bagaimana simulasi MXLED, ya donwload dulu Microcontroller Project terus nanti coba demonya.

    10. Aku biasanya klo buat rangkaian tertentu cuma aku buat coretan di kertas saja, jd skema dalam bentuk file aku ga punya. Dan kalopun punya, aku tidak akan mengirimkan kepada siapapun melalui imel, tp akan aku buat sebagai artikel yg bisa dibaca oleh siapa saja.

    11. OK MAS TRIM’S AKU JUGA BERHARAP BEGITU JADI BISA SALING SHARING…..SALING BAGI ILMU.

    12. gan, ini link datasheed 4017 yang saya maksudkan, ternyata untuk meng-extend hitungan pada 4017 terdapat pada halaman 12 gan…. dan setelah saya simulasikan pake proteus jg, dmn tiap keluaran dari 4017 saya hubungkan dengan led, hasilnya seperti running led yang menyala berurutan pada keluaran 4017 pertama hingga yang 4017 terakhir dengan rangkaian sesuai gambar…. kalo bener yang kayak gitu, berarti LedMatrixnya agan tu termasuk yang scanning kolom y???? yang memang seperti teknik scanning display yang agan peragakan pada percobaan 7segmen yang multipleks… trus yang scanning baris berarti yang kayak apa y gan??? tengkyu sebelumnya gan and sorry jg sblumnya gan… checkidot gan….. http://www.experimentalistsanonymous.com/diy/Datasheets/74HCHCT4017.pdf

    13. Pake cara gitu jg boleh, tp menurutku kurang praktis dan terlalu boros. 4017 pertama hanya jd 9 keluaran, yang kedua dan seterusnya jd 8 keluaran. Trus butuh tambahan gerbang AND setiap mo nambah 4017. Tu boros banget.
      Cara yg aku maksud adalah setiap keluaran dr 4017 tu digunakan untuk mengendalikan LED pada kolom dg nomor satuan sama. Sebagai contoh, kolom 0, 10, 20 dst tu dikendalikan oleh Q0 dari 4017. Kolom 1, 11, 21, dst dikendalikan oleh Q1. Begitu seterusnya. Tetapi, kolom 0 hingga kolom 9 tu berbeda blok dg kolom 10 hingga 19, jg berbeda dg kolom 21 hingga 29.
      Nah, kolom yg bener2 aktif tu kolom yg sesuai dg keluaran 4017 yg aktif pada blok kolom yg sedang aktif. Sebagai contoh, blok kolom yg sedang aktif adalah blok pertama (blok 0). Dan keluaran 4017 yg aktif adalah Q0. Maka kolom yg aktif adalah kolom 0. Walopun kolom 10 (blok 1) dan 20 (blok 2) jg dikendalikan oleh Q0 yg sedang aktif, tetapi karena blok 1 dan blok 2 tidak sedang aktif, maka kolom2 tersebut jg tidak aktif.
      Ya benar, scanningnya scanning kolom, baris tidak perlu discanning karena diatur secara paralel. Hanya ada 8 baris dan cukup untuk dikendalikan secara bersamaan hanya menggunakan 1 port saja.
      Bagaimana jika barisnya lebih dari 8? Itu hanya masalah penyusunan saja. Sebagai contoh, jika kita mau membuat matriks dengan ukuran 16 baris x 60 kolom, maka buatlah seperti 8 baris kali 120 kolom. Akan tetapi untuk kolom 60 hingga 119 ditempatkan dibawah kolom 0 hingga kolom 59. Jadi tidak diteruskan ke samping.

    14. maaf nih ganggu lagi,…sesuai penjelasan mas Han aku coba untuk ic4017 pin 14 aq konekkan ke nexcol,pin 15 ke resetcol dan pin 13 ke ground pin ‘0’ s/d ‘9’ ke led matrik setelah aku coba pake proteus koq nyalanya kacau dan cuma scaning aja ,,aq masih coba cuma dg 8 kolom aja,,mohon penjelasannya mas,matur nuwun.

    15. wah…. makasih gan atas jawabannya….
      soalnya, saya telah mengedit listing progamnya agan buat nampilin unrunning text, bukannya running text lagi(Gak apa2kan gan, sekalian buat saya belajar.. :-)). Untuk 8x32nya udah berhasil. tp yang lebih afdholnya tentu saja unrunning textnya ditampilkan pada baris dan kolom yang lebih lebar lagi…
      berarti kalo kita buat led matrix yang lebih dari 8 baris, kita bisa memultipleks keluaran dari port datanya y gan, dan memparalelkan setiap keluaran 4017 untuk pengendalian kolom dotmatriks yang bersesuaian dari kolom 1 sampai 60 (8 baris pertama) dengan kolom 61 sampai 120 (8 baris ke 2),jika yang kita buat 16 baris x 60 kolom…
      coba ngoprek lagi di rumah ahh…..
      untuk yang 4017 buat ngendali’in beberapa blok masih saya utak atik blum ketemu jg gan…. cuma yang berhasil pake teknik yang sama kayak agan yaitu counter 4 bit 7493 yang keluarannya buat ngendaliin 2×74154(4 to 16), tapi listingnya jg harus dioprek lagi….
      seribu kali lagi tengkyu gan….

    16. Klo mo buat 16 baris, caranya adalah seperti membuat 8 baris dg jumlah kolomnya 2xlipat. Kita hanya ngatur penempatan LEDnya. Buat percobaan, demo di sini kan dibuat untuk 8×32. Nah, 8×32 ini sama dg (8×16)+(8×16). Jika 8×16 yg kedua ditempatkan disebalah kanan dari 8×16 yg pertama, maka bentuknya adalah 8×32. Sedangkan jika 8×16 yg kedua ditempatkan di bawah 8×16 pertama, maka bentuknya menjadi 16×16. Coba jalankan simulator, tp ubahlah konfigurasi MXLED agar bentuknya menjadi 16×16. Pikirkan kenapa tampilannya menjadi seperti itu ❗

  9. Salam kenal mas,.,.
    saya sebenarnya juga tertarik untuk belajar tentang mikrokontroler, namun belum mengetahui sama sekali tentang bahasa assembly.
    Saya ingin belajar mulai dasar.
    Apakah mas bersedia memberi saya code misalkan menampilkan angka menggunakan bahasa assembly pada layar dahulu. dan compailer apa yang digunakan?
    trims sebelumnya,..

  10. Mas Sulhan,
    Saya membeli jadi modul led matrix ukuran 16×96.
    Mohon pencerahan bagaimana saya bisa mengganti tampilan teks lewat hyper terminal.

    Terimakasih

    1. @Wayan: biasanya modul led matriks punya kontroler sendiri untuk mengatur tampilannya, dan itu bisa berbeda2 caranya. Jd saran saya, hubungi vendor yg mengeluarkan modul tersebut. Karena hanya mereka lah yg paling tau bagaimana modul led matriksnya bekerja.

  11. asslm mas sulhan , q pngen bngt bkin running text,klo pke ic 4017 tuh bs d modif smp 20 kolom gk? trus bkin pcb nya gmn.mksudny jlur vertikal & horizontalnya

  12. salam kenal bang sulhan, saya new bin
    mau belajar buat dotmatric tulisan berjalan
    langkah pertama yang saya kerjakan apa yaaaa???
    soalnya saya belum begitu faham mikrokontroler,
    buku apa yang pas buat pemula…
    mohon petunjuknya…
    trim…

  13. mas aq mo nyoba menampilkan berita dari rss ke dot matrix…tapi belom berhasil…
    file berita di download ke pc pake rss reader dengan format .txt yang jadi masalah bagaimana cara mengirimkan data dari format .txt ke microcontroller???mohon bantuanya

    1. @ Izon
      Jika file txt-nya cukup besar, maka mikrokntroler hanya cukup untuk bisa menyalakan LED matrix saja. Jadi, PC bertanggung jawab untuk melakukan pengendalian bagaimana data akan ditampilkan di matrix. Komunikasi bisa dilakukan dg komunikasi serial. Tentukan beberapa karakter (yg non-printable) sebagai kode2 perintah. Misalnya karakter 1 artinya tampilan harus digeser ke kanan, karakter 2 digeser ke kiri, dsb. Jika ada berita yg harus ditampilkan, maka PC mulai melakukan perintah untuk menampilkan berita tersebut.

    2. @izon: tentu bisa ❗ model programnya kaya apa? lha itu komentar di atas.

                ...
                acall CekSerial
                jc    NoData
                cjne  A,#1,cek2
                acall GeserKanan
                sjmp  NoData
      cek2:     cjne  A,#2,cekPrint
                acall GeserKiri
                sjmp  NoData
      cekPrint: add   A,#-32
                jnc   NoData ; < spasi
                add   A,#32-128
                jc    NoData ; >= 128
                add   A,#128
                acall LoadChar
      NoData:   ...
      

      CekSerial adalah fungsi untuk melihat apakah ada data yg diterima. jika tidak ada data, maka carry akan diset.
      GeserKanan dan GeserKiri tentu saja fungsi untuk menggeser tampilan. sedangkan LoadChar adalah fungsi untuk menempatkan data yg diterima ke layar (matriks led)
      Apa cukup jelas?

  14. ass…,
    salam kenal mas.., aku numpang nanya ni mas, kalo untuk ngisi datanya itu gimana ya mas, and boleh gak sekalian minta skema yang ada di atas itu mas, sebelumnya terima kasih ya mas…

    1. mengisi data? maksudnya mengisi data bagaimana? kalau data tampilan tentu saja sesuai dengan programnya, bisa diprogram untuk secara fix menampilkan gambar tertentu seperti listing pada contoh ini, bisa juga diprogram untuk bisa menampilkan data yang dikirimkan saat run time, misalkan melalui komunikasi serial. untuk skema bisa dilihat di Merancang Rangkaian Matriks LED

  15. mas….bisa minta tolong kasih listing program buat led matriks diperbanyak komentarnya…biar lebih bisa dimengerti gitu…

    1. Memang bagian mana yang kurang dimengerti? kan penjelasannya juga sudah saya berikan di sini, bukan di listing. Baca juga komentar-komentar di sini. Dan sebagai dasar untuk bisa memahami matriks led, harus mengerti teknik di seven segment dulu. Penjelasan mengenai seven segment secara mendalam bisa dibaca di buku Mudah dan Menyenangkan Belajar Mikrokontroler

  16. trim’s bung…
    saya tertarik dgn mikrokontroler dan kebetulan saya disuruh membuat papan nama dgn matrix led hurup berjalan di setiap ruang kelas 1-6 SD.Dng contoh tulisan ‘KELAS I’yg hurupnya berjalan.bahan2 apasaja yg saya siapkan, bgmana membuatnya(contoh rangkaiannya) dimana saya dapatkan buku2 karya anda?kebetulan alamat saya di brebes,dimana yang terdekat membelinya?atau ada e-booknya di internet.

  17. membuat karakter memggunakan MSPaint dari image dikonversi pakai Imgtable itu ukuran font nya berapa mas?

  18. permisi mas
    ikutan nggabung, wah saya salut nih ma pak sulhan, ngasih ilmunya gak cuma2 langsung to the poin n gak bertele2, saya udah pernah nyoba bikin dot matrix tapi masih ada kendalanya untuk tulisannya masih mbayang,,
    tapi saya mau nyoba punya bapak mudah2an oke tapi saya masih bingung untuk 4017nya,
    semisal saya bikin dot matrixnya 8×32 nah untuk 4017 yang bwat tingkat puluhanya risetnya apa dapet sama seperti 4017 yang tingkat ke satunya/ di ambil dari output 4017 nya
    maaf nih soalnya masih kurang jelas.

    1. Gini Romady, reset 4017 dari semua tingkat digabung menjadi satu. Jadi kontroler akan melakukan reset pertama kali untuk mengaktifkan kolom pertama. Setelah melewati kolom terakhir, untuk kembali ke kolom 0 dilakukan dg mengirim reset lagi. Sebagai contoh, 32 kolom artinya setelah kolom ke 31 harus kembali ke 0. Maka, setelah kolom 31 aktif, kita harus mengirim reset lagi. Jadi semua 4017 akan kembali lagi ke posisi 0. Sebagai tambahan, kita sama sekali tidak perlu untuk membuat satupun dari 4017 dalam bentuk modulo untuk membuat hitungan menjadi tepat. Misalnya untuk 32 kolom, kita sama sekali tidak perlu membuat modulo 8 dan modulo 4, karena untuk kembali ke kolom 0 memang dilakukan dengan reset. Untuk tulisan membayang, itu terjadi karena saat perpindahan kolom aktif, LED-LEDnya tidak dimatikan terlebih dahulu.

    2. oke lah
      maaf nih satu lagi, saya masih bingung untung menjalankan simulasi MXLED nya. di situ kan menunya cuma config about ma help nah untuk load program yang akan kita gunakan gimana he he
      maaf nih walopun sudah ada yang tanya n di bahas oleh bapak tapi saya masih tetep kurang jelas.

    3. MXLED bukan simulator yg berdiri sendiri. Programnya tetep dijalankan menggunakan simulator dari Micro.exe. Kemudian atur simulator tersebut untuk mengirimkan output Portnya ke MXLED. Sudah ada penjelasannya di helpnya Micro.exe ko, ada demonya jg. Plis deh, aku nulis help itu kan untuk dibaca 😀

  19. mas saya mau bikin led matrik dengan menampilkan nama saya,tapi saya masih bingung cara merangkai led nya.saya akan buat hurup BEJO cara merangkai led nya gimana ya mas?tlong d bantu mas yah………….

    1. filnya udah aku ekstract terus yang iconnya i klik 2x tapi cuma muncul keterangan
      usage from comand prompt:
      ……………………..




      or right click.bmp file then choose……
      gitu mas

    2. owalah romadi.. lha itu namanya message box atau kotak pesan. lha kalo ada pesan ya coba dibaca pesannya apa. bisa bahasa inggris kan? klo ga bisa mengartikan kaya gitu ya keterlaluan sekali.

  20. mas mau tanya lagi nih he he jangan bosan mbalesnya yah.
    saya masih dingung di bagian pembentukan karakternya semisal program mas sulhan seperti ini:
    db 000H,000H,000H,000H,000H,000H,000H,05EH,000H,000H,000H,003H,000H,003H,000H,070H

    db 01CH,076H,01CH,016H,04CH,04AH,0FFH,052H,032H,044H,02AH,03CH,054H,022H,030H,04CH

    db
    05AH,026H,050H,000H,000H,003H,000H,000H,000H,000H,03CH,042H,081H,000H,081H,042H

    nah itu membentuk karakter apa mas?
    yang sudah aku pelajari seperti ini misal untuk 8×8
    db 081H, 0EEH, 0EEH, 0EEH, 081H, 0FFH ;A
    db 080H, 0B6H, 0B6H, 0B6H, 0C9H, 0FFH ;B
    nah itu membentuk huruf A dan B besar.
    tolong jelasin untuk programnya mas sulhan ,,,,,,
    makasih

    1. Ini sebenernya nanya yg mana kok nulisnya di sini, mbok coba pertanyaannya disesuaikan dg artikelnya. Gini, demi kemudahan memprogram dan biar programnya bisa lebih universal, maka data karakter ditulisakan semua dari karakter spasi (ASCII 32) hingga karakter ~ (127). coba lihat pada gambar yg digunakan untuk membuat karakternya, yaitu Karakter.bmp. Kemudian jg harus diperhatikan bahwa 0 mewakili menyala atau padam. Contoh yg aku kasih mengganggap 0 sebagai padam dan 1 sebagai nyala. Sedangkan yg km pelajari, kukira menganggap 0 sebagai nyala dan 1 sebagai padam. Ini hanya masalah perbedaan hardware dan dg mudah bisa dibalik.

  21. mas kalau mw membuat hrup O di led matrix gmna mas?sdangkan yang saya tau hbungan yang dipke di led matrix itu pararel,so gmna cranya memetikan led yang ad di tengah2 sdangkan kiri,kananj,atas,bawah led nyala.tlong penjelasanya mas.

  22. Pa Sulhan salam kenal saya bengtji saya tertarik sekali pembuatan LED MATRIK,saya pernah ke GRAMEDIA untuk mencari buku yg ditulis Pa Sulhan mengenai mikrokontroler dll nya tapi tdk dapat, jadi kalau saya mau beli,bagaimana caranya, saya tinggal di jakarta mohon informasikan juga harganya dan uangnya dikirim atau transfer ke bank apa,terimakasih

    1. salam kenal Bengtji, memang bukunya tidak banyak beredar di toko buku konvensional tp masih mudah didapat melalui toko buku online. harga resmi untuk terbitan 2006 tu Rp43.500, sedangakan untuk cetakan 2008 tu Rp49.500. tapi biasanya klo di toko buku online, diskon lebih banyak ketimbang di toko buku konvensional seperti Gramedia. jadi klo untuk jakarta, diskonnya cukup untuk mengganti ongkos kirim. kedua buku itu isinya sama persis karena hanya beda tahun terbitnya saja, jd klo masih bisa yg dapetin yg tahun 2006, ya pilih yg itu saja karena lebih murah.

    2. Pa sulhan,S terimakasih atas balasannya dan perhatiannya saya sudah coba cari beberapa toko buku online belum ketemu buku yg bapa tulis, kalau bisa, tolong beri tahu alamat http nya ,saya adalah karyawan sebuah perusahaan dibagian maintenance ,saya sedang dapat masalah,panel compressor nya rusak,dalam panelnya menggunakan sistim micro kontroller,apakah saya boleh bertanya sedikit,PCB nya menggunakan dua layer IC micro kontrollernya ST90R30C6R-C Eprom 12F6B88AA 9701E Chip M28C64C-150P6 EPSON SRM2264LCT Timer keeping RAM DS1642-150, display menggunakanLCD ,sekarang displaynya blank tdk nampak huruf dan push button ON/OFF tidak berfungsi,yg saya mau tanyakan apakan IC micro controllernya atau EPROM atau CHIP nya yg rusak ,maaf Pa Sulhan memang sekarang saya baru mulai belajar micro controller ,maka itu saya mau membeli buku-buka yg bapa tulis ,jika tidak maka saya akan buta sekali mengenai micro controller ini,micro controller tdk ada habisnya bahkan berkembang terus,mohon petunjuknya ,sebelumnya terimakasih

  23. salam kenal,, om saya baru beljar program pake c++
    skrang lgi buat “menampilkan huruf ” dengan array biar hurufnya tampil ke samping rumusnya apa?? trim’s

  24. salam kenal.. mau tanya kalo output Q0 itu beda dengan output yg lain yah? kebetulan saya sudah membuat scrolling text, namun sebelum diberi clock, output Q0 sudah menyala dan tidak mau mati.. mohon penjelasan dan solusinya yah Pak Sulhan.. terimakasih..

    1. maap mas, maksudnya pada keluaran 4017 kan ada Q0 sampe Q9.. output akan bergantian menyala dari Q0-Q9. nah dalam kasus saya ini sebelum 4017 diberi clock dan Chip Enablenya diberi 0, output Q0 sudah menyala terlebih dahulu. untuk Q1-Q9 sih tidak ada masalah. bagaimana cara mematikan Q0? terimakasih..

  25. salam kenal mas..
    mas sulhan,mau tanya ne.
    kalau programnya pake BASCOM AVR gmn tu mas listing programnya??

  26. wah pusing nih,baca buku&artikel bolak balik lom tau dr mana awalnya klo mau bikin runing teks,sudi kiranya ngasih penjelasan yg simpel & gamblang…….

  27. Mas saya bingung mau merakit LED matrix tapi rangkaiannya ga ada pada artikel ini bisa dikirimin rangkaian matrix led ke emailku. terus apakah pada rangkaian menggunakan shift register atau multiflexer.
    #define ResetCol P1_0
    #define NextCol P1_1
    pada inisialisasai progran di atas untuk pengaturan data clock dan datashiftnya knapa tidak digunakan.

  28. Error: c:\cvavreval\inc\mega8535.h(17), included from: mega8535.h: #include file nesting limit exceeded

    mas listing program diatas ketika di compile kok keluar peringatan spt diatas itu knp mas..makasih

  29. pak sulhan salam kenal,saya baru belajar tentang matrix display, saya browsing-browsing dan saya temukan topik tentang matrix ini dan saya tertarik. saya buat displaynya 15X7, dan saya pakai ATMGA8 untuk MCUnya, kemudian saya kontrol kolom dengan ic 4017(decode counter).
    itu saya download dari internet. tapi saya kesulitan menemukan progamnya.
    saya mau tanya apa masih bisa hardware saya dipakai,, mungkin pak sulhan punya refrensi programnya,,
    minta tolong dibalas.
    trimakasi sebelumnya.
    salam kenal

    adex

    1. Salam kenal Adex, sayang sekali mikrokontroler yang digunakan adalah ATMEGA8, karena contoh-contoh di sini menggunakan MCS-51. Akan tetapi sebenarnya tidak ada masalah untuk menggunakan mikrokontroler apapun. Jadi saya sarankan untuk mencoba menggunakan MCS-51 saja dengan contoh-contoh yang ada di sini. Sudah banyak yang berhasil. Setelah memahami dengan benar cara kerja dari matriks LED tersebut, cobalah untuk menterjemahkan contoh programnya untuk ATMEGA8

  30. Mas, Saya punya controller A40S dan 2 blok panel display P10. Saya mau membuat tulisan kaligrafi arab “Allah” dan “Muhammad” pada masing masing panel.
    Bisa nggak Mas, Gimana caranya?

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload the CAPTCHA.

Notify me of followup comments via e-mail. You can also subscribe without commenting.