BASIC4MCU | 질문게시판 | (초보)알파벳 A만들고 행 제어하기
페이지 정보
작성자 SKYUN 작성일2024-04-02 22:55 조회1,780회 댓글3건본문
#include <avr/io.h>
#include <util/delay.h>
#define DEBOUNCING_DELAY 1000
void msec_delay(int n);
unsigned char pattern[8]
={0xE7, 0xE7, 0xDB, 0xDB, 0x81, 0xBD, 0x7E, 0x7E};
int main(void)
{
int i=7;
DDRA=0xFF;
DDRC=0xFF;
PORTC=0x01<<i;
PORTA=pattern[i];
while (1)
{
msec_delay(DEBOUNCING_DELAY);
if(i--==0) i=7;
PORTC=0x01<<i;
PORTA=pattern[i];
}
}
void msec_delay(int n)
{
for(; n>0; n--)
_delay_ms(1);
}
현재 여기까지 진행하여 8->1번 행까지 한 줄씩 켜지는 것을 만들었는데
제가 원하는 프로그램은 A가 있고 8번 행 한 줄 꺼지고 1초 후 다음 7번 행 꺼지고 다시 8번 행은 켜지는 식으로 해서 1행까지 하고 이 동작을 무한 반복하는 코드입니다.
계속 생각 중인데도 어떻게 해야할지 모르겠습니다.
댓글 3
조회수 1,780master님의 댓글
master 작성일
도트매트릭스는 열과 행을 제어해야 합니다.
회로도가 없어서 정확한 구동은 안되지만
포트B라고하면 아래처럼 제어하면 됩니다.
#include <avr/io.h>
#include <util/delay.h>
//
unsigned char pattern[8]={0xE7,0xE7,0xDB,0xDB,0x81,0xBD,0x7E,0x7E};
//
int main(void){
int i=7,r,t;
DDRA=0xFF; PORTA=pattern[i];
DDRB=0xFF;
DDRC=0xFF; PORTC=1<<i;
while(1){
PORTC=1<<i;
for(t=0;t<100;t++){ // 10ms * 100 = 1000ms
for(r=0;r<8;r++){ // 1열~8열// 1250us * 8 = 10ms
PORTA=pattern[i]; PORTB=1<<r; _delay_us(1250);
}
}
if(--i<0)i=7;
}
}
SKYUN님의 댓글
SKYUN 작성일PORTA와 PORTC만 사용하고 PORTA에 8x8 LED MATRIX를 껴놓은 상태입니다. 혹시 이렇게 해서 만드려면 어떻게 해야하나요?
master님의 댓글
master 작성일회로도를 첨부해보세요