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
/*
Project: 8X8 Dot Matrix Lesson
PIC (Crystal Frequency):
PIC16F877A (20MHz), PIC16F887 (20MHz), PIC16F1939 (Internal 32MHz)
PIC18F4520 (10MHz), PIC18F4550 (10MHz), PIC18F46K22 (Internal 16MHz)
Compiler: HI-TECH C for PIC10/12/16 V9.83, PIC18 V9.80
Last Modified: 22 November 2013
Website: http://shahrulnizam.com
*/
#define TIMER0
#if defined (_16F877A) || (_16F887)
#define ROW PORTB
#define COL PORTD
#elif defined (_16F1939) || (_18F4520) || (_18F4550) || (_18F46K22)
#define ROW LATB
#define COL LATD
#endif
#include "LibraryHardware.h"
#include "LibraryPeripheral.h"
#include "LibraryChar.h"
unsigned char count,array[8];
static void interrupt isr(void)
{
if(TMR0IF==1){
TMR0IF=0;
if(count<7) count++;
else count=0;
COL=0;
ROW=(0b00000001<<count);
COL=array[count];
}
}
void setup()
{
int i;
initialize();
TRISA=0b00000000;
TRISB=0b00000000;
TRISC=0b00000000;
TRISD=0b00000000;
TRISE=0b00000000;
timer0(8);
enable_tmr0();
BUZZER=1;
for(i=0;i<=7;i++) array[i]=0;
}
void loop()
{
int i;
for(i=0;i<=95;i++){
array[7]=0;
array[6]=Font7x5[i][0];
array[5]=Font7x5[i][1];
array[4]=Font7x5[i][2];
array[3]=Font7x5[i][3];
array[2]=Font7x5[i][4];
array[1]=0;
array[0]=0;
delay(500);}
}
21 responses to “PIC Lesson: Dot Matrix”
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?
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.
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
genrozzi, GSM Signboard satu contoh menggunakan dot matrix tapi bukan jam digital.
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
w/salam, Dz. Saya x de masa nak check coding org.
Okay.. maaf mengganggu en. Saya cuma minta bantuan klu bagaimana nak looping saja supaya alphabet tu sentiasa scrol berulang2.. maaf yer..
assalam…ni compile pakai MPLAB IDE ker?
w/salam, fazley. Ya guna software MPLab IDE.
salam saudara shahrul, klu pakai 5×7 dot matrix.. boleh config yg sama ke? tq
w/salam, guna 5X7 Dot Matrix tp kene ikut schematic yg sama boleh la.
Assalamualaikum..nk tnya ni guna pic model apa?
waalaikumussalam, guna PIC16F887 ataupun PIC18F4520.
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.
Ling, if use that Cytron product, just use 16 pin regarding the pin diagram, others not use.
Thanks for the reply… Then how to know which pins for row and column…?? Thanks…
can i get the code for scrolling led display using pic 16f877a micro controller please……….
maaf saya pelajar dari ipta ingin bertanya en shahrul tentang libraryhardware.h..sbb bila compile file tu not found..hope blas
taufiq, libraryhardware.h kena bayar.
brpa hrga full coding?
Fahmi, sila hubungi saya kat http://shahrulnizam.com/about/