#include <avr/io.h>
#include <util/delay.h>
#define S7_1 0x7F;
#define S7_2 0xBF;
#define S7_3 0xDF;
const char Font[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x83,0xf8,0x80,0x98};
unsigned int adc_value, temp;
unsigned char value_10 ;
void control_7Seg(char N)
{
unsigned int i;
unsigned char N10, N1,N_p1;
N10 = temp /10; //10의자리
N1= temp %10;//1의자리
N_p1= (temp/10)%10;//소수점 1자리
for(i=0;i<16;i++) // 16번 평균화 작업후 표시
{
PORTD= S7_1; //10의 자리를 켜준다
PORTE = Font[N10];
_delay_ms(1000);
PORTD = S7_2; // 1의 자리를 켜준다
PORTE = Font[N1];
_delay_ms(1000);
PORTD = S7_3; // 소수점 첫번쨰 자리를 켜준다.
PORTE = Font[N_p1];
_delay_ms(1000);
}
}
int main(void)
{PORTE=0X00;
DDRE=0xff; // A포트 전체를 출력단자로 사용
PORTD=0x00;
DDRD=0xE0; // C포트중 7,6,5 핀 출력단자로 사용
DDRF=0x00;
ADMUX=0Xc0;// 내부 2.56V 사용 ADC PORTF의 1번핀사용
ADCSRA=0xe7; //ADC동작
while(1)
{
control_7Seg(temp);
value_10=ADCW;//ADCW LM35온도 받음 ADC_VALUE 온도값
temp = value_10 * 100/ 1024 ;
};
}
회로는 C.A를 사용하였고 TR은 2N3906인 pnp TR을 사용하였습니다
일단 컴파일을 하면 에러는 하나도 없습니다. 그래서 더더욱이 막혔습니다.
lm35에서 출력된값을 lm358로 증폭을 시켜 Vout쪽을 측정하면 10배의 증폭된 값이 나오는데,
PORTF로 입력된 lm35 값을 안에서 변화은 하지 못하는 걸로 생각이 됩니다.
그래서 이것저것 찾아는 봤는데 fnd3개가 다 000 으로 밖에 표시가 되지 않습니다.
플래그를 쓰라는 말이 있던데 어떻게 하는지 제가 혼자 공부하면서 하는거라
자료가 부족해서 카페나 인터넷등 요리조리 찾아보는데 이부분에서 막히네요.
죄송하지만 도움좀 요청합니다 .