BASIC4MCU | 질문게시판 | atmega128 lm35에서 온도값을 받아 세그먼트에 표시하는 거 궁금합니다.
페이지 정보
작성자 그냥사는사람 작성일2022-11-11 17:18 조회1,451회 댓글1건본문
lm35에서 온도를 받아 세그먼트로 표현할려고하는데 기본 온도는 뜨는데 lm35를 만져도 온도가 올라가지가 않네요 ㅠㅠ 어떤 문제 인지 알 수 있을까요?
#include <mega128.h>
#include <delay.h>
typedef unsigned char u_char;
flash u_char seg_pat[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void AD_disp(int);
void main(void)
{
int ad_val;
DDRB=0XF0; DDRD=0xF0; DDRG=0x0F;
ADMUX=0x07;
ADCSRA=0x87;
delay_ms(5);
while(1){
ADCSRA=0xc7;
while((ADCSRA&0x10)==0);
ad_val=(int)ADCL+((int)ADCH<<8);
AD_disp(ad_val);
}
}
void AD_disp(int val)
{
float fval;
int ival, buf;
u_char N1000,N100,N10,N1;
fval=(float)val*5.0*100/1023.0;
ival=(int)(fval*10+0.5);
N1000=ival/1000;
buf=ival%1000;
N100=buf/100;
buf=buf%100;
N10=buf/10;
N1=buf%10;
PORTG=0b00001000;
PORTD=((seg_pat[N1]&0x0F)<<4)|(PORTD&0x0F);
PORTB=(seg_pat[N1]&0x70)|(PORTB&0x0F);
delay_ms(1);
PORTG=0b00000100;
PORTD=((seg_pat[N10]&0x0F)<<4)|(PORTD&0x0F);
PORTB=(seg_pat[N10]&0x70)|(PORTB&0x0F);
delay_ms(1);
PORTG=0b00000010;
PORTD=((seg_pat[N100]&0x0F)<<4)|(PORTD&0x0F);
PORTB=(seg_pat[N100]&0x70)|(PORTB&0x0F);
PORTB=PORTB|0x80;
delay_ms(1);
PORTG=0b00000001;
PORTD=((seg_pat[N1000]&0x0F)<<4)|(PORTD&0x0F);
PORTB=(seg_pat[N1000]&0x70)|(PORTB&0x0F);
delay_ms(1);
}
댓글 1
조회수 1,451master님의 댓글
master 작성일
PF7이 아닌 PF0으로 변경해서 돌려보세요
#include <mega128.h>
#include <delay.h>
//
typedef unsigned char u_char;
//
flash u_char seg[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//
void AD_disp(int val){
int ival; u_char N1000,N100,N10,N1;
ival=(float)val*500.0/1023.0+0.5;
N1000=ival/1000; N100=ival/100%10; N10=ival/10%10; N1=ival%10;
PORTG=8; PORTD=seg[N1] <<4; PORTB=seg[N1] &0x70; delay_ms(1);
PORTG=4; PORTD=seg[N10] <<4; PORTB=seg[N10] &0x70; delay_ms(1);
PORTG=2; PORTD=seg[N100] <<4; PORTB=(seg[N100]&0x70)|0x80; delay_ms(1);
PORTG=1; PORTD=seg[N1000]<<4; PORTB=seg[N1000]&0x70; delay_ms(1);
}
//
void main(){
int ad_val;
DDRB=0XF0; DDRD=0xF0; DDRG=0x0F;
ADMUX=0;
while(1){
ADCSRA=0xc7; while((ADCSRA&0x10)==0); ADCSRA|=0x10; ad_val=ADCW;
AD_disp(ad_val);
}
}