đồ án nhóm em là hiển thị nhiệt độ ra LCD dùng LM35 và pic16f877a.em thiết kế mạch mô phỏng = protue thì chạy bình thường.nhung khi lắp ráp vào mạch thật thì nó chỉ hiển thỉ có 18 độ rùi đứng im luôn ko chạy nữa,phần nút bấm thì bình thường LCd hiển thị bình thường chỉ có nhiệt độ đọc ra là sai.cho em hỏi cách mắc con LM35 của em là dúng hay sai có cần thê trở ji vào hay ko?[/PHP][/PHP]
còn đây là code:
#include <16F877A.h>
#device *=16 adc=10
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,NOLVP, NOCPD, NOWRT
#use delay(clock=12000000)
#include <lcd.c>
#use fast_io(a)
#use fast_io(c)
#byte porta=0x5
#byte portc=0x7
#bit r2=portc.2
#bit r3=portc.3
#bit r4=portc.4
#bit c1=portc.1
#bit c0=portc.0
int8 low,high,min,max,i,x,nutbam=0xaa;
int8 value;
#INT_EXT
void banphim()
{
if (r2 ==0 )
{
nutbam=~nutbam; //dao lai
if(nutbam!=0xaa)// nutbam#0xaa
{
lcd_init();
printf(LCD_putc,"\rnhap nhiet do:");
LCD_gotoxy(1,2);
printf(LCD_putc,"\rGia tri MAX:%d",max);
}
else
{
lcd_init();
printf(LCD_putc"\rdo_nhiet_do:");
x = read_ADC()/2;
if (x < 26)
value = x;
else
{
if (x < 66)
{
x =x-1;
value = x;
}
else
{
if( x>=65 && x <104)
{
x = x-2 ;
value = x;
}
else
{
x=x-3;
value = x;
}
}
}
lcd_init();
LCD_gotoxy(1,2);
printf(LCD_putc,"Nhiet do la: C");
}
while(r2 == 0)
{
}
}
else if (r4 == 0)
{
if(nutbam!=0xaa)
{
max = max - 1;
lcd_init();
printf(LCD_putc,"\rnhap nhiet do:");
lcd_gotoxy(1,2);
printf(LCD_putc,"\rGia tri MAX:%d",max);
}
else
{
}
while(r4 == 0)//cho nha phim
{
}
delay_ms(10);//chong nay phim
}
else if (r3 == 0)
{
if(nutbam!=0xaa)
{
max = max +1;
lcd_init();
printf(LCD_putc,"\rnhap nhiet do:");
LCD_gotoxy(1,2);;
printf(LCD_putc,"\rGia tri MAX:%d",max);
}
else
{
}
while(r3 == 0)//cho nha phim
{
}
delay_ms(10);//chong nay phim
}
else
{
}
}
//================================================== ====================
void main()
{
max =40; //nhiet do max
i = 10 ;
set_tris_a(0xFF);
set_tris_c(0b00011100);
c0=1;
c1=1;
//==== Khoi tao cho ngat ngoai============================================= ==
enable_interrupts (INT_EXT);
ext_int_edge(H_TO_L);
enable_interrupts (GLOBAL);
//=========== Khoi tao che do cho bo ADC=====================================
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
LCD_init();
printf(LCD_putc"do_nhiet_do:");
LCD_gotoxy(1,2);
printf(LCD_putc"Lop CDDT09A");
delay_ms(1000);// Lay mau nhiet do lan dau tien
x = read_ADC()/2;
if (x < 26)
value = x;
else
{
if (x < 66)
{
x =x-1;
value = x;
}
else
{
if( x>=65 && x <104)
{
x = x-2 ;
value = x;
}
else
{
x=x-3;
value = x;
}
}
}
delay_ms(10);
while(1)
{
banphim();
if (i==10)
{
if(nutbam==0xaa)
{
x = read_ADC()/2;
if (x < 26)
value = x;
else
{
if (x < 66)
{
x =x-1;
value = x;
}
else
{
if( x>=65 && x <104)
{
x = x-2 ;
value = x;
}
else
{
x=x-3;
value = x;
}
}
}
LCD_init();
printf(LCD_putc,"Nhiet do la:%uC",x);
delay_ms(10);
i=0;
}
else
{
}
}//
if (value < max )
{
c1=0;
c0=1;
}
if(value >= max )
{
c0=0;
c1=1;
}
i++;
}
}
//The End=============================================== ========================
còn đây là code:
#include <16F877A.h>
#device *=16 adc=10
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,NOLVP, NOCPD, NOWRT
#use delay(clock=12000000)
#include <lcd.c>
#use fast_io(a)
#use fast_io(c)
#byte porta=0x5
#byte portc=0x7
#bit r2=portc.2
#bit r3=portc.3
#bit r4=portc.4
#bit c1=portc.1
#bit c0=portc.0
int8 low,high,min,max,i,x,nutbam=0xaa;
int8 value;
#INT_EXT
void banphim()
{
if (r2 ==0 )
{
nutbam=~nutbam; //dao lai
if(nutbam!=0xaa)// nutbam#0xaa
{
lcd_init();
printf(LCD_putc,"\rnhap nhiet do:");
LCD_gotoxy(1,2);
printf(LCD_putc,"\rGia tri MAX:%d",max);
}
else
{
lcd_init();
printf(LCD_putc"\rdo_nhiet_do:");
x = read_ADC()/2;
if (x < 26)
value = x;
else
{
if (x < 66)
{
x =x-1;
value = x;
}
else
{
if( x>=65 && x <104)
{
x = x-2 ;
value = x;
}
else
{
x=x-3;
value = x;
}
}
}
lcd_init();
LCD_gotoxy(1,2);
printf(LCD_putc,"Nhiet do la: C");
}
while(r2 == 0)
{
}
}
else if (r4 == 0)
{
if(nutbam!=0xaa)
{
max = max - 1;
lcd_init();
printf(LCD_putc,"\rnhap nhiet do:");
lcd_gotoxy(1,2);
printf(LCD_putc,"\rGia tri MAX:%d",max);
}
else
{
}
while(r4 == 0)//cho nha phim
{
}
delay_ms(10);//chong nay phim
}
else if (r3 == 0)
{
if(nutbam!=0xaa)
{
max = max +1;
lcd_init();
printf(LCD_putc,"\rnhap nhiet do:");
LCD_gotoxy(1,2);;
printf(LCD_putc,"\rGia tri MAX:%d",max);
}
else
{
}
while(r3 == 0)//cho nha phim
{
}
delay_ms(10);//chong nay phim
}
else
{
}
}
//================================================== ====================
void main()
{
max =40; //nhiet do max
i = 10 ;
set_tris_a(0xFF);
set_tris_c(0b00011100);
c0=1;
c1=1;
//==== Khoi tao cho ngat ngoai============================================= ==
enable_interrupts (INT_EXT);
ext_int_edge(H_TO_L);
enable_interrupts (GLOBAL);
//=========== Khoi tao che do cho bo ADC=====================================
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
LCD_init();
printf(LCD_putc"do_nhiet_do:");
LCD_gotoxy(1,2);
printf(LCD_putc"Lop CDDT09A");
delay_ms(1000);// Lay mau nhiet do lan dau tien
x = read_ADC()/2;
if (x < 26)
value = x;
else
{
if (x < 66)
{
x =x-1;
value = x;
}
else
{
if( x>=65 && x <104)
{
x = x-2 ;
value = x;
}
else
{
x=x-3;
value = x;
}
}
}
delay_ms(10);
while(1)
{
banphim();
if (i==10)
{
if(nutbam==0xaa)
{
x = read_ADC()/2;
if (x < 26)
value = x;
else
{
if (x < 66)
{
x =x-1;
value = x;
}
else
{
if( x>=65 && x <104)
{
x = x-2 ;
value = x;
}
else
{
x=x-3;
value = x;
}
}
}
LCD_init();
printf(LCD_putc,"Nhiet do la:%uC",x);
delay_ms(10);
i=0;
}
else
{
}
}//
if (value < max )
{
c1=0;
c0=1;
}
if(value >= max )
{
c0=0;
c1=1;
}
i++;
}
}
//The End=============================================== ========================
Comment