아하
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
청렴한청가뢰169
청렴한청가뢰16921.04.22

ATmega128 질문입니다. 꼭 좀 도와주세요ㅜㅜ

#include <avr/io.h>

#include <util/delay.h>

#include <avr/interrupt.h>

#include <avr/signal.h>


#define F_CPU 16000000UL


#define LIMIT_SW 2000


unsigned char digit[] = {0x77, 0x41, 0x3B, 0x5B, 0x4D, 0x5E, 0x7C, 0x43, 0x7F, 0x4F}; // Common Cathode


void display_7segled(unsigned char led[], unsigned int number);



// ***********************************************************

// Main program

//

int main(void) {

// variable initialize

DDRC = 0xFF; //output

DDRD = 0x00; //input


PORTC = 0xFF; //초기출력 high

PORTD = 0xFF; //내부 풀업 사용

unsigned char sw = 0; //PORTD에서 들어오는 값 저장

unsigned int cntSw = 0; //스위치 눌린 횟수 카운팅

unsigned char fndState = 0; //fnd값 표시 설정



while(1) { // Infinite loop; define here the



sw = PIND&(1<<PD0); //D포트로 들어오는 입력 값 읽어옴

// 0번 핀 상태 읽어옴

switch(sw)

{


case 0;

if(sw == 0)

{

cntSw++;

}else

{

if(fndState == 9)

fndState = 0;

else

fndState++;

}

break;

case 1;

if(sw == 0)

{

cntSw--;

}else

{

if(fndState == 0)

fndState = 9;

else

fndState--;

}

break;

}

display_7segled(digit, (unsigned int)fndState);

cntSw = 0;


void display_7segled(unsigned char led[], unsigned int number)

{

PORTC = ~led[number];

}





k0(0)를 누를 때마다 FND의 숫자가 1씩 증가하고 k1(1)을 누를 때마다 1씩 감소하며 9를 넘어가면 0부터 시작하게끔 코드를 작성하고 싶습니다.

프로그램은 vmlab을 사용하고 있는데 조언해 주신다면 감사하겠습니다.

55글자 더 채워주세요.
답변의 개수
1개의 답변이 있어요!
  • k0(0)를 누를 때마다 FND의 숫자가 1씩 증가하고 k1(1)을 누를 때마다 1씩 감소하며 9를 넘어가면 0부터 시작하게끔 코드를 작성하고 싶습니다.
    프로그램은 vmlab을 사용하고 있는데 조언해 주신다면 감사하겠습니다.

    ==> fndState++; <= 이부분이 1씩증가하다보면 9를 넘을텐데요 이 명령문 바로 아래에서

    if 명령을 한번 더 사용해주세요

    예시를 하자면?

    fndState++;

    if ( fndState > 9 ) fndState = 0;

    이렇게 해주시면 됩니다

    마찬가지로

    fndState--;

    이것 역시 0 이하는 안되어야 할것 같은데요..

    위에처럼 if문을 바로 아래에 추가해줍니다

    fndState--;

    if ( fndState < 0 ) fndState = 0;

    참고하세요^^