BASIC4MCU | 질문게시판 | ATMEGA FND 작동 관련 문의
페이지 정보
작성자 총체적난국 작성일2021-06-09 17:23 조회3,169회 댓글2건본문
안녕하세요. 이 사이트 덕분에 조금씩 배워가고 있어 정말 감사합니다.
다름이 아니라 제가 짠 하기 코드는 스위치를 누르면 1씩 증가해서 0~9999까지 FND가 표현되는 코드입니다.
그런데 이 코드에서 0~99까지는 잘되는데 100이 넘어가면 3자리수부터는 FND가 켜지질 않습니다. 아무래도 볼드처리한 코드가 잘못된거 같은데 혹시 어느 부분이 잘못됐는지 조언 가능하시면 부탁 드리겠습니다.
#include <avr/io.h>
#include <avr/delay.h>
char fnd[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned int buff4,buff3,buff2,buff1;
unsigned int var1,var2;
unsigned int i=0;
int main()
{
DDRB=0b11101111; // 카운터 입력
DDRA=0xff; // FND 출력
DDRC=0b11101111; // TN
while(1)
{
counter();
display();
fnd_on();
if(i>9999)
{
i=0;
}
_delay_ms(10);
}
}
void counter()
{
PINB=0x00;
var1=PINB;
if(var1==0)
{
i++;
}
}
void display()
{
buff4 =i/1000;
buff3 =i%1000/100;
buff2 =i%100/10;
buff1 =i%10;
}
void fnd_on()
{
if(i < 10)
{
PORTC=0b00001000; PORTA=fnd[buff1]; _delay_ms(1);
}
else if(10 <= i < 100)
{
PORTC=0b00001000; PORTA=fnd[buff1]; _delay_ms(1);
PORTC=0b00000100; PORTA=fnd[buff2]; _delay_ms(1);
}
else if(100 <= i < 1000)
{
PORTC=0b00001000; PORTA=fnd[buff1]; _delay_ms(1);
PORTC=0b00000100; PORTA=fnd[buff2]; _delay_ms(1);
PORTC=0b00000010; PORTA=fnd[buff3]; _delay_ms(1);
}
else if(1000<=i < 10000)
{
PORTC=0b00001000; PORTA=fnd[buff1]; _delay_ms(1);
PORTC=0b00000100; PORTA=fnd[buff2]; _delay_ms(1);
PORTC=0b00000010; PORTA=fnd[buff3]; _delay_ms(1);
PORTC=0b00000001; PORTA=fnd[buff4]; _delay_ms(1);
}
}
댓글 2
조회수 3,169master님의 댓글
master 작성일
if(10 <= i < 100)
이런 조건식은 산수에서나 허용하는 것이지 c언어에서 허용되지 않습니다.
if((10 <= i) && (i < 100))
이런식으로 나누어서 연산해야 합니다.
master님의 댓글
master 작성일
if(i < 10) {
}
else if(i < 100) {
}
else if(i < 1000) {
}
else if(i < 10000) {
}
if문은 위처럼 작성하세요
다른 오류가 더 있는지 모르겠지만 눈에 띄는 것 하나만 적어드렸으니 다시 동작시켜보세요