ATmega128 소스 관련 질문입니당...C로 구성되어있어용 ㅠ ㅠ 한번만 봐주세용 ㅠ
겨울바람
질문 제목 : ATmega128제어 관련 소스입니다.. 128로 FND 6개를 제어하는 소스입니다..
#includeiom128.h
#includeina90.h
#define SW1 0xE0 //1번 스위치 눌렸을 때
#define SW2 0xD0
#define SW3 0XB0
unsigned char sw;// PINF값 받을 변수
unsigned int count=0;
unsigned char Timecount=0;
unsigned char FND0countA = 0;
unsigned char FND1countA = 0;
unsigned char FND2countA = 0;
unsigned char FND3countA = 0;
unsigned char FND4countA = 0;
unsigned char FND5countA = 0;
unsigned char numberA[11] ={0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFC,0xA7,0xFF,0xEF};//점 제거 FND 제어
unsigned char _numberA[11] ={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7C,0x27,0x7F,0x6F};// FORTA를 제어 ( 숫자 표시 )
unsigned char numberF[7] = {0xF5,0xF4,0xF3,0xF2,0xF1,0xF0};// FND 첫번째 ~ 여섯번째 FND ON
void delay(unsigned int m)// 잔상 제거를 위한 delay
{
unsigned int i, j;
for(i=0;im;i++)
for(j=0;j2650;j++);
}
//FND 제어 부분 시작
void FND5(void)
{
PORTA = _numberA[FND5countA];// FND 제어
PORTF = numberF[5]; // 디코더 제어
delay(100);
}
void FND4(void)
{
PORTA = numberA[FND4countA];// FND 제어
PORTF = numberF[4]; // 디코더 제어
delay(100);
if(FND4countA == 10)
{
FND4countA = 0;
FND5countA++;
}
else if(FND5countA == 1 && FND4countA ==3)//12가 될경우에 5번쨰 FND를 켜주기 위해서 그리고 초기화 ...
{
FND5countA = 0;
FND4countA = 1;
}
}
void FND3(void)
{
PORTA = _numberA[FND3countA];// FND 제어
PORTF = numberF[3]; // 디코더 제어
delay(100);
if(FND3countA == 6)
{
FND3countA = 0;
FND4countA++;
}
}
void FND2(void)
{
PORTA = numberA[FND2countA];// FND 제어
PORTF = numberF[2]; // 디코더 제어
delay(100);
if(FND2countA == 10)
{
FND2countA = 0;
FND3countA++;
}
}
void FND1(void)
{
PORTA = _numberA[FND1countA];// FND 제어
PORTF = numberF[1]; // 디코더 제어
delay(100);
if(FND1countA == 6)
{
FND1countA = 0;
FND2countA++;
}
}
void FND0(void)
{
PORTA = numberA[FND0countA];// FND 제어
PORTF = numberF[0]; // 디코더 제어
delay(100);
if(FND0countA == 10)
{
FND0countA = 0;
FND1countA++;
}
FND1();
FND2();
FND3();
FND4();
FND5();
}
//switch 부분 3개만 일
void FND0switch(void)
{
while(1)
{
FND0();
if(PINF == 0xF0)
{
FND0countA++;
break;
}
}
}
void FND2switch(void)
{
while(1)
{
FND0();
if(PINF == 0xF0)
{
FND2countA++;
break;
}
}
}
void FND4switch(void)
{
while(1)
{
FND0();
if(PINF == 0xF0)
{
FND4countA++;
break;
}
}
}
//main부분
void main(void)
{
DDRF = 0XFF;
DDRA = 0xFF;
TCCR0 = 0x04; //interrupt 설정
TCNT0 = 6;
TIMSK = 0x01;
TIFR|=0x01; //interrupt 설정 완료
__enable_interrupt(); //interrupt시작
while(1)
{
sw=PINF;
switch(sw)//버튼을 누를 경우에 define의 SW1,SW2,SW3,SW4를 확인하고 맞을 경우 Button함수 호출 모두 아닐 경우 FND함수 호출
{
case SW1 : FND0switch(); break;// 조건 만족시에 0번째 FND 1증가
case SW2 : FND2switch(); break;// 조건 만족시에 2번째 FND 1증가
case SW3 : FND4switch(); break;// 조건 만족시에 4번째 FND 1증가
default : FND0(); break;// 전체 FND 제어
}
}
}//interrupt 내부
#pragma vector=TIMER0_OVF_vect
__interrupt void TIMER0_OVF_interrrupt(void)
{
__disable_interrupt();
TCNT0=6;
count++;
if(count==1000)
{
FND0countA++;// 초 단위를 1초마다 증가 시켜주기 위해서 인트럽트 내부에 FND0countA 1초마다 증가
count=0;
}
__enable_interrupt();
}
질문 내용 : 안녕하세요..^^
제가 궁금한 부분이요.. ATmega128을 가지고 FND를 제어하는데요..
소스에서 보시면.. 빨간색과 파란색 부분이 전체적인 소스의 틀은 비슷합니다..
하지만 그 내부 변수들을 가지고 FND 위치와 FND안의 LED를 제어해서 표현해주는 형식의 소스입니다..
여기서 제가 의문점이 드는 것은요..
여기서 어떻해 하면.. 조금더 짧은 소스를 구현 할수 있을까 하는 것입니다..
define.. 구조체나.. 또는 3x3배열 .. 연산자를 통해서 소스를 조금더 간단히 만들수 있는지 조언좀 부탁드립니다..
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2692451 | 이 문제좀 풀어주세요 ^^ | 게자리 | 2025-04-23 |
2692424 | 2차원배열 자료입력질문이요! (1) | 똘끼 | 2025-04-22 |
2692401 | 유닉스안에서 C언어를 이용한 명함 만들기 입니다; 이해안가는 부분이있네요 | 2gether | 2025-04-22 |
2692374 | 고수님들 댓글 마니부탁해요!!! (2) | 엄지 | 2025-04-22 |
2692343 | scnaf에 자꾸 선언을 참조하라는데;; (8) | 도래 | 2025-04-22 |
2692282 | 도스상에서 생성된 exe파일에 press~ 뜨게 하기 (4) | 회사원 | 2025-04-21 |
2692256 | scanf("%*c"); ㅠㅠ 고수님들 | 거북이 | 2025-04-21 |
2692230 | 하노이탑 질문입니다. (1) | 미쁘다 | 2025-04-21 |
2692210 | 정보 올림피아드 문제인데.. 풀이 과정이 궁금합니다.(재귀함수) (5) | 물티슈 | 2025-04-20 |
2692144 | C언어와 리눅스에 대한 질문입니다. | 싴흐한세여니 | 2025-04-20 |
2692114 | 컨텍스트 스위칭하는데 걸리는 시간 측정.. | YourWay | 2025-04-19 |
2692086 | 간접참조 연산자, 증감연산자 질문이용! (2) | 블랙캣 | 2025-04-19 |
2692056 | 주석좀 달아주세요. 몇개적엇는데 몇개만달아주세요. (2) | DevilsTears | 2025-04-19 |
2691978 | 진수 쉽게 이해하는법... (3) | 지지않는 | 2025-04-18 |
2691949 | getchar() 한 문자를 입력받는 함수 질문 | 채꽃 | 2025-04-18 |
2691919 | 배열 정렬 및 합치기 질문입니다. | 사과 | 2025-04-18 |
2691845 | c언어왕초보 질문이 있습니다........ | 루나 | 2025-04-17 |
2691815 | void add(int num); 함수... (4) | 살랑살랑 | 2025-04-17 |
2691756 | 명령 프롬프트 스크롤바가 없어요 | 두메꽃 | 2025-04-16 |
2691725 | 자료구조에 관련해서 질문이 있어 글을 올립니다. | 누리알찬 | 2025-04-16 |