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을 사용하고 있는데 조언해 주신다면 감사하겠습니다.
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;
참고하세요^^