BASIC4MCU | 질문게시판 | atmega128 코딩 질문드립니다.
페이지 정보
작성자 비공개 작성일2018-06-06 10:29 조회8,439회 댓글0건첨부파일
본문
안녕하세요 제가 이번에 학교에서 프로젝트로 avr을 사용해 atmega128로 진법변환기 프로그램을 만드는중인데
너무 어려워서 자꾸 막히네요..
도저히 혼자서는 힘들어서 해보는데까지 해보긴해봤는데 그다음엔 도저히 안되네요..
일단 간단하게 프로그램을 소개하겠습니다.
세븐 세그먼트 3개와, 스위치 3개, led 8개를 사용합니다.
1. 처음에 sw1으로 1번 세븐세그먼트에(2,8,10,16진수를 선택합니다)
2. 그다음엔 sw2으로 2번 세븐세그먼트에(변환하고자 하는 진수를 선택한후)
3. sw3으로 ex) 1번 세븐세그먼트: 8 / 2번 세븐세그먼트: 10 이선택되면
8->10진수로 변환하는거잖아요
근데 이제 여기서 문제는 제가 1,2,3번을 했는데
그다음이 어떻게 해야할지 너무 막막하네요..
질문사항:ex1)8->10진수면 이제 sw1은 100의자리 숫자를 나타낼것이고
sw2는 1의자리 숫자가 올라가고 99까지 카운트를 하게끔 설계
sw3은 숫자를 입력 확인을 하면 바로 10진수로 나타내고
sw3을 한번더 누르면 다시 처음(8->10진수 바꾸기)으로 리셋
sw1,sw2,sw3를 한번에 누르면 맨처음으로 초기화
ex2)2->10진수 1. sw1으로 led 불빛차례대로 00000000부터 1씩 차례대로 증가하게 만듭니다.
2. sw2로 led 불빛차례대로 -1씩 감소하게 만듭니다.
3. sw3은 확인버튼인데 이제 00000011이면 3이잖아요 그럼 sw3을 누르면
세븐세그먼트에 3이라고뜨는것이고
4. sw3을 한번더 누르면 다시 처음(2->10진수 바꾸기상태)로 리셋
5. 마찬가지로 sw1,sw2,sw3 한번에 누르면 맨처음으로 초기화
이정도만 해주시면 제가 나머지는 보고 할수있을것같은데 혹시 도움 주실수있나요~?
제가 설명을 잘못해서 동영상도 찍었어요
동영상에 보이는것과 같이 이제 8->10진수 변환기를 선택하면 스위치3번이 확인동작인데 이제 스위치 1번을 누르면 8진수 백의자리숫자를 올리고 스위치 2번을 누르면 8진수 일의자리숫자부터 십의 자리숫자까지 숫자를 올리게해서 스위치 3번을 누르면 10진수로 알아서 변환되게 ? 이런식으로 만들려고합니다.. 일단
제가 지금까지 했던 코드입니다.
#include<avr/io.h>
#include <avr/interrupt.h>
unsigned long int a[]={~0x3F,~0x5B,~0x7F,~0xDE,~0xF6};
unsigned long int aa[]={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x27,~0x7F,~0x6F,~0x77};
unsigned long int aaa[]={0xff,~0x3F};
unsigned long int b=0,c=0,d=0,b1=0,c1=0,d1=0;unsigned long int octal1[]={~0x3F,~0x06,~0x5B,~0x4F}; // 백의자리 3까지
unsigned long int octal2[]={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x27,~0x7F}; // 일의자리 0~7까지
unsigned long int hex1[]={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x27,~0x7F,~0x6F,~0x77,~0xF7,~0xFC,~0xB9,~0xDE,~0xF9,~0xF1};
unsigned long int hex2[]={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x27,~0x7F,~0x6F,~0x77,~0xF7,~0xFC,~0xB9,~0xDE,~0xF9,~0xF1};
unsigned long int decimal1[]={~0x3F,~0x06,~0x5B};
unsigned long int decimal2[]={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x27,~0x7F,~0x6F,~0x77};int main()
{
DDRB = 0xff;
DDRF = 0xff;
DDRC = 0xff;
DDRD = 0xff;
EICRA = 0x00;
EICRB = 0x2a;
EIMSK = 0x70;
sei();
while (1)
{
PORTC=a[b];
if(b==5)
b=0;
PORTD=a[c];
if(c==5)
c=0;
PORTF=aaa[d];
PORTB=aaa[d];
if(d==2)
d=1;
}
return(1);
}ISR(INT5_vect)
{
++b;
}
ISR(INT4_vect)
{
++c;
}ISR(INT6_vect)
{
b=0;
c=0;
++d;
}
댓글 0
조회수 8,439등록된 댓글이 없습니다.