PDA

View Full Version : Cài đặt nhiệt độ cảnh báo


phanlamdien
11-03-2011, 11:58 PM
Tôi đang làm đề tài đo nhiệt độ môi trường hiển thị ra led 7 đoạn, nhưng vấn đề mà tôi gặp phải là phần cài đặt nhiệt độ cảnh báo nếu như cố định thì ok, nhưng nếu như nó được nhập vào từ bên ngoài ( nhiệt độ cảnh báo ngưỡng trên t3 trong đoạn code) đồng thời hiển thị ra led 7 đoạn được nối với portC thì t vẫn chưa làm được hôm nay tôi post bài này lên mong các bác giúp đở để hoàn thiện bài báo cáo.Tôi cần gắp lắm.

Sau đây là đoạn code.

//================================================== ==================================
// DO AN MON HOC
// Ten do an: MACH DO NHIET DO DUNG PIC 16f877A VA LM 35.
//================================================== ==================================
// Nhom thuc hien:
// Ten MSSV
//
//
// Ngay hoan thanh:
// Ngay kiem tra:
//================================================== =================================
// KET CAU PHAN CUNG
//================================================== =================================
// + Su dung PIC 16F877A + LM35 + 74LS247 + Led 7 doan (Anot chung),
// + Cau hinh dung dao dong thach anh 20MHz,
// + PORT C quet led, PORT D hien thi,
// + Tin hieu tuong tu tu LM35 dc noi vao chan RA0,
// + Ban phim giao tiep o PORTB
// + Cac led bao duoc noi vao cac chan voi thu tu bao dong:
// Led 1(xanh) Led 2(vang) Led 3(do)(bao dong am thanh)
// Muc 1(t2<=t1) Muc 2(t1<t2<t3) Muc 3(t2=>t3)
//================================================== ================================

// Cau hinh su dung dao dong noi 20MHz
#include <16f877A.h>
#include <def_877a.h>
#device *=16 ADC=8
#FUSES NOWDT,HS, NOPUT, NOPROTECT, NODEBUG, BROWNOUT, LVP, NOCPD, NOWRT
#use delay(clock=20000000)

//=======================================
// KHAI BAO HAM-BIEN-HANG
//=======================================
//========================================
#byte PORTA=0x05
#byte TRISA=0x85
#byte PORTB=0x06
#byte PORTC=0x07
#byte PORTD=0x08
#bit NUT1=0x05.0
#bit NUT2=0x05.1
#byte PORTE=0x09
#int_ext
int8 adc;
int8 hang_chuc=0;
int8 hang_don_vi=0;
int8 hangtram =0;
int8 t;
int8 t1=20;
int8 t3=45;
int8 t4;
//================================================
// Khoi tao
//================================================
#zero_ram // xoa cac thanh ghi truoc khi lam viec

void khoitao()
{
enable_interrupts(global);
enable_interrupts(int_RB);
enable_interrupts(int_ext);
ext_int_edge(H_to_L);
output_d(0);
output_e(0);
output_c(0b10000000);
}

//========================================
// Chuong trinh hien thi
//========================================

void hienthi(int8 x)
{
int8 i;
hangtram=x/100;
hang_chuc=x/10; // lay so hang chuc
hang_don_vi=x%10; // lay so du lam hang dv
for(i=0;i<2;i++)
{
output_low(PIN_A5);
output_high(PIN_A4);
PORTD=hang_don_vi; //PORTD=hang_don_vi;
delay_ms(500);
output_high(PIN_A5);
output_low(PIN_A4);
PORTD=hang_chuc; // PORTD=hang_chuc;
delay_ms(500);

}
}

//===========================================
// Chuong trinh bao dong
//===========================================

void baodong(int8 t2)
{
if(t2>=t3) // Canh bao led do (muc 3)
{
output_low(PIN_E0);
output_low(PIN_E1);
output_high(PIN_E2);

}
if((t2<t3)&&(t2>t1)) // Canh bao led vang (muc 2)
{
output_low(PIN_E0);
output_low(PIN_E2);
output_high(PIN_E1);
}
if(t2<=t1) // Canh bao led xanh( muc 1)
{
output_low(PIN_E1);
output_low(PIN_E2);
output_high(PIN_E0);

}
}

void giatri()
{
setup_adc(ADC_CLOCK_INTERNAL); // Chon kenh va Port cho khoi ADC
setup_adc_ports(RA0_RA1_ANALOG_RA3_REF);
set_adc_channel(0);
delay_ms(100); // lay mau
adc=read_adc();
ADC_done();
t=adc*1; // ADC 8 bit
hienthi(t);
baodong(t);
}
//================================================== ============
// Ngat
//================================================== ============

void banphim()
{
if(NUT1==0)
{
delay_ms(100);
t4=t1+5;
}
if(NUT2==0)
{
delay_ms(100);
t4=t1-5;

}
}

//================================================== ====
// CHAY CHUONG TRINH
//================================================== ====


void main()
{
khoitao();
while(1)
{
giatri();
}
}


Còn đây là file hex và file mô phỏng:http://www.megaupload.com/?d=WPFJ5TVX

tdm
12-03-2011, 06:47 PM
Tôi đang làm đề tài đo nhiệt độ môi trường hiển thị ra led 7 đoạn, nhưng vấn đề mà tôi gặp phải là phần cài đặt nhiệt độ cảnh báo nếu như cố định thì ok, nhưng nếu như nó được nhập vào từ bên ngoài ( nhiệt độ cảnh báo ngưỡng trên t3 trong đoạn code) đồng thời hiển thị ra led 7 đoạn được nối với portC thì t vẫn chưa làm được hôm nay tôi post bài này lên mong các bác giúp đở để hoàn thiện bài báo cáo.Tôi cần gắp lắm.

Sau đây là đoạn code.

//================================================== ==================================
// DO AN MON HOC
// Ten do an: MACH DO NHIET DO DUNG PIC 16f877A VA LM 35.
//================================================== ==================================
// Nhom thuc hien:
// Ten MSSV
//
//
// Ngay hoan thanh:
// Ngay kiem tra:
//================================================== =================================
// KET CAU PHAN CUNG
//================================================== =================================
// + Su dung PIC 16F877A + LM35 + 74LS247 + Led 7 doan (Anot chung),
// + Cau hinh dung dao dong thach anh 20MHz,
// + PORT C quet led, PORT D hien thi,
// + Tin hieu tuong tu tu LM35 dc noi vao chan RA0,
// + Ban phim giao tiep o PORTB
// + Cac led bao duoc noi vao cac chan voi thu tu bao dong:
// Led 1(xanh) Led 2(vang) Led 3(do)(bao dong am thanh)
// Muc 1(t2<=t1) Muc 2(t1<t2<t3) Muc 3(t2=>t3)
//================================================== ================================

// Cau hinh su dung dao dong noi 20MHz
#include <16f877A.h>
#include <def_877a.h>
#device *=16 ADC=8
#FUSES NOWDT,HS, NOPUT, NOPROTECT, NODEBUG, BROWNOUT, LVP, NOCPD, NOWRT
#use delay(clock=20000000)

//=======================================
// KHAI BAO HAM-BIEN-HANG
//=======================================
//========================================
#byte PORTA=0x05
#byte TRISA=0x85
#byte PORTB=0x06
#byte PORTC=0x07
#byte PORTD=0x08
#bit NUT1=0x05.0
#bit NUT2=0x05.1
#byte PORTE=0x09
#int_ext
int8 adc;
int8 hang_chuc=0;
int8 hang_don_vi=0;
int8 hangtram =0;
int8 t;
int8 t1=20;
int8 t3=45;
int8 t4;
//================================================
// Khoi tao
//================================================
#zero_ram // xoa cac thanh ghi truoc khi lam viec

void khoitao()
{

output_d(0);
output_e(0);
output_c(0b10000000);
}

//========================================
// Chuong trinh hien thi
//========================================

void hienthi(int8 x)
{
int8 i;
hangtram=x/100;
hang_chuc=x/10; // lay so hang chuc
hang_don_vi=x%10; // lay so du lam hang dv
for(i=0;i<2;i++)
{
output_low(PIN_A5);
output_high(PIN_A4);
PORTD=hang_don_vi; //PORTD=hang_don_vi;
delay_ms(500);
output_high(PIN_A5);
output_low(PIN_A4);
PORTD=hang_chuc; // PORTD=hang_chuc;
delay_ms(500);

}
}

//===========================================
// Chuong trinh bao dong
//===========================================

void baodong(int8 t2)
{
if(t2>=t3) // Canh bao led do (muc 3)
{
output_low(PIN_E0);
output_low(PIN_E1);
output_high(PIN_E2);

}
if((t2<t3)&&(t2>t1)) // Canh bao led vang (muc 2)
{
output_low(PIN_E0);
output_low(PIN_E2);
output_high(PIN_E1);
}
if(t2<=t1) // Canh bao led xanh( muc 1)
{
output_low(PIN_E1);
output_low(PIN_E2);
output_high(PIN_E0);

}
}

void giatri()
{
setup_adc(ADC_CLOCK_INTERNAL); // Chon kenh va Port cho khoi ADC
setup_adc_ports(RA0_RA1_ANALOG_RA3_REF);
set_adc_channel(0);
delay_ms(100); // lay mau
adc=read_adc();
ADC_done();
t=adc*1; // ADC 8 bit
hienthi(t);
baodong(t);
}
//================================================== ============
// Ngat
//================================================== ============

void banphim()
{
if(NUT1==0)
{
delay_ms(100);
t4=t1+5;
}
if(NUT2==0)
{
delay_ms(100);
t4=t1-5;

}
}

//================================================== ====
// CHAY CHUONG TRINH
//================================================== ====


void main()
{
khoitao();
while(1)
{
giatri();
}
}


Còn đây là file hex và file mô phỏng:http://www.megaupload.com/?d=WPFJ5TVX

+ Ban phim giao tiep o PORTB
#bit NUT1=0x05.0
#bit NUT2=0x05.1//cái này khai báo nút nhấn ở porta

phanlamdien
12-03-2011, 09:15 PM
Đã thử rồi nhưng vẫn không dc, sai ở void banphim nhưng không biết sữa sao nữa.

tdm
13-03-2011, 08:43 AM
Đã thử rồi nhưng vẫn không dc, sai ở void banphim nhưng không biết sữa sao nữa.
file bạn gửi không tải được.bạn nén thành winzip gửi lên diễn đàn.
sửa lại:
#bit NUT1=0x06.0
#bit NUT2=0x06.1//cái này khai báo nút nhấn ở portb
thêm trong chương trình chính:
set_tris_b(0x0f);
port_b_pullups(true);

phanlamdien
13-03-2011, 08:35 PM
Link mới đây:

http://www.megaupload.com/?d=XUX6EPK5

phanlamdien
19-03-2011, 07:52 PM
làm xong rùi vui vui !!

kshoaiviet
21-04-2011, 10:33 PM
sau mà file hex với files mô phỏng không có tải được vậy,tải phải tốn tiền ah

thaichiendt
21-04-2011, 11:24 PM
oh. hay quá bạn ơi, nếu bạn đã chia sẻ đầy đủ như vậy thì bạn có thể cho file orcad và mạch in dc ko? và bạn đã làm mạch chưa chạy ổn định không, bạn có thể up vài hình anh lên được chứ. à không dùng vref ngoài được ko nhỉ đỡ một phần
thank bạn phát huy