BASIC4MCU | 질문게시판 | 도트매트릭스 avr studio ( atmaga 128)질문이요!
페이지 정보
작성자 마지막 작성일2018-12-17 09:16 조회7,293회 댓글0건본문
안녕하세요.. 바쁘신데 도와주시면 정말 감사하겠습니다..
현재 간단하게 도트매트릭스를 이용해 점자게임을 만들려고 합니다.
설명 먼저하면
PORTC,D = 도트매트릭스1,2
PORTB= 부저(1개)
PORTF=LED(5개)
스위치(3개)
1. 처음에 글자(도트매트릭스1에나옴)를 스위치로 선택합니다.
2. 스위치로 점자를 선택합니다.(점 6개 ●●
●●
●● ) 도트매트릭스에 표기
3. 맞으면 O(도트매트릭스에 표기) 글자와 소리, 또LED 불빛이 1개 들어옵니다. ( 점자 특성상 다맞게 설계해야할것같습니다.)
4. 이런식으로 계속 반복하고 불 5개가 들어오면 종료 부저와 맨처음으로 초기화?~ 이정도할려고 하는데
문제는 글자 표기및 스위치로 바꾸는건 가능한데 점자를 표기할려고하면 기존에있던 도트매트릭스 점자가 저장이 안되고
옆으로 시프트되서 문제입니다. 예를 들어 1 2
● ● 이렇게 먼저 할려면 첫번째줄 점 1개 선택후 오른쪽으로 시프트 과정에
○ ● 있어서 왼쪽께 사라지는경우가있어서요..
○ ● 너무어렵네요. 어려운건 아니지만 ㅠㅠ 머리가 나빠서 스스로 해결을 못할것같습니다.. 코드를 도와주시면 그거보고 이해하고 공부하겠습니다... 바쁘신데 부탁한번 드려보겠습니다.. 도와주세요
지금까지 했던 코드입니다.
#include <avr/io.h>
#include <avr/interrupt.h>
#define F_CPU 8000000UL
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;
#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},// 다
{0x00,0x04,0x44,0x4E,0x40,0x6E, 0x4A,0x4E,0x40}, //허
{0x20, 0x20, 0x2f, 0x29, 0x29,0x2f,0x20,0x20},//미
{0x00, 0x40, 0x5c, 0x50, 0x5c,0x44, 0x5c,0x40},//리
};
int main(void)
{
DDRA = 0xff;
DDRB = 0xff;
DDRF = 0xff;
DDRC = 0xff;
DDRD = 0xff;
EICRA = 0x00; EICRB = 0x2a;
EIMSK = 0x70; sei();
int i, count;
while(1){
Jin=Jout=0;
while(mode==1){ // 점자 선택
for(i=0; i<8; i++)
{
PORTA = 0x01<<i;
PORTC = num[c][i];_delay_ms(2);
}
}
while(mode==2){
for(i=0; i<3; i++){
PORTA = d;
PORTC = 0x01<<y;
_delay_ms(2);
}
}
}return 0;
}
ISR(INT6_vect){ if(++mode>3)mode=0; if(Jin==0&&Jout>0)Val=Val+1; if(Jout==0&&Jin>0)Val=Val-1; } // sw3, mode 선택(enter)
ISR(INT4_vect){ // sw2if(mode==1){
if(++c>9)c=0;
}
else if(mode==2){if(++d>7)d=0;
}
else if(mode==3){if(++d>7)d=0;
}
}
ISR(INT5_vect){ // sw2
if(mode==2){
if(++y>2)y=0;
}
else if(mode==3){if(++y>2)y=0;
}
}
댓글 0
조회수 7,293등록된 댓글이 없습니다.