본문 바로가기

Coding Diary/Atmega128

Atmega128 8x8 Matrix 숫자 0~9

항상 난 해보고 싶은 것이 많아 이것저것 30이 되기 전에 도전하는 중이다~~~

 

이번에는 전광판 8x8 LED 제어 부분에 대해서 

 

포스팅 해보려고 한다.~~~

 

 

소스코드를 다 보여 주기 전에 항상 이것만이라도 기억해보자

 

한 좌표에 대한 불을 키기 위해선 고정 좌표값을 준다..

하지만 그 것을 움직이기 위해선 shift 연산자를 통해서 시작점을 정해주면 된다는 것이다~~!!

 

시작~~

#define F_CPU 16000000
#include <avr/io.h>
#include <util/delay.h>

unsigned char arr[10][8]={
{0x18, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x18},//0
{0x18, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C},//1
{0x1C, 0x22, 0x02, 0x02, 0x04, 0x08, 0x10, 0x3E},//2
{0x38, 0x44, 0x04, 0x18, 0x04, 0x04, 0x44, 0x38},//3
{0x0C, 0x14, 0x24, 0x44, 0x84, 0xFF, 0x04, 0x04},//4
{0x7C, 0x40, 0x40, 0x78, 0x04, 0x04, 0x44, 0x38},//5
{0x38, 0x44, 0x40, 0x78, 0x44, 0x44, 0x44, 0x38},//6
{0x3E, 0x22, 0x02, 0x02, 0x04, 0x08, 0x10, 0x20},//7
{0x3C, 0x42, 0x42, 0x3C, 0x42, 0x42, 0x42, 0x3C},//8
{0x3C, 0x42, 0x42, 0x3C, 0x02, 0x02, 0x42, 0x3C} //9
};

//unsigned char arr[1][8] = {
//{0x18, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x18}
//};

//DDRD = 0x00;
int i=0, j=0;
int cnt=0;
int shift;


int main(void){
DDRE = 0xFF;
DDRF = 0xFF;
//int sec=0;
int count =0;
int a=0;
//unsigned int a = 0xfe;
while(1)
{
for(i=0;i<10;i++)
{
for(int k=0;k<30;k++)
{
for(j=0;j<8;j++)
{
PORTF=~(0x01<<j);

if(count<=7){
PORTE=arr[a][j]>>(7-count);
}
else if(count>7)
{
PORTE=arr[a][j]<<(count-7);
}

_delay_ms(1);
}
}

count++;
if(count>15)
{
count=0;
a++;
}
}
}
return 0;
}

(들여 쓰기가 안되어있는 점은 이해해 주길...)

 

배열을 선언하고 각 부분에 대해서 뒤로 shift 하고 다시 본래 좌표로 들여오고

 

다시 본래 좌표에서 shift 시켜서 다시 내보내는 과정이다

 

동영상으로 한번 보자

이걸 어렵게 생각해서 하루를 붙잡은 내 하루가 아쉽다....

오늘 할말은 여기까지~~

 

메일 - robin_hood817@naver.com