답변 : 도트매트릭스 avr studio ( atmaga 128)질문이요!
페이지 정보
작성자 master 작성일18-12-17 11:03 조회4,923회 댓글0건본문
// MCU BASIC: https://www.basic4mcu.com
// DateTime : 2018-12-17 오전 11:06:08
// by Ok-Hyun Park
//
안녕하세요..바쁘신데 도와주시면 정말 감사하겠습니다..
현재 간단하게 도트매트릭스를 이용해 점자게임을 만들려고 합니다.
설명 먼저하면
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
#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},// 허 //{ 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},// 리
};
//
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){ // sw2
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); }
}
}
}
소스도 이해가 어렵고
무엇을 원하는지 모르겠습니다.
동영상을 첨부하고 소스 주석을 달고
더 상세하게 작성해보세요
//
while(mode==1){ 에서 선택한 c 를
while(mode==2){ 에서 표시하고 싶다는 건가요?
PORTA=1<<i; PORTC=num[c][i];
이 코드는 문자를 표시한다는 것을 알겠는데
PORTA=d; PORTC=1<<y;
이 코드는 무엇을 출력하는 것일까요?
댓글 : 0
조회수 : 4,923
등록된 댓글이 없습니다.