BASIC4MCU | 질문게시판 | 답변 : 답변 : 도트매트릭스 avr studio ( atmaga 128)질문이요!
페이지 정보
작성자 마지막 작성일2018-12-17 11:35 조회22,382회 댓글7건본문
답변 달아주셔서 정말 감사합니다. ㅠㅠ
다시 설명 드리자면 (도트매트릭스 8x8)2개, LED 5개 , 스위치 3개, 부저가있습니다.
예를 들어서 "새"라는 글씨를 선택하는걸로 가정하겠습니다.
맨처음 도트매트릭스 1번 (왼쪽칸 PORTC) "가"글씨가 켜지며 시작하는겁니다.
"가" -> sw1번(인터럽트 4)을 2번 눌러 "새" 를 선택합니다.
그후 sw3(인터럽트 6)번을 눌러 확인을 누르면이때 스위치 3번은 "SW3=(MODE 변경 및 넘어가기)"
다시 본론으로 돌아와서
"새" 도트매트릭스1번(왼쪽칸 PORTC) 유지상태고 도트매트릭스2번 PORTD(오른쪽칸에) 점이>> ●○○○○○○○
들어옵니다. 이때 sw1,sw2(인터럽트4,5번)을 눌러서 [그림2]를 봐주시면 네모친게 한묶음입니다. ○○○○○○○○
sw1번을 누르면 한묶음의 왼쪽줄 선택하게 만들고 sw2번을 누르면 한묶음의 오른쪽줄 선택하게 ○○○○○○○○
만든후 sw3(인터럽트6번)을 누르면 다음 묶음으로 넘어가고 이제 다선택하면 sw3(인터럽트6번을) ○○○○○○○○
누르면 이제 결과 값이 맞으면 도트매트릭스에 1번(왼쪽칸 POTRC)O, 틀리면 X 인데 ○○○○○○○○
근데 이건 코드가 너무복잡해지고 욕심인것 같아서 다맞게 하는걸로 해서 이제 부저소리와 LED 버튼 ○○○○○○○○
1개가(PORTF)가 들어오게 부저는(PORTB) 결과값 확인한후 sw3번을 다시 누르게되면 모드 1로 ○○○○○○○○
돌아와 5번 반복 led 불 5개 들어오면 사용종료 부저소리와 함께 끝나는걸로 설계하고싶습니다.. ○○○○○○○○
이렇게 보니깐 복잡한데 사진첨부했으니 보시면 이해 바로 되실겁니다 ㅠㅠ 감사합니다.정말
함수랑 코드가 보기 어려우시면 마스터님께 보기 쉽게 바꾸셔도 됩니다.
제가 그거보고 하겠습니다.
#include <avr/io.h>
#include <avr/interrupt.h>
#define F_CPU 8000000UL
#include <util/delay.h>
//int num1[]={0x01,0x02,0x03};
//
int num[10][8]={
{ 0x00,0x00,0x17,0x14,0x74,0x14,0x14,0x00},// 가
{ 0x00,0x02,0x02,0x02,0x3E,0x08,0x08,0x3E},// 노
{ 0x00,0x00,0x52,0x52,0x75,0x55,0x50,0x50},// 새
{ 0x00,0x00,0x17,0x14,0x77,0x11,0x17,0x00},// 라
{ 0x08,0x08,0x14,0x14,0x00,0x3E,0x08,0x08},// 수
{ 0x00,0x00,0x3c,0x20,0x3c,0x20,0x00,0xff},// 크
{ 0x00,0x20,0x2f,0x21,0x21,0xe1,0x2f,0x20},// 다
{ 0x04,0x44,0x4E,0x40,0x6E,0x4A,0x4E,0x40},// 허
{ 0x20,0x20,0x2f,0x29,0x29,0x2f,0x20,0x20},// 미
{ 0x00,0x40,0x5c,0x50,0x5c,0x44,0x5c,0x40},// 리
};
//
char mode=1,Jin=0,Jout=0,j=0,i=0,c=0; a=0,b=0,d=0,y=0;
int Val=0,Vmax=0;
//
ISR(INT4_vect){ // sw1
if(mode==1){ if(++c>9)c=0; }
if(mode>=2){ if(++d>7)d=0; }
}
//
ISR(INT5_vect){ // sw2
if(mode>=2){ if(++y>2)y=0; }
}
//
ISR(INT6_vect){ // sw3,mode 선택(enter)
if(++mode>3)mode=0;
if(Jin==0&&Jout>0)Val++;
if(Jout==0&&Jin>0)Val--;
}
//
int main(void){
int i,count;
DDRA=0xff; DDRB=0xff; DDRF=0xff; DDRC=0xff; DDRD=0xff;
EICRB=0xAA; EIMSK=0x70; SREG=0x80;
while(1){
Jin=Jout=0;
while(mode==1){ // 점자 선택
for(i=0; i<8; i++){ PORTA=1<<i; PORTC=num[c][i]; _delay_ms(2); }
}
while(mode==2){
for(i=0; i<3; i++){ PORTA=d; PORTC=1<<y; _delay_ms(2); }
}
}
}
댓글 7
조회수 22,382master님의 댓글
master 작성일
{ 0x00,0x00,0x52,0x52,0x75,0x55,0x50,0x50},// 새
○○○○○○○○ 0x00
○○○○○○○○ 0x00
○●○●○○●○ 0x52
○●○●○○●○ 0x52
○●●●○●○● 0x75
○●○●○●○● 0x55
○●○●○○○○ 0x50
○●○●○○○○ 0x50
이 글씨가 사진의 새 문자에서 점찍은 것과 같은 건가요?
작은 사각형 1,2번은 어느 구간일까요?
master님의 댓글
master 작성일
{ 0x00,0x00,0x17,0x14,0x74,0x14,0x14,0x00},// 가
○○○○○○○○ 0x00
○○○○○○○○ 0x00
○○○●○●●● 0x17
○○○●○●○○ 0x14
○●●●○●○○ 0x74
○○○●○●○○ 0x14
○○○●○●○○ 0x14
○○○○○○○○ 0x00
작은 사각형 1,2는 "가" 문자인가요?
좌우가 바뀐(미러링 된) 폰트군요
마지막님의 댓글
마지막 작성일네 맞습니다 제껀 좌우가 바껴서 나옵니다..
master님의 댓글
master 작성일
폰트와 작은 사각형의 관계도 이해가 안되고
한묶음의 왼쪽, 한묶음의 오른쪽도 이해가 안되고
for(i=0; i<3; i++){ PORTA=d; PORTC=1<<y; _delay_ms(2); }
이 코드의 동작도 이해가 안됩니다.
마지막님의 댓글
마지막 작성일
작은사각형의 의미 <그림2>보시면
새란 글자를 점자로 표기하면 왼쪽 그림에
있는 점자로 나오더군요 그리고 이제 오른쪽 그림을 보시면 빨간색으로 네모친게 1,2번이 있습니다 거길보시면
그 1번안에 왼쪽 줄 ●○
●○
●○
●○
을 뜻하는거고 오른쪽은 그반대
○●
○●
○●
○●을 뜻하는거였습니다.
그리고
for(i=0; i<3; i++){ PORTA=d; PORTC=1<<y; _delay_ms(2); // 이건 이렇게 해야지 도트매트릭스에 글자 표기 하는걸 나타낸건데 이렇게해야지 나타나더군요. 혹시 다른방법이 있다면 그걸로 해두 됩니다!ㅠㅠ 폰트는 어떤걸 말씀하시는지?~~
master님의 댓글
master
폰트 구동 방법을 모르고 있죠?
마지막님의 댓글
마지막 작성일저렇게 하면 나오던데.. 따로 방법이있나요?