사이즈가 간당간당한 만능기판과 양이 좀 되는 3파이 적색 LED로 8*8 도트 매트릭스를 제작해 보았습니다.
IC는 ULN2803 하나만 썼습니다. 포트는 행을 제어하는 8핀과 열을 제어하는 8핀 총 16라인으로 동작합니다.
포트수를 줄여야 하는데... 기술도,,,,능력도,,,,,IC도,,,,없다는....ㅎㅎㅎㅎ(핑계.ㅡㅡ;)
제작한 8*8 도트 매트릭스 입니다... 뭐 그냥 좀 깔끔하지 않나요??
만드는데 좀 힘들었습니다.ㅎㅎ 뒷면을 보면 왜 힘든지 알수있습니다.ㅡㅡ;
좀 조잡하군요..ㅎㅎ 아무튼 저거 납땜하느라 눈알이 빠지는줄 알았습니다...
자작으로 8*32 도트매트릭스 만드시는 분들 존경스럽습니다..ㅎㅎ
이 도트매트릭스를 구동하는 소스를 공개합니다.
제가 열심히 짜맞춘 영문폰트를 넣어놨습니다.(숫자는 어디서 긁어온건데 맘에 안든다는;;)
도트매트릭스 소스 보기....
#include <avr/io.h>
#include <carroty/delay.h>
/********* 각 문자별 배열번호를 지정한다. **********/
#define dot_1 0
#define dot_2 1
#define dot_3 2
#define dot_4 3
#define dot_5 4
#define dot_6 5
#define dot_7 6
#define dot_8 7
#define dot_9 8
#define dot_0 9
#define dot_a 10
#define dot_b 11
#define dot_c 12
#define dot_d 13
#define dot_e 14
#define dot_f 15
#define dot_g 16
#define dot_h 17
#define dot_i 18
#define dot_j 19
#define dot_k 20
#define dot_l 21
#define dot_m 22
#define dot_n 23
#define dot_o 24
#define dot_p 25
#define dot_q 26
#define dot_r 27
#define dot_s 28
#define dot_t 29
#define dot_u 30
#define dot_v 31
#define dot_w 32
#define dot_x 33
#define dot_y 34
#define dot_z 35
/******************** 줄의 주소와 배열의 폰트를 정의한다. *************************/
unsigned char ccc[8] = { 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01 };
unsigned char row[36][8] = {{ 0x04, 0x08, 0x08, 0x10, 0x10, 0x10, 0x10, 0x00 }, //1
{ 0x1C, 0x22, 0x02, 0x04, 0x18, 0x20, 0x7E, 0x00 }, //2
{ 0x1C, 0x22, 0x02, 0x0C, 0x02, 0x42, 0x3C, 0x00 }, //3
{ 0x0C, 0x10, 0x22, 0x44, 0x7E, 0x08, 0x10, 0x00 }, //4
{ 0x1E, 0x20, 0x2C, 0x32, 0x02, 0x04, 0x24, 0x18 }, //5
{ 0x0C, 0x30, 0x40, 0x5C, 0x62, 0x42, 0x24, 0x18 }, //6
{ 0x7E, 0x04, 0x18, 0x20, 0x20, 0x40, 0x40, 0x00 }, //7
{ 0x1C, 0x22, 0x22, 0x1C, 0x22, 0x42, 0x42, 0x3C }, //8
{ 0x1C, 0x22, 0x22, 0x22, 0x1C, 0x04, 0x08, 0x30 }, //9
{ 0x1C, 0x22, 0x42, 0x42, 0x42, 0x24, 0x18, 0x00 }, //0
{ 0x18, 0x3C, 0x66, 0xC3, 0xFF, 0xFF, 0xC3, 0xC3 }, //A
{ 0xFE, 0xFF, 0xC3, 0xFE, 0xFE, 0xC3, 0xFF, 0xFE }, //B
{ 0x7E, 0xFF, 0xC3, 0xC0, 0xC0, 0xC3, 0xFF, 0x7E }, //C
{ 0xFE, 0xFF, 0xC3, 0xC3, 0xC3, 0xC3, 0xFF, 0xFE }, //D
{ 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF }, //E
{ 0xFF, 0xFF, 0xC0, 0xFE, 0xFE, 0xC0, 0xC0, 0xC0 }, //F
{ 0x7E, 0xFF, 0xC0, 0xC7, 0xC7, 0xC3, 0xFF, 0x7E }, //G
{ 0xC3, 0xC3, 0xC3, 0xFF, 0xFF, 0xC3, 0xC3, 0xC3 }, //H
{ 0x7E, 0x7E, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x7E }, //I
{ 0xFF, 0xFF, 0x06, 0x06, 0xC6, 0xC6, 0x7C, 0x38 }, //J
{ 0xC3, 0xC6, 0xCC, 0xF8, 0xF8, 0xCC, 0xC6, 0xC3 }, //K
{ 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xFF, 0xFF }, //L
{ 0xC3, 0xE7, 0xFF, 0xDB, 0xC3, 0xC3, 0xC3, 0xC3 }, //M
{ 0xC3, 0xE3, 0xF3, 0xFB, 0xDF, 0xCF, 0xC7 ,0xC3 }, //N
{ 0x7E, 0xFF, 0xC3, 0xC3, 0xC3, 0xC3, 0xFF, 0x7E }, //O
{ 0xFE, 0xFF, 0xC3, 0xFF, 0xFE, 0xC0, 0xC0, 0xC0 }, //P
{ 0x7C, 0xFE, 0xC6, 0xC6, 0xDE, 0xCE, 0xFE, 0x7B }, //Q
{ 0xFE, 0xFF, 0xC3, 0xFE, 0xFE, 0xC3, 0xC3, 0xC3 }, //R
{ 0x7E, 0xFF, 0xC0, 0xFE, 0x7F, 0x03, 0xFF, 0x7E }, //S
{ 0xFF, 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 }, //T
{ 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xFF, 0x7E }, //U
{ 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0x66, 0x3C, 0x18 }, //V
{ 0xC3, 0xC3, 0xDB, 0xDB, 0xDB, 0xDB, 0xFF, 0x66 }, //W
{ 0xC1, 0x63, 0x36, 0x1C, 0x38, 0x6C, 0xC6, 0x83 }, //X
{ 0xC3, 0xC3, 0x66, 0x3C, 0x18, 0x18, 0x18, 0x18 }, //Y
{ 0xFF, 0xFF, 0x0E, 0x1C, 0x38, 0x70, 0xFF, 0xFF } //Z
};
/**** 오른쪽에서 왼쪽으로 문자를 쉬프트하는 함수를 정의한다. *****/
void shift(int n,int time){
int w,v,l,i;
unsigned char buf[8];
for(v=7;v>=1;v--){
for(w=0;w<8;w++){ buf[w]=row[n][w]>>v; }
for(l=0;l<time;l++){
for(i=0;i<8;i++){PORTA=ccc[i]; PORTD=buf[i]; delay_ms(2);}
}
}
for(v=0;v<8;v++){
for(w=0;w<8;w++){ buf[w]=row[n][w]<<v; }
for(l=0;l<time;l++){
for(i=0;i<8;i++){PORTA=ccc[i]; PORTD=buf[i]; delay_ms(2);}
}
}
}
/************* 문자를 출력하고 있는 함수를 정의한다. ************/
void print(int n,int time){
int i,l;
for(l=0;l<time;l++){
for(i=0;i<8;i++){PORTA=ccc[i]; PORTD=row[n][i]; delay_ms(1);}
}
}
int main(){
DDRA=0xFF; //PORTA 를 출력으로 설정한다.
DDRD=0xFF; //PORTD 를 출력으로 설정한다.
while(1)
{
print(dot_h,200);
print(dot_k,200);
print(dot_s,200);
shift(dot_h,3);
shift(dot_k,3);
shift(dot_s,3);
}
return 0;
}
이 도트매트릭스의 구동 모습은 아래 동영상을 플레이하면 보실수 있습니다..
댓글을 달아 주세요
이거 소스 8051칩에서도 가능한가요.
글쎄요...
제가 8051을 다뤄보지 않아서 잘 모르겠습니다.ㅎㅎㅎ;
관리자만 볼 수 있는 댓글입니다.
네~ 물론입니다. 비영리목적으로 활용하셔서 도움이 되신다면 제가 더 감사하죠.ㅎㅎ