View Single Post
Old 30-05-2007, 12:16 PM   #11
huybo02
Đệ tử 4 túi
 
Tham gia ngày: Aug 2006
Bài gửi: 61
:
Phần đo nhiệt độ thì chỉ dùng ADC có sẵn trong PIC chỉ tốn 1 chân RA/AN thôi. Còn xuất ra thì có LCD rồi.
Cái này làm hồi mới tập tành ADC:

Code:
#include <16F877.h>
#device 16F877*=16 ADC=10
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=1000000)
#define use_portd_lcd TRUE
#include<lcd.c>
long adc,nhietdo;
long adc1,adc2,adc3,adc4,adc5,adc6,adc7,adc8,adc9,adc10,value;
int8 a,b,c,d;
void tachhang(int&a,int&b,int&c,int&d);
char so[11] ="0123456789";
void main()
{
setup_adc(adc_clock_internal);
setup_adc_ports(AN0);
set_adc_channel(0);
delay_ms(100);

while(true)
{
   value = read_adc();
   /*adc1=read_adc();// doc 10 gia tri adc trong 1s
   delay_ms(100);
   adc2=read_adc();
   delay_ms(100);
   adc3=read_adc();
   delay_ms(100);
   adc4=read_adc();
   delay_ms(100);
   adc5=read_adc();
   delay_ms(100);
   adc6=read_adc();
   delay_ms(100);
   adc7=read_adc();
   delay_ms(100);
   adc8=read_adc();
   delay_ms(100);
   adc9=read_adc();
   delay_ms(100);
   adc10=read_adc();
   delay_ms(100);
   value =adc1+adc2+adc3+adc4+adc5+adc6+adc7+adc8+adc9+adc10;// lay gia tri trung binh adc*/
   nhietdo = (value-559)/0.2024;
   tachhang(a,b,c,d);
   lcd_init();
   delay_ms(100);
   lcd_putc(so[a]);
   lcd_putc(so[b]);
   lcd_putc(so[c]);
   lcd_putc('.');
   lcd_putc(so[d]);
}
}

void tachhang(int&a,int&b,int&c,int&d)
{
   a=nhietdo/1000;
   b=(nhietdo%1000)/100;
   c=(nhietdo%100)/10;
   d=nhietdo%10;
}


/* 5V = 1024 muc => 10mV tuong ung voi 2.048 muc ADC
0oC = 273oK => 0oC ung voi muc dien the 2.73V ung voi 559 muc ADC
Nhiet do = dien the Analog/10 - 273
Tuong ung
Nhiet do = (adc -559)/2.024
Xuat gia tri nhiet do ra LED 7 doan hay LCD*/
13% và 17% ROM hơi nhiều
huybo02 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn