You are on page 1of 19

1

[at_nightfall_09] - Mch o nhit iu khin ng c, hin th LCD.

Ni dung:
MCH O NHIT IU KHIN NG C HIN TH LCD .......................................................... 2
I. KHI NIM C BN V MCH O NHIT IU KHIN NG C. ................................ 2
1.1. Khi nim mch o nhit . ......................................................................................................... 2
1.2. M hnh iu khin ng c. ......................................................................................................... 2
1.3. Hin th LCD.................................................................................................................................. 2
II. NGUYN L HOT NG PIC16F877A. ....................................................................................... 2
2.1. Chc nng ADC trong PIC16F877A. ............................................................................................ 2
2.2. Ci t ch ADC. ...................................................................................................................... 3
III. NGUYN L HOT NG CA IC LM35. .................................................................................. 6
IV. KHI HIN TH LCD. ...................................................................................................................... 7
4.1. Cch ni dy trong LCD ................................................................................................................ 7
4.2. Cc hm c bn trong LCD ........................................................................................................... 7
V. CC CH IU KHIN NG C. .......................................................................................... 8
5.1. Ch chn mode hin th .......................................................................................................... 10
5.2. Ch gim mc iu chnh ngng nhit bt/tt ng c. .................................................. 10
5.3. Ch tng mc iu chnh ngng nhit bt/tt ng c..................................................... 11
5.4. Ch bt - tt ng c. .............................................................................................................. 11
VI. CC KHI CHC NNG KHC. ................................................................................................. 12
6.1. Tn s hot ng .......................................................................................................................... 12
6.2. Ngun cung cp cho PIC ............................................................................................................. 12
VII. CODE NP CHO PIC16F877A ..................................................................................................... 13
VIII. S MCH THIT K. ........................................................................................................... 18
IX. S MCH IN. ........................................................................................................................... 19
X. SN PHM THC T. .................................................................................................................... 19

Page 1

[at_nightfall_09] - Mch o nhit iu khin ng c, hin th LCD.

MCH O NHIT IU KHIN NG C HIN TH LCD


I. KHI NIM C BN V MCH O NHIT IU KHIN NG C.
1.1. Khi nim mch o nhit .

Nhit l mt i lng vt l v hng. o c v tnh ton gi tr ca n ta phi dng


cc b cm bin. Mch o nhit dng cc loi b cm bin LM35. Cc b cm bin LM35 l
b cm bin nhit, mch tch hp chnh xc cao m in p u ra ca n t l tuyn tnh vi
nhit theo thang Celsius(*).
B cm bin LM35 cng khng yu cu cn chnh ngoi v vn chng c cn chnh.
Chng a ra in p 10mV cho mi s thay i 10C. Chng sau s hng dn chng ta chn
cc cm bin h LM35 sao cho ph hp vi mch o nhit cn thit k.
Nh vy ch cn 1 b cm bin LM35 ta c th tnh c gi tr nhit ti thi im xc
nh da vo gi tr in p u ra LM35. Nh ni trn, ng vi mi thay i 10C, gi tr
u ra s tng thm 10mV. Do o, qua mt b chuyn i tn hiu tng t (in p) sang tn
hiu s (bit) hin th kt qu o c v tnh ton, x l kt qu.
Mch chuyn i tng t sang s ta c th dng IC ADC0804, Vi iu khin, Pic y
chng ta dng PIC16F877A, va chuyn i ADC, hin th LCD, va iu khin ng c.
1.2. M hnh iu khin ng c.

iu khin ng c quay hay ngng quay th cng ging nh cng tc in, bt th quay
v tt th ngng. Quan trng l bt khi no v tt khi no v phi c thc hin mt cch t
ng. Ging nh khi nhit trong phng mc 26oC th qut t bt v khi nhit trong
phng xung thp hn 22oC th qut t ng tt. lm c iu ny th chng ta phi c mt
thit b o nhit , v khi nhit hin ti ln hn hay nh hn mc in p ngng ci t
th ng c (qut) s c iu khin theo ch nh sn. Chng sau chng ta s tm hiu
su hn v nguyn l iu khin cung nh cc ch khc nhau dng iu khin ng c.
1.3. Hin th LCD.

Khi nhit o c qua b cm bin v c chuyn i qua tn hiu s. Chng ta cn mt


thit b hin th gi tr o c. Thit b c th l LED hoc LCD,
Trong ti ny, nhm dng LCD hin th kt qua o v hin th cc ch iu khin ng
c. LCD y l thit b hin th trn mn hnh vi kch c 2x16. Tc l vi 2 hng ch, mi
hng 16 k t. hin th nhiu dng k t ta phi hin th ln lt. Ty thuc vo mc v quy
m m ta la chn thit b hin th ph hp.

II. NGUYN L HOT NG PIC16F877A.


2.1. Chc nng ADC trong PIC16F877A.

- Trong PIC 16F877A c h tr b chuyn i ADC 10 bit 8 knh.


PIC16F877A c 8 ng vo Analog (RA4:RA0) v RE2:RE0).

Page 2

[at_nightfall_09] - Mch o nhit iu khin ng c, hin th LCD.


Kt qu chuyn i t tn hiu tng t sang tn hiu s l 10 bt tng ng v c lu
trong thanh ghi ADRESH:ADRESL. Khi khng s dng b chuyn i ADC, cc thanh ghi ny
c th c s dng nh cc thanh ghi thng thng. Khi qu trnh chuyn i hon tt, kt qu s c
lu vo hai thanh ghi ADRESH:ADRESL. C ngt ADIF c set.

Qu trnh chuyn i tng t sang s bao gm cc bc sau:


1. Thit lp cc thng s cho b chuyn i ADC
Chn ng vo alalog, chn in p mu.
Chn knh chuyn i AD (Thanh ghi ADCON0)
Chn xung Clock cho knh chuyn i AD.
Cho php b chuyn i AD hot ng.
2. Thit lp cc c ngt cho b AD.
Clear bit ADIF
Set bit ADIE
Set bit PEIE
Set bit GIE
3. i cho ti khi qu trnh ly mu hon tt.
4. Bt u qu trnh chuyn i.
5. i cho ti khi qu trnh chuyn i hon tt.
6. c kt qu chuyn i v xa c ngt, set bit.
7. Tip tc thc hin cc bc 1 v 2 cho qu trnh chuyn i tip theo.
2.2. Ci t ch ADC.

Ci t ch ADC:
Setup_adc(mode):
C php:
Setup_adc (mode);
Setup_adc2(mode);
Thng s:
Mode - ch tn hiu tng t sang tn hiu s. S la chn hp l thay i ph thuc vo
thit b. Xem nhng thit b c tp tin .h cho tt c s la chn. Mt vi s la chn tiu biu bao
gm:
ADC_OFF
ADC_CLOCK_INTERNAL
ADC_CLOCK_DIV_32
- Tr v: Khng c nh ngha.
- Chc nng: nh hnh th chuyn t tn hiu tng t sang tn hiu s.
- Tin li: Ch c trong nhng thit b c b chuyn i tn hiu tng t sang tn hiu s.
- Yu cu: Nhng hng s c nh ngha trong tp tin .h ca thit b.

Page 3

[at_nightfall_09] - Mch o nhit iu khin ng c, hin th LCD.

V d: setup_adc_ports( ALL_ANALOG );
setup_adc (ADC_CLOCK_INTERNAL );
set_adc_channel( 0 );
value = read_adc();
setup_adc( ADC_OFF );
Setup_adc_ports(value):
Thit lp nhng chn ADC c sn chuyn t tn hiu tng t sang tn hiu s.
C php:
Setup_adc_ports (value)
Thng s:
Value - Mt hng s c nh ngha trong tp tin .h ca thit b.
- Tr v: Khng c nh ngha.
- Chc nng: Ci t nhng chn ADC l tn hiu tng t, tn hiu s hoc mt s kt hp v
in p tham chiu s dng khi tnh tan gi tr ADC.
S kt hp cc chn tn hiu tng t c cho php thay i ph thuc vo con chip v
c nh ngha bng cch s dng tng bit OR ghp nhng chn c chn cng vi
nhau. Kim tra thit b bao gm tp tin cc chn v in p tham chiu c sp t trong
danh sch han chnh. Hng s ALL_ANALOG v NO_ANALOG l hp l cho tt c con chip.
Mt vi v d khc nh ngha chn l: ANALOG_RA3_REF - Kch hot tt c cc chn tn
hiu tng t v chn RA3 l in p tham chiu.
RA0_RA1_RA3_ANALOG - Ch c chn RA0, RA1, RA3 l tn hiu tng t
- Tin li: Chc nng ny c sn trong cc thit b vi phn cng Analog/Digital
- Yu cu: Nhng hng s c nh ngha trong tp tin .h ca thit b
V d:
//Tt c cc chn analog
Setup_adc_ports( ALL_ANALOG );
Chn A0,A1,A3 l analog, v tt c cc chn cn li l digital. in p +5V c s dng nh
in p tham chiu.
Setup_adc_ports( RA0_RA1_RA3_ANALOG );
//Chn A0,A1 l analog,chn A3 c s dng cho in p tham chiu v tt c cc chn cn li
l digital
Setup_adc_ports( A0_RA1_ANALOGRA3_REF );
Set_adc_channel(channel):
Ch r nhng knh dung s dng cho vic gi Analog/Digital.
C php: set_adc_channel (chan)
Thng s: Chn l s knh c chn.S chn bt u ti 0 v c t nhn trong datasheet
AN0,AN1.
- Tr v: Khng c nh ngha.

Page 4

[at_nightfall_09] - Mch o nhit iu khin ng c, hin th LCD.


- Chc nng: Ch r nhng knh c s dng cho vic gi lnh READ_ADC(). Phi ch 1
khong thi gian ngn sau khi thay i knh trc khi nhn c gi tr c hp l. Thi gian
thay i ph thuc vo tr khng ca ngun u vo. Khong 10us ni chung l tt cho hu ht
cc ng dng. Khng cn thay i knh trc mi ln c nu knh khng thay i.
Tin li: Chc nng ny c sn trong cc thit b vi phn cng Analog/Digital
- Yu cu:Khng cn th g.
V d: Set_adc_channel(2);
delay_us(10);
value = read_adc();
read_adc(mode):
Bt u qu trnh chuyn i v c gi tr.Ch ny c th cng iu khin chc nng.
C php: value = read_adc ([mode]);
Thng s: mode l mt thng s khng bt buc.Nu c s dng gi tr c th:
ADC_START_AND_READ (Lin tc c,v y l mc nh )
ADC_START_ONLY (Bt u qu trnh chuyn i v tr v gi tr)
ADC_READ_ONLY (c kt qu chuyn i cui cng )
- Tr v: 8 bit hoc 16 bit s nguyn ph thuc vo #DEVICE ADC= directive (directive:li ch
dn, 8 hoc 16).
- Chc nng: y l chc nng c gi tr s t b chuyn i tn hiu tng t sang tn hiu s.
Gi lnh setup_adc(), setup_adc_ports() and set_adc_channel() nn c lm vi ln trc khi
chc nng ny c gi.
Dy gi tr tr v ph thuc vo s lng bit tb chuyn i Analog/Digital trong con chip v s
sp t trong DEVICE ADC= directive nh sau:
#DEVICE 8 bit 10 bit 11 bit 12 bit 16 bit
ADC=8 00-FF 00-FF 00-FF 00-FF 00-FF
ADC=10 x 0-3FF X 0-3FF x
ADC=11 x x 0-7FF x x
ADC=16 0-FF00 0-FFC0 0-FFEO 0-FFF0 0-FFFF
Lu : X khng c nh ngha
- Tin li: Chc nng ny c sn trong cc thit b vi phn cng Analog/Digital
- Yu cu: Nhng chn c nh c nh ngha trong tp tin .h ca thit b
V d: Setup_adc( ADC_CLOCK_INTERNAL );
Setup_adc_ports( ALL_ANALOG );
Set_adc_channel(1);
While ( input(PIN_B0)
{
delay_ms( 5000 );
value = read_adc();
printf("A/D value = %2x\n\r", value);
}

Page 5

[at_nightfall_09] - Mch o nhit iu khin ng c, hin th LCD.

read_adc(ADC_START_ONLY);
sleep();
value=read_adc(ADC_READ_ONLY);
ADC_done():Tr v 1 nu b chuyn i han thnh vic chuyn i ca n
- Tin x l c lin quan:
#DEVICE ADC=xx : nh hnh th read_adc ri tr v knh thc. V d, s dng 1 con PIC vi
10 bit A/D bn c th s dng 8 hoc 10 cho xx- 8 s tr v bye c trng s cao nht, 10 s tr v
tan b gi tr c A/D 10 bit
Cc ngt c lin quan:
INT_AD: Ngt xy ra khi qu trnh chuyn i hon tt
INT_ADOF: Ngt xy ra khi qu trnh chuyn i trong thi gian ch
Cc tp tin c lin quan:
Khng c,tt c chc nng c ci t sn
Cc thng s getenv() c lin quan:
ADC_CHANNELS : S knh Analog/Digital
ADC_RESOLUTION : S lng bit tr v bi lnh read_adc.

III. NGUYN L HOT NG CA IC LM35.


LM 35 l cm bin nhit . LM35 c 3 chn (2 chn cp ngun v 1 chn xut in p ra
ty theo nhit ). Nhit tng 1C th in p xut ra chn out ca LM35 tng 10mV.

Hnh 1:
Hnh 2
o lng nhit th c th dng nhiu loi cm bin nhit khc, mi loi c mt u
im ring ph hp vi tng nhu cu ring. y ti l o nhit mi trng bnh thng
nn s dng LM35 l ti u nht v: y l loi cm bin c chnh xc cao, tm hot ng
tuyn tnh t 0-128 C, tiu tn cng sut thp..

Page 6

[at_nightfall_09] - Mch o nhit iu khin ng c, hin th LCD.

Chn 1: u vi ngun. Ngun cung


cp c th t 4V n 20V ty tng loi
IC LM35 s dng.
Chn 2: Chn Vout cho gi tr ra thay
i theo nhit mi trng. ng vi
mi gi tr nhit u vo ta c mc
in p ra tng ng. Vi mi chnh
lch 1oC th in p u ra s chnh
lch 10mV.
Chn 3: Chn ni t.
S mch nh hnh bn: (Hnh 3)
(Hnh 3)

IV. KHI HIN TH LCD.


Nh cp trc, LCD dng y l LCD 2 hng, mi hng 16 k t.
s dng LCD , ta hy c file LCD.C trong th vin Driver ca CCS. CCS hng
dn cch ta i dy cho cc chn ca LCD, ng thi CCS vit sn cho ta cc hm thao tc cho
LCD:
4.1. Cch ni dy trong LCD

Cch ni dy:
// nh ngha chc nng cc chn.
// D0 Enable
// D1 RS (Reset)
// D2 RW (Rewrite)
// D4 D4
// D5 D5
// D6 D6
// D7 D7
// LCD chn D0-D3 khng c s dng.
4.2. Cc hm c bn trong LCD

- Wrtchar("char") : hm xut k t ra LCD.


- Setcursor(x,y) : hm cho php con tr nhy ti v tr (x,y) trn LCD.
M phng v d dng LCD bng Proteus:
Code :
#include <16F877A.h>

#include <def_877a.h>
#device *=16 ADC=10
#include <lcd.h>

Page 7

[at_nightfall_09] - Mch o nhit iu khin ng c, hin th LCD.

#use delay(clock=20000000)
void hiennhietdo() // Ham hien thi nhiet do do duoc tu LM35
{
int8 t,chuc,donvi;
setcursor(0,0);
wrtchar("- DO NHIET DO -"); // Hien thi dong tren
t = ct;
chuc = t/10 + 48; // Tach so hang chuc va hang don vi
donvi = t%10 + 48;
setcursor(0,1);
wrtchar("NHIET DO: "); // Hien thi so do nhiet do len LCD
wrtchar(chuc);
wrtchar(donvi);
wrtchar("*C");
delay_ms(50);
}

V. CC CH IU KHIN NG C.
- Cc ch iu khin.
Code chn ch iu khin ng vi 4 nt
bm.
Phm 1: Chn ch - mode.
Phm 2: Chnh tng ngng nhit .
Phm 3: Chnh gim ngng nhit .
Phm 4: Ch bt tt ng c.

Void readkb() // Ham phat hien phim bam.


{
anphim=0;
if(INPUT(PIN_C0)==0) // Neu phim 1 duoc an (phim chon mode)
{
delay_ms(150);
// Ham delay chong rung phim
while(INPUT(PIN_C0)==0); // Cho den khi nut duoc tha ra
mode++; // Tang mode len 1 de chuyen sang mode ke tiep
if(mode==3) mode=0; // Lap lai mode 0 khi da chuyen qua het cac mode
anphim=1;

Page 8

[at_nightfall_09] - Mch o nhit iu khin ng c, hin th LCD.

}
else
{
if(INPUT(PIN_C1)==0) // Neu phim 2 duoc an (phim giam)
{
delay_ms(150);
// Chong rung phim (cho phim duoc an trong 1 luc)
if(INPUT(PIN_C1)==0)
{
if(mode==1)
{ if(tmin>0) tmin--; anphim=1; }
// Giam nguong tuy theo mode, "tmin" >0
th gim 1
if(mode==2)
{ if(tmax>tmin+1) tmax--; anphim=1; } // de "tmax" khng nh hn "tmin" +1
}
}
else
{
if(INPUT(PIN_C2)==0) // Neu phim 3 duoc an (phim tang)
{
delay_ms(150);
// Cho phim duoc an trong 1 luc
if(INPUT(PIN_C2)==0)
{
if(mode==1)
{
if(tmin<tmax-1) tmin++; anphim=1; // Tang nguong tuy theo mode.
Tmin khong the >tmax-1
}
if(mode==2)
{
if(tmax<90) tmax++; anphim=1; // tmax khong lon hon 90do.
}
}
}
else
if(INPUT(PIN_C3)==0) // Neu phim 4 duoc an (phim bat/tat)
{
delay_ms(150);

Page 9

10

[at_nightfall_09] - Mch o nhit iu khin ng c, hin th LCD.

while(INPUT(PIN_C3)==0); // Cho den khi nut duoc tha ra


if (ct>=tmin&&ct<=tmax) // Neu nhiet do nam trong khoang 2 nguong
{
// thi nut 4 co chuc nang bat/tat quat
bat=~bat;
if(bat==1) OUTPUT_BIT(PIN_D0,1);
if(bat==0) OUTPUT_BIT(PIN_D0,0);
anphim=1;
}
}
}
}
}
5.1. Ch chn mode hin th

Trong ch ny, khi bm phm 1 ch ny s c kch hot.


C 3 mc hin th:
o nhit : Nhit l: 0C
Hn bt qut: Hin th mc nhit ci bt qut.
Hn tt qut: Hin th mc nhit ci tt qut.

if(INPUT(PIN_C0)==0) // Neu phim 1 duoc an (phim chon mode)


{
delay_ms(150);
// Ham delay chong rung phim
while(INPUT(PIN_C0)==0); // Cho den khi nut duoc tha ra
mode++; // Tang mode len 1 de chuyen sang mode ke tiep
if(mode==3) mode=0; // Lap lai mode 0 khi da chuyen qua het cac mode
anphim=1;
}
5.2. Ch gim mc iu chnh ngng nhit bt/tt ng c.

Phm bm th 2 s kch hot ch iu khin ny. Khi chn ch mode tt hoc bt ng


c th ch iu khin ny s lm gim gi tr ngng ci t nhit tt hoc bt ng c.
Code:

Page 10

11

[at_nightfall_09] - Mch o nhit iu khin ng c, hin th LCD.

If (INPUT(PIN_C1)==0) // Neu phim 2 duoc an (phim giam)


{
delay_ms(150);
// Chong rung phim (cho phim duoc an trong 1 luc)
if(INPUT(PIN_C1)==0)
{
if(mode==1)
{ if(tmin>0) tmin--; anphim=1; }
// Giam nguong tuy theo mode, "tmin" >0 thi giam 1
if(mode==2)
{ if(tmax>tmin+1) tmax--; anphim=1; }
// de "tmax" khong nho hon "tmin" +1
}
}
5.3. Ch tng mc iu chnh ngng nhit bt/tt ng c.

Phm bm th 3 s kch hot ch iu khin ny. Khi chn ch mode tt hoc bt ng


c th ch iu khin ny s lm tng gi tr ngng ci t nhit tt hoc bt ng c.
Code:
If (INPUT(PIN_C2)==0) // Neu phim 3 duoc an (phim tang)
{
delay_ms(150);
// Cho phim duoc an trong 1 luc
if (INPUT(PIN_C2)==0)
{
If (mode==1)
{
If (tmin<tmax-1) tmin++; anphim=1; // Tang nguong tuy theo mode.
// Tmin khong the >tmax-1
}
if(mode==2)
{
if(tmax<90) tmax++; anphim=1; // tmax khong lon hon 90do.
}
}
}
5.4. Ch bt - tt ng c.

Phm bm th 3 s kch hot ch iu khin ny. Khi chn ch mode tt hoc bt ng


c th ch iu khin ny s tt hoc bt ng c.
Code:

Page 11

12

[at_nightfall_09] - Mch o nhit iu khin ng c, hin th LCD.

If (INPUT(PIN_C3)==0) // Neu phim 4 duoc an (phim bat/tat)


{
delay_ms(150);
while(INPUT(PIN_C3)==0); // Cho den khi nut duoc tha ra
if (ct>=tmin&&ct<=tmax) // Neu nhiet do nam trong khoang giua 2 nguong
{
// thi nut 4 co chuc nang bat/tat quat
bat=~bat;
if(bat==1) OUTPUT_BIT(PIN_D0,1);
if(bat==0) OUTPUT_BIT(PIN_D0,0);
anphim=1;
}
}

VI. CC KHI CHC NNG KHC.


6.1. Tn s hot ng

Tn s hot ng: 20Hz

6.2. Ngun cung cp cho PIC

Thng thng khi cn cung cp ngun cho mch, ngi ta thng dng cc b n p. Cc b
n p ny c chc nng cung cp mt ngun in n nh, tc l gi tr in p cung cp n nh.
Vic c thm cc b n p ny gip mch hot ng hiu qu hn, trnh vic dng cung cp qu
ln lm hng linh kin, IC trong mch.

Page 12

13

[at_nightfall_09] - Mch o nhit iu khin ng c, hin th LCD.


n p hay n dng ngi ta thng dng Tranzito cung sut hoc cc IC 3 chn. i vi IC 3
chn th ta c cc h 78XX, 79XX.. Trong h 78XX l n p in p dng v dng 79XX l
n p in p m..

VII. CODE NP CHO PIC16F877A


Code:
#include <16F877A.h>
#include <def_877a.h>
#device *=16 ADC=10
#include <lcd.h>
#FUSES NOWDT
//No Watch Dog Timer
#FUSES HS
//High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPUT
//No Power Up Timer
#FUSES NOPROTECT
//Code not protected from reading
#FUSES NODEBUG
//No Debug mode for ICD
#FUSES NOBROWNOUT
//No brownout reset
#FUSES NOLVP
//No low voltage prgming, B3(PIC16) or B5(PIC18) used for
I/O
#FUSES NOCPD
//No EE protection
#FUSES NOWRT
//Program memory not write protected
#FUSES RESERVED
//Used to set the reserved FUSE bits
#use delay(clock=20000000)
int8 mode,tmin,tmax; // Khai bao cac bien dung trong ct
int16 ct;
int1 bat,anphim,docnhietdo;
int8 cnt=0;
void readkb() // Ham phat hien phim bam
{
anphim=0;
if(INPUT(PIN_C0)==0) // Neu phim 1 duoc an (phim chon mode)
{
delay_ms(150);
// Ham delay chong rung phim
while(INPUT(PIN_C0)==0); // Cho den khi nut duoc tha ra
mode++; // Tang mode len 1 de chuyen sang mode ke tiep
if(mode==3) mode=0; // Lap lai mode 0 khi da chuyen qua het cac mode

Page 13

14

[at_nightfall_09] - Mch o nhit iu khin ng c, hin th LCD.

anphim=1;
}
else
{
if(INPUT(PIN_C1)==0) // Neu phim 2 duoc an (phim giam)
{
delay_ms(150);
// Chong rung phim (cho phim duoc an trong 1 luc)
if(INPUT(PIN_C1)==0)
{
if(mode==1)
{ if(tmin>0) tmin--; anphim=1; }
// Giam nguong tuy theo mode, "tmin" >0 th gim
1
if(mode==2)
{ if(tmax>tmin+1) tmax--; anphim=1; } // de "tmax" khng nh hn "tmin" +1
}
}
else
{
if(INPUT(PIN_C2)==0) // Neu phim 3 duoc an (phim tang)
{
delay_ms(150);
// Cho phim duoc an trong 1 luc
if(INPUT(PIN_C2)==0)
{
if(mode==1)
{
if(tmin<tmax-1) tmin++; anphim=1; // Tang nguong tuy theo mode. Tmin
khong the >tmax-1
}
if(mode==2)
{
if(tmax<90) tmax++; anphim=1; // tmax khong lon hon 90do.
}
}
}
else
if(INPUT(PIN_C3)==0) // Neu phim 4 duoc an (phim bat/tat)
{

Page 14

15

[at_nightfall_09] - Mch o nhit iu khin ng c, hin th LCD.

delay_ms(150);
while(INPUT(PIN_C3)==0); // Cho den khi nut duoc tha ra
if (ct>=tmin&&ct<=tmax) // Neu nhiet do nam trong khoang giua 2 nguong
{
// thi nut 4 co chuc nang bat/tat quat
bat=~bat;
if(bat==1) OUTPUT_BIT(PIN_D0,1);
if(bat==0) OUTPUT_BIT(PIN_D0,0);
anphim=1;
}
}
}
}
}
void check()
// Ham kiem tra nguong (tat quat neu nhiet do duoi tmin
{
// va bat quat neu nhiet do tren tmax)
if (ct<tmin) { OUTPUT_BIT(PIN_D0,0); bat=0; }
if (ct>tmax) { OUTPUT_BIT(PIN_D0,1); bat=1; }
}
void hiennhietdo() // Ham hien thi nhiet do do duoc tu LM35
{
int8 t,chuc,donvi;
setcursor(0,0);
wrtchar("- DO NHIET DO -"); // Hien thi dong tren
t = ct;
chuc = t/10 + 48; // Tach so hang chuc va hang don vi
donvi = t%10 + 48;
setcursor(0,1);
wrtchar("NHIET DO: "); // Hien thi so do nhiet do len LCD
wrtchar(chuc);
wrtchar(donvi);
wrtchar("*C");
delay_ms(50);
}
void settmin() // Ham cai dat nguong nhiet do min
{
int8 t,chuc,donvi;

Page 15

16

[at_nightfall_09] - Mch o nhit iu khin ng c, hin th LCD.

setcursor(0,0);
wrtchar("- HEN TAT QUAT -");
t = tmin;
// Tach hang chuc va don vi cua tmin va hien thi ra LCD
chuc = t/10 + 48;
donvi = t%10 + 48;
setcursor(0,1);
wrtchar("NEU DUOI: ");
wrtchar(chuc);
wrtchar(donvi);
wrtchar("*C");
delay_ms(50);
}
void settmax() // Ham cai dat nguong nhiet do max (tuong tu ham setmin)
{
int8 t,chuc,donvi;
setcursor(0,0);
wrtchar("- HEN BAT QUAT -");
t = tmax;
chuc = t/10 + 48;
donvi = t%10 + 48;
setcursor(0,1);
wrtchar("NEU TREN: ");
wrtchar(chuc);
wrtchar(donvi);
wrtchar("*C");
delay_ms(50);
}
void selectmode() // Ham lua chon mode hien thi
{
switch (mode)
{
case 0: hiennhietdo(); break;
case 1: settmin(); break;

Page 16

17

[at_nightfall_09] - Mch o nhit iu khin ng c, hin th LCD.

case 2: settmax(); break;


}
}

#INT_TIMER1 // Khai bao su dung ngat timer1


void ct_phuc_vu_ngat()
{
CLEAR_INTERRUPT(INT_TIMER1); // Xoa co ngat timer1
DISABLE_INTERRUPTS(GLOBAL); // Khong cho phep ngat khac
cnt++;
// Sau moi ngat ta tang bien dem
if(cnt==10)
// khi cnt=10 thi da dem duoc 10 lan tuong ung voi 1s
{
docnhietdo=1;
ct = READ_ADC();
ct = ct*0.49;
cnt=0;
}
else docnhietdo=0;
SET_TIMER1(3035);
ENABLE_INTERRUPTS(GLOBAL);
}
void main() // Ham ct chinh
{
Setup_ADC(ADC_CLOCK_INTERNAL); // Cai dat bo chuyen doi ADC
setup_adc_ports(AN0); // Ngo vao Analog la chan AN0
SET_ADC_CHANNEL(0); // Chon kenh chuyen doi ADC la kenh 0
delay_us(20);
mode = 0; // Khoi tao ban dau voi tmin=20*C va tmax=27*C
tmin = 20; // va hien thi mode do nhiet do dau tien
tmax = 27;
lcd_init(); // Khoi tao LCD
wrtcmd(0x01);
wrtcmd(0x28);
wrtcmd(0x0c);
SETUP_TIMER_1(T1_INTERNAL|T1_DIV_BY_8); // Cai dat timer1 voi bo chia tan 1:8

Page 17

18

[at_nightfall_09] - Mch o nhit iu khin ng c, hin th LCD.

SET_TIMER1(3035); // Gia tri khoi tao cho timer1 ( dem den 65535
// voi clock 20Mhz chia 8 => mot ngat tuong ung voi 0.1s )
ENABLE_INTERRUPTS(INT_TIMER1); // Cho phep ngat timer1
ENABLE_INTERRUPTS(GLOBAL); // Cho phep ngat toan cuc
ct = READ_ADC(); // Doc gia tri nhiet do dau tien
ct = ct*0.49;
while(1) // Vong lap vo han
{
selectmode();
do
{
if(docnhietdo==1) // Neu nhiet do duoc doc thi hien thi ra LCD neu dang
{
// o mode hien thi va tien hanh kiem tra nguong
if(mode==0) { hiennhietdo(); }
check(); // Kiem tra nguong
}
readkb();
}
while(anphim==0); // Lien tuc lap lai viec kiem tra xem nhiet do
}
// co duoc doc hay ko va kiem tra phim bam
}

VIII. S MCH THIT K.

Page 18

19

[at_nightfall_09] - Mch o nhit iu khin ng c, hin th LCD.


Mch c m phng trn phn mm Protues 7.6

IX. S MCH IN.

X. SN PHM THC T.

Page 19

You might also like