You are on page 1of 10

//==============================================================================

// DO NHIET DO DUNG VDK PIC


// NHOM:............
//==============================================================================
//Nguoi viet code: Le Xuan Truong
//Ngay thuc hien: 06/05/2013
//Ngay hoan thanh: 12/05/2013
//Nguoi kiem tra:................
//Kien tra ngay:.................
//==============================================================================
// Thong so ki thuat:
//==============================================================================
//Dai do: -55 den 125 *C
//So kenh do: 4
//Bao dong qua nhiet: 4 kenh
//Phim bam dieu chinh: 4 (Menu, Tang, Gian, Save)
//Hien thi: 1/4kenh
//==============================================================================
// Phan cung:
//==============================================================================
//PIC16f877A
//OSC: 12MHz
//Sensor DS18B20: x4,Vcc-5V
//BUTTON: 4
// 1-Menu-PIN_B4
// 2-Tang-PIN_B5
// 3-Giam_PIN_B6
// 4-Save_PIN_B7
//LED-WARNING: x4
// 1-channel(0)-PIN_B0
// 2-channel(1)-PIN_B1
// 3-channel(2)-PIN_B2
// 4-channel(3)-PIN_B3
//LCD: 2x16
// E -PIN_D0
// RS-PIN_D1
// RW-PIN_D2
// D7-PIN_D7
// D6-PIN_D6
// D5-PIN_D5
// D4-PIN_D4
//==============================================================================
//====================== CODE =========================================
//==============================================================================
#include <16f877a.h>
#include <def_877a.h>
#fuses NOWDT,HS,NOPUT,NOPROTECT,NODEBUG,NOBROWNOUT,NOLVP,NOCPD,NOWRT
#define ONE_WIRE_PIN PIN_A0
#use delay(clock=24000000)
#include <1wire.c>
#include <read_tem.c>
#include <LCD_LXT.c>
int1 nena,ena0,ena1,ena2,ena3,ena;
signed int8 m=0,nchannel,channel,
ntmax,tmax0,tmax1,tmax2,tmax3,tmax,
ntmin,tmin0,tmin1,tmin2,tmin3,tmin;
float t,t0,t1,t2,t3;
#int_RB
// Chuong trinh ngat
void ngat_RB()
{
if((RBIF)&&(RBIE))
{
{
if(RB4==0)
{
m=m+1;
{
if(m==1)
{
nchannel=channel;
lcd_putc("\f");
lcd_gotoxy(1,1);
printf(lcd_putc,"Chon kenh:%d",nchannel);
}
}
{
if(m==2)
{
{
if(nchannel==0)
{
ntmax=tmax0;
}
}
{
if(nchannel==1)
{
ntmax=tmax1;
}
}
{
if(nchannel==2)
{
ntmax=tmax2;
}
}
{
if(nchannel==3)
{
ntmax=tmax3;
}
}
lcd_putc("\f");
lcd_gotoxy(1,1);
printf(lcd_putc,"Chinh tmax%d",nchannel);
lcd_gotoxy(1,2);
printf(lcd_putc," %4d",ntmax);
}
}
{
if(m==3)
{
{
if(nchannel==0)
{
ntmin=tmin0;
}
}
{
if(nchannel==1)
{
ntmin=tmin1;
}
}
{
if(nchannel==2)
{
ntmin=tmin2;
}
}
{
if(nchannel==3)
{
ntmin=tmin3;
}
}
lcd_putc("\f");
lcd_gotoxy(1,1);
printf(lcd_putc,"Chinh tmin%d",nchannel);
lcd_gotoxy(1,2);
printf(lcd_putc," %4d",ntmin);
}
}
{
if(m==4)
{
{
if(nchannel==0){nena=ena0;}
}
{
if(nchannel==1){nena=ena1;}
}
{
if(nchannel==2){nena=ena2;}
}
{
if(nchannel==3){nena=ena3;}
}
{
if(nena==0)
{
lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc("Trang thai");
lcd_gotoxy(1,2);
printf(lcd_putc,"kenh %d: ON",nchannel);
}
else
{
lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc("Trang thai");
lcd_gotoxy(1,2);
printf(lcd_putc,"kenh %d: OFF",nchannel);
}
}
}
}
{
if(m>4)
{
m=0;
}
}
}
}
{
if(RB5==0)
{
{
if(m==1)
{
nchannel=nchannel+1;
{
if(nchannel>3)
{
nchannel=0;
}
}
{
if(nchannel==0) {ntmax=tmax0;ntmin=tmin0;nena=ena0;}
}
{
if(nchannel==1) {ntmax=tmax1;ntmin=tmin1;nena=ena1;}
}
{
if(nchannel==2) {ntmax=tmax2;ntmin=tmin2;nena=ena2;}
}
{
if(nchannel==3) {ntmax=tmax3;ntmin=tmin3;nena=ena3;}
}
lcd_gotoxy(1,1);
printf(lcd_putc,"Chon kenh:%d",nchannel);
}
}
{
if(m==2)
{
ntmax=(ntmax+1);
{
if(ntmax>125)
{
ntmax=125;
}
}
lcd_putc("\f");
printf(lcd_putc,"Chinh tmax%d",nchannel);
lcd_gotoxy(1,2);
printf(lcd_putc," %4d",ntmax);
}
}
{
if(m==3)
{
ntmin=(ntmin+1);
{
if(ntmin>ntmax)
{
ntmin=ntmax;
}
}
lcd_putc("\f");
printf(lcd_putc,"Chinh tmin%d",nchannel);
lcd_gotoxy(1,2);
printf(lcd_putc," %4d",ntmin);
}
}
{
if(m==4)
{
nena=0;
lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc("Trang thai");
lcd_gotoxy(1,2);
printf(lcd_putc,"kenh %d: ON",nchannel);
}
}
}
}
{
if(RB6==0)
{
{
if(m==1)
{
nchannel=nchannel-1;
{
if(nchannel<0)
{
nchannel=3;
}
}
{
if(nchannel==0) {ntmax=tmax0;ntmin=tmin0;nena=ena0;}
}
{
if(nchannel==1) {ntmax=tmax1;ntmin=tmin1;nena=ena1;}
}
{
if(nchannel==2) {ntmax=tmax2;ntmin=tmin2;nena=ena2;}
}
{
if(nchannel==3) {ntmax=tmax3;ntmin=tmin3;nena=ena3;}
}
lcd_gotoxy(1,1);
printf(lcd_putc,"Chon kenh:%d",nchannel);
}
}
{
if(m==2)
{
ntmax=(ntmax-1);
{
if(ntmax<ntmin)
{
ntmax=ntmin;
}
}
lcd_putc("\f");
printf(lcd_putc,"Chinh tmax%d",nchannel);
lcd_gotoxy(1,2);
printf(lcd_putc," %4d",ntmax);
}
}
{
if(m==3)
{
ntmin=(ntmin-1);
{
if(ntmin<(-55))
{
ntmin=(-55);
}
}
lcd_putc("\f");
printf(lcd_putc,"Chinh tmin%d",nchannel);
lcd_gotoxy(1,2);
printf(lcd_putc," %4d",ntmin);
}
}
{
if(m==4)
{
nena=1;
lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc("Trang thai");
lcd_gotoxy(1,2);
printf(lcd_putc,"kenh %d: OFF",nchannel);
}
}
}
}
{
if(RB7==0)
{
channel=nchannel;
write_eeprom(12,channel);
{
if(nchannel==0)
{
tmax0=ntmax;
write_eeprom(0,tmax0);
tmin0=ntmin;
write_eeprom(1,tmin0);
ena0=nena;
write_eeprom(2,ena0);
}
}
{
if(nchannel==1)
{
tmax1=ntmax;
write_eeprom(3,tmax1);
tmin1=ntmin;
write_eeprom(4,tmin1);
ena1=nena;
write_eeprom(5,ena1);
}
}
{
if(nchannel==2)
{
tmax2=ntmax;
write_eeprom(6,tmax2);
tmin2=ntmin;
write_eeprom(7,tmin2);
ena2=nena;
write_eeprom(8,ena2);
}
}
{
if(nchannel==3)
{
tmax3=ntmax;
write_eeprom(9,tmax3);
tmin3=ntmin;
write_eeprom(10,tmin3);
ena3=nena;
write_eeprom(11,ena3);
}
}
M=0;
lcd_putc("\f");
lcd_putc("SAVE...!!!");
delay_ms(1000);
lcd_putc("\f");
}
}
RBIF=0;
delay_ms(180);
}
}
// Chuong trinh chinh
void main()
{
set_tris_b(0xf0);
set_tris_d(0x00);
portb=0b00000000;
//Nap lai data tu EEPROM
channel=read_eeprom(12);
{
if(channel==255) //Neu la lan dau tien tat ca cac gia tri = 0
{
write_eeprom(12,0); //Co the them lenh channel=0; de?
write_eeprom(0,0); //thay cho lenh channel=read_eeprom(12);
write_eeprom(1,0);
write_eeprom(3,0);
write_eeprom(4,0);
write_eeprom(6,0);
write_eeprom(7,0);
write_eeprom(9,0);
write_eeprom(10,0);
}
}
channel=read_eeprom(12);
tmax0=read_eeprom(0);
tmin0=read_eeprom(1);
ena0=read_eeprom(2);
tmax1=read_eeprom(3);
tmin1=read_eeprom(4);
ena1=read_eeprom(5);
tmax2=read_eeprom(6);
tmin2=read_eeprom(7);
ena2=read_eeprom(8);
tmax3=read_eeprom(9);
tmin3=read_eeprom(10);
ena3=read_eeprom(11);
//Nap lai gia tri cho bien nhap
nchannel=channel;
if(channel==0){ntmax=tmax0;ntmin=tmin0;nena=ena0;}
if(channel==1){ntmax=tmax1;ntmin=tmin1;nena=ena1;}
if(channel==2){ntmax=tmax2;ntmin=tmin2;nena=ena2;}
if(channel==3){ntmax=tmax3;ntmin=tmin3;nena=ena3;}
//Khoi tao ngat
enable_interrupts(int_rb);
enable_interrupts(global);
//Khoi tao LCD
lcd_init();
//Vong lap chinh
While(true)
{
//lay nhiet do kenh 1
t0=ds18b20_read_0();
//lay nhiet do kenh 2
t1=ds18b20_read_1();
//lay nhiet do kenh 3
t2=ds18b20_read_2();
//lay nhiet do kenh 4
t3=ds18b20_read_3();
{
if(m==0)
{
{
if(channel==0)
{
t=t0;
tmax=tmax0;
tmin=tmin0;
ena=ena0;
}
}
{
if(channel==1)
{
t=t1;
tmax=tmax1;
tmin=tmin1;
ena=ena1;
}
}
{
if(channel==2)
{
t=t2;
tmax=tmax2;
tmin=tmin2;
ena=ena2;
}
}
{
if(channel==3)
{
t=t3;
tmax=tmax3;
tmin=tmin3;
ena=ena3;
}
}
if(ena==1)
{
lcd_putc("\f");
printf(lcd_putc,"kenh %d: OFF",channel);
lcd_gotoxy(1,2);
printf(lcd_putc,"max:%3d min:%3d",tmax,tmin);
}
else
{
lcd_putc("\f");
printf(lcd_putc,"kenh %d:",channel);
lcd_gotoxy(8,1);
printf(lcd_putc," %3.1f *C",t);
lcd_gotoxy(1,2);
printf(lcd_putc,"max:%3d min:%3d",tmax,tmin);
}
}
}
{
if(((t0>tmax0)||(t0<tmin0))&&(ena0==0))
{
output_high(pin_b0);
}
else
{
output_low(pin_b0);
}
}
{
if(((t1>tmax1)||(t1<tmin1))&&(ena1==0))
{
output_high(pin_b1);
}
else
{
output_low(pin_b1);
}
}
{
if(((t2>tmax2)||(t2<tmin2))&&(ena2==0))
{
output_high(pin_b2);
}
else
{
output_low(pin_b2);
}
}
{
if(((t3>tmax3)||(t3<tmin3))&&(ena3==0))
{
output_high(pin_b3);
}
else
{
output_low(pin_b3);
}
}
}
}
//==============================================================================
//========================== END ======================================
//==============================================================================

You might also like