Tài liệu Đo & ổn định độ sáng phòng: ... Ebook Đo & ổn định độ sáng phòng
29 trang |
Chia sẻ: huyen82 | Lượt xem: 1645 | Lượt tải: 0
Tóm tắt tài liệu Đo & ổn định độ sáng phòng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Đề tài: Đo và ổn định độ sáng phòng
NéI DUNG B¸O C¸O :
I.Mục đích yêu cầu
II.S¬ ®å khèi tæng qu¸t.
III.M¹ch nguyªn lý,tÝnh to¸n vµ m¹ch in.
IV.Lu ®å thuËt to¸n.
V.PhÇn mÒm ®iÒu khiÓn.
I. Mục đích yêu cầu
Trong thực tế, nhiều khi ta cần đo và ổn định độ sáng của một phòng, một toà nhà...Mục đích của bài toán này là thiết kế hệ thống đo và ổn định độ sáng phòng một cách tự động. Khoảng ánh sáng cần ổn định đựơc nhập vào theo yêu cầu sử dụng, hệ thống điều khiển sẽ đo và thay đổi độ sáng phòng theo yêu càu bằng cơ cấu rèm cửa và bóng đèn.
II. Sơ đồ khối tổng quát
1.S¬ ®å khèi :
S¬ ®å khèi tæng qu¸t cña hÖ thèng ®o lêng vµ ®iÒu khiÓn lµ:
§èi tîng cÇn ®o bÊt kú
SENSOR
BiÕn ®æi chuÈn ho¸
C¬ cÊu chÊp hµnh
M¹ch ®iÒu khiÓn
Ph¸t hiÖn sai
Møc chuÈn
I/O
So s¸nh
mP/mC/PC
A/D
ChØ thÞ kÕt qu¶
Tõ s¬ ®å khèi tæng qu¸t, dùa theo yªu cÇu bµi to¸n ta cã s¬ ®å khèi cô thÓ cña m¹ch ®o vµ ®iÒu khiÓn ¸nh s¸ng lµ:
¸nh s¸ng
SENSOR
BiÕn ®æi chuÈn ho¸
C¬ cÊu chÊp hµnh
®iÒu khiÓn
MC
A/D
2.Giíi thiÖu c¸c linh kiÖn chÝnh:
a.Quang trë:
§Æc trng cña c¸c c¶m biÕn ®iÖn trë lµ sù phô thuéc cña ®iÖn trë vµo th«ng lîng bøc x¹ vµ phæ cña bøc x¹ ®ã.C¸c tÕ bµo quang dÉn lµ mét trong nh÷ng c¶m biÕn quang cã ®é nh¹y cao.C¬ së vËt lý cña tÕ bµo quang dÉn lµ hiÖn tîng quang dÉn do kÕt qu¶ cña hiÖu øng quang ®iÖn néi:hiÖn tîng gi¶i phãng h¹t t¶i ®iÖn trong vËt liÖu díi t¸c dông cña ¸nh s¸ng lµm t¨ng ®é dÉn cña vËt liÖu.
Trong ®Ò tµi nµy ta dïng quang trë RCdS chÕ t¹o b»ng b¸n dÉn ®a tinh thÓ ®ång nhÊt.§é nh¹y cña quang trë rÊt cao vµ cßn phô thuéc vµo nhiÖt ®é lµm viÖc.§iÖn trë tèi cña nã kho¶ng 104-109 «m ë 270c.§iÖn trë gi¶m rÊt nhanh khi ®é räi t¨ng,®¬n vÞ cña ®é räi lµ:LUX.
b. Bộ chuyển đổi tương tự/số
Boä chuyeån ñoåi töông töï – soá ñöôïc söû duïng trong heä thoáng laø ADC 0809. Ñaây laø IC ñöôïc cheá taïo theo coâng ngheä CMOS goàm moät boä chuyeån ñoåi töôngtöï - soá 8 bit, boä choïn 8 keânh vaø moät boä logic ñieàu khieån töông thích.Boä chuyeån ñoåi AD 8 bit naøy duøng phöông phaùp chuyeån ñoåi xaáp xæ lieân tieáp. Boä choïn keânh coù theå truy xuaát baát kyø keânh naøo trong caùc ngoõ vaøo töông töï moät caùch ñoäc laäp.
Phöông phaùp ADC xaáp xæ lieân tieáp (Successive- Approximation ADC) laø moät trong nhöõng phöông phaùp ñöôïc söû duïng roäng raõi. Tuy maïch ñieän phöùc taïp nhöng thôøi gian chuyeån ñoåi laïi ngaén hôn. Phöông phaùp
chuyeån ñoåi ADC xaáp xæ lieân tieáp coù thôøi gian chuyeån ñoåi coá ñònh khoâng phuï thuoäc vaøo ñieän aùp ngoõ vaøo.
VA
Clock
Start
EOC
V’A
+
-
DAC
Thanh ghi ñieàu khieån
Logic ñieàu khieån
MSB LSB
Sô ñoà khoái chuyeån ñoåi ADC duøng phöông phaùp xaáp xæ lieân tieáp.
- Hoaït ñoäng:Khi taùc ñoäng caïnh xuoáng cuûa xung start thì ADC baét ñaàu chuyeån ñoåi. Maïch logic ñieàu khieån set bit coù nghóa lôùn nhaát (MSB) cuûa thanh ghi ñieàu khieån leân möùc cao vaø taát caû caùc bit coøn laïi ôû möùc thaáp. Soá nhò phaân ra ôû maïch thanh ghi ñieàu khieån ñöôïc qua maïch DAC ñeå taïo ra ñieän aùp tham chieáu V’a.
+ Neáu V’a >Va thì ngoõ ra boä so saùnh xuoáng möùc thaáp, laøm cho maïch logic ñieàu khieån xoùa bit MSB xuoáng möùc thaáp.
+ Neáu V’a<Va thì ngoõ ra cuûa boä so saùnh vaãn ôû möùc cao vaø laøm cho maïch logic ñieàu khieån giöõ bit MSB ôû möùc cao.
Tieáp theo maïch logic ñieàu khieån ñöa bit coù nghóa keá bit MSB leân möùc cao vaø taïo ôû ngoõ ra khoái DAC moät ñieän aùp tham chieáu V’a roài ñem so saùnh töông töï nhö bit MSB ôû treân. Quaù trình naøy cöù tieáp tuïc cho ñeán bit cuoái cuøng trong thanh ghi ñieàu khieån. Luùc ñoù V’a gaàn baèng Va ngoõ ra cuûa maïch logic ñieàu khieån baùo keát thuùc chuyeån ñoåi.
Nhö vaäy maïch ñoåi ra n bit chæ maát n chu kyø xung clock neân coù theå ñaït toác ñoä raát cao. Tuy nhieân nhöôïc ñieåm cuûa phöông phaùp ADC xaáp xæ lieân tieáp laø khoâng theå ñaùp öùng vôùi tín hieäu töông töï vaøo bieán ñoåi cöïc nhanh .
- Sô ñoà chaân ADC 0809:
ADC0809
28 15
1 14
IN2 IN1 IN0 A B C ALE 2-1 2-2 2-3 2-4 2-8 REF 2-6
START
IN3 IN4 IN5 IN6 IN7
EOC 2-5 OE CLK VCC REF GND 2-7
- Chöùc naêng caùc chaân:
+ IN0 ñeán IN7 : 8 ngoõ vaøo töông töï.
+ A, B, C : giaûi maõ choïn 1 trong 8 ngoõ vaøo
+ Z-1 ñeán Z-8 : ngoõ ra song song 8 bit
+ ALE : cho pheùp choát ñòa chæ
+ START : xung baét ñaàu chuyeån ñoåi
+ CLK : xung ñoàng hoà
+ REF (+) : ñieän theá tham chieáu (+)
+ REF (-) : ñieän theá tham chieáu (-)
+ VCC : nguoàn cung caáp
- Caùc ñaëc ñieåm cuûa ADC 0809:
+ Ñoä phaân giaûi 8 bit
+ Toång sai soá chöa chænh ñònh ± ½ LSB; ± 1 LSB
+ Thôøi gian chuyeån ñoåi: 100ms ôû taàn soá 640 kHz
+ Nguoàn cung caáp + 5V
+ Ñieän aùp ngoõ vaøo 0 – 5V
+ Taàn soá xung clock 10kHz – 1280 kHz
+ Nhieät ñoä hoaït ñoäng - 40oC ñeán 85oC
+ Deã daøng giao tieáp vôùi vi xöû lyù hoaëc duøng rieâng
+ Khoâng caàn ñieàu chænh zero hoaëc ñaày thang
- Nguyeân lyù hoaït ñoäng: ADC 0809 coù 8 ngoõ vaøo töông töï, 8 ngoõ ra 8 bit coù theå choïn 1 trong 8 ngoõ vaøo töông töï ñeå chuyeån ñoåi sang soá 8 bit.
Caùc ngoõ vaøo ñöôïc choïn baèng caùch giaûi maõ. Choïn 1 trong 8 ngoõ vaøo töông töï ñöôïc thöïc hieän nhôø 3 chaân ADDA , ADDB , ADDC nhö baûng traïng thaùi sau:
A
B
C
Ngoõ vaøo ñöôïc choïn
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
IN0
IN1
IN2
IN3
IN4
IN5
IN6
IN7
Sau khi kích xung start thì boä chuyeån ñoåi baét ñaàu hoaït ñoäng ôû caïnh xuoáng cuûa xung start, ngoõ ra EOC seõ xuoáng möùc thaáp sau khoaûng 8 xung clock (tính töø caïnh xuoáng cuûa xung start). Luùc naøy bit coù troïng soá lôùn nhaát (MSB) ñöôïc ñaët leân möùc 1, taát caû caùc bit coøn laïi ôû möùc 0, ñoàng thôøi taïo ra ñieän aùp coù giaù trò Vref/2, ñieän theá naøy ñöôïc so saùnh vôùi ñieän theá vaøo Vin.
+ Neáu Vin > Vref/2 thì bit MSB vaãn ôû möùc 1.
+ Neáu Vin < Vref/2 thì bit MSB vaãn ôû möùc 0.
Töông töï nhö vaäy bit keá tieáp MSB ñöôïc ñaët leân 1 vaø taïo ra ñieän theá coù giaù trò Vref/4 vaø cuõng so saùnh vôùi ñieän aùp ngoõ vaøo Vin. Quaù trình cöù tieáp tuïc nhö vaäy cho ñeán khi xaùc ñònh ñöôïc bit cuoái cuøng. Khi ñoù chaân EOC leân möùc 1 baùo cho bieát ñaõ keát thuùc chuyeån ñoåi.
Trong suoát quaù trình chuyeån ñoåi chaân OE ñöôïc ñaët ôû möùc 1, muoán ñoïc döõ lieäu ra chaân OE xuoáng möùc 0, neáu coù 1 xung start taùc ñoäng thì ADC seõ ngöng chuyeån ñoåi. Maõ ra N cho moät ngoõ vaøo tuøy yù laø moät soá nguyeân.
Trong ñoù: Vin : ñieän aùp ngoõ vaøo heä so saùnh.
Vref(+) : ñieän aùp taïi chaân REF(+).
Vref(-) : ñieän aùp taïi chaân REF(-).
Neáu choïn Vref(-) = 0 thì N = 256.
Vref(+) = Vcc = 5V thì ñaày thang laø 256.
Giaù trò böôùc nhoû nhaát: 1 LSB = = 0,0196 V/byte
Vaäy vôùi 256 böôùc ñieän aùp vaøo lôùn nhaát cuûa ADC0809 laø Vin = 5V.
- Maïch taïo xung clock cho ADC 0809: Söû duïng maïch dao ñoäng duøng caùc coång NOT ñeå taïo dao ñoäng cho ADC nhö sau:
Vcc
500 pF
10K
IK
IK
Taàn soá dao ñoäng cuûa maïch laø f =
Taàn soá dao ñoäng chuaån laø 600 kHz
Suy ra 640 =
Vôùi R töø 100W ñeán vaøi kW. Ta choïn R =1 kW Þ C = 500 pF.
c.Bộ vi điều khiển
Heä thoáng söû duïng boä vi ñieàu khieån AT89C51 coù caùc ñaëc ñieåm sau :
+ 4 kbyte ROM, 128 bit RAM.
+ 4 port vaøo ra 8 bit.
+ 2 boä ñònh thôøi 16 bit.
+ 1 port noái tieáp.
+ 64 KB khoâng gian boä nhôù chöông trình môû roäng.
+ 64 KB khoâng gian boä nhôù döõ lieäu môû roäng.
- Sô ñoà khoái boä vi ñieàu khieån AT89C51
TXD RXD
P0 P1 P2 P3
EA\ RST PSEN ALE
C¸c thanh ghi
RAM / ROM
§iÒu khiÓn ng¾t
§iÒu khiÓn Bus
CPU
Port nèi tiÕp
C¸c port I/O
T¹o dao ®éng
§Õm / §Þnh thêi
XTAL
Ng¾t ngoµi
Timer
- Sô ñoà chaân boä vi ñieàu khieån AT89C51
AT89C51
EA/VP
31
X1
19
X2
18
RESET
9
P3.2
12
P3.3
13
P3.4
14
P3.5
15
P1.0
1
P1.1
P1.2
3
P1.3
4
P1.4
5
P1.5
6
P1.6
P1.7
8
P0.0
39
P0.1
38
P0.2
37
P0.3
36
P0.4
35
P0.5
34
P0.6
33
P0.7
32
P2.0
21
P2.1
22
P2.2
23
P2.3
24
P2.4
25
P2.5
26
P2.6
27
P2.7
28
P3.7
17
P3.6
16
PSEN
29
ALE/P
30
P3.1
11
P3.0
10
VCC
40
VSS
20
Sô ñoà chaân AT89C51
- Chöùc naêng caùc chaân:
+ Port0: laø port ña hôïp töø chaân 32 ñeán 39. Neáu khoâng duøng boä nhôù môû roäng noù coù chöùc naêng nhö caùc ñöôøng vaøo ra. Ñoái vôùi caùc thieát keá söû duïng boä nhôù môû roäng noù coøn ñöôïc söû duïng laøm caùc ñöôøng ñòa chæ.
+ Port1: laø moät port vaøo ra töø chaân 1 ñeán 8. Caùc chaân ñöôïc kyù hieäu P1.0, P1.1, P1.2 …P1.8 coù theå duøng cho caùc thieát bò ngoaøi neáu caàn. Port1 chæ ñöôïc duøng trong giao tieáp vôùi caùc thieát bò ngoaøi.
+ Port2: laø moät port coù coâng duïng keùp töø chaân 21 ñeán 28, ñöôïc duøng nhö caùc ñöôøng xuaát nhaäp hoaëc laø byte cao cuûa bus ñòa chæ ñoái vôùi caùc thieát keá duøng boä nhôù môû roäng.
+ Port3: töø chaân 10 ñeán 17. Caùc chaân cuûa port naøy coù nhieàu chöùc naêng, caùc coâng duïng chuyeån ñoåi coù lieân heä vôùi caùc ñaëc tính ñaëc bieät cuûa AT89C51 nhö ôû baûng sau :
Bit
Teân
Chöùc naêng chuyeån ñoåi
P3.0
P3.1
P3.2
P3.3
P3.4
P3.5
P3.6
P3.7
RXD
TXD
INTO
INT1
T0
T1
WR
RD
Döõ lieäu nhaän cho port noái tieáp
Döõ lieäu phaùt cho port noái tieáp
Ngaét 0 beân ngoaøi
Ngaét 1 beân ngoaøi
Ngoõ vaøo cuûa timer/counter 0
Ngoõ vaøo cuûa timer/counter 1
Xung ghi boä nhôù döõ lieäu ngoaøi
Xung ñoïc boä nhôù döõ lieäu ngoaøi
+ PSEN (Program Store Enable): AT89C51 coù 4 tín hieäu ñieàu khieån. PSEN laø tín hieäu ra treân chaân 29, noù laø tín hieäu ñieàu khieån cho pheùp boä nhôù chöông trình môû roäng vaø thöôøng ñöôïc noái ñeán chaân OE (Output Enable) cuûa moät EPROM ñeå cho pheùp ñoïc caùc byte maõ leänh. PSEN seõ ôû möùc thaáp trong thôøi gian laáy leänh. Caùc maõ nhò phaân cuûa chöông trình ñöôïc ñoïc töø EPROM qua bus vaø ñöôïc choát vaøo thanh ghi leänh cuûa AT89C51 ñeå giaûi maõ leänh. Khi thi haønh chöông trình trong ROM noäi PSEN seõ ôû möùc thuï ñoäng (möùc cao).
+ ALE (Address Latch Enable): tín hieäu ra ALE treân chaân 30. AT89C51duøng ALE ñeå giaûi caùc bus ñòa chæ vaø döõ lieäu ña hôïp. Khi port 0 vöøa laø bus döõ lieäu vöøa laø byte thaáp cuûa ñòa chæ, ALE laø tín hieäu ñeå choát ñòa chæ vaøo moät thanh ghi beân ngoaøi trong nöõa ñaàu cuûa chu kyø boä nhôù. Sau ñoù, port 0 duøng ñeå xuaát hoaëc nhaäp döõ lieäu trong nöõa sau chu kyø cuûa boä nhôù.
+ EA (External Access): Tín hieäu vaøo EA treân chaân 31 thöôøng ñöôïc maéc leân möùc cao (+5V) hoaëc möùc thaáp (GND). Neáu ôû möùc cao, AT89C51 thi haønh chöông trình töø ROM noäi trong khoaûng ñòa chæ thaáp (4K). Neáu ôû möùc thaáp, chöông trình chæ ñöôïc thi haønh töø boä nhôù môû roäng. Neáu EA ñöôïc noái möùc thaáp, boä nhôù beân trong chöông trình AT89C51 seõ bò caám vaø chöông trình thi haønh töø EPROM môû roäng. Ngöôøi ta coøn duøng chaân EA laøm chaân caáp ñieän aùp 21V khi laäp trình cho EPROM trong AT89C51.
Maïch reset
+ RST (Reset): Ngoõ vaøo RST treân chaân 9 laø ngoõ reset cuûa AT89C51. Khi tín hieäu naøy ñöôïc ñöa leân möùùc cao trong ít nhaát 2 chu kyø, caùc thanh ghi trong AT89C51 seõ ñöôïc thieát laäp veà nhöõng giaù trò thích hôïp ñeå khôûi ñoäng heä thoáng. RST coù theå ñöôïc kích khi caáp ñieän duøng moät maïch R-C. Sô ñoà maïch Reset ñöôïc söû duïng trong heä thoáng:
Traïng thaùi cuûa taát caû caùc thanh ghi cuûa AT89C51/8031 sau khi reset heä thoáng ñöôïc toùm taét trong baûng sau:
Thanh ghi
Noäi dung
Ñeám chöông trình
Tích luõy
B
PSW
SP
DPTR
Port 0-3
IP
IE
Caùc thanh ghi ñònh thôøi
SCON
SBUF
PCON(HMOS)
PCON(CMOS)
0000H
00H
00H
00H
07H
0000H
FFH
XXX00000B
0XX00000B
00H
00H
00H
0XXXXXXB
0XXX0000B
+ Caùc ngoõ vaøo boä dao ñoäng treân chip: Nhö ñaõ thaáy trong caùc hình treân, AT89C51 coù moät boä dao ñoäng treân chip. Noù thöôøng ñöôïc noái vôùi thaïch anh giöõa hai chaân 18 vaø 19. Taàn soá thaïch anh thoâng thöôøng laø 12MHz.
+ Caùc chaân nguoàn: AT89C51 vaän haønh vôùi nguoàn ñôn +5V. Vcc ñöôïc noái vaøo chaân 40 vaø Vss (GND) ñöôïc noái vaøo chaân 20.
d.Cấu trúc của động cơ bước
H×nh: CÊu tróc cña motor bíc.
Ho¹t ®éng cña ®éng c¬ bíc:
C¸c cuén d©y ®îc cÊp dßng theo mét vßng trßn, mçi chu k× cÊp dßng ®éng c¬ quay ®îc 1 vßng.
AA'
t
BB'
t
CC'
t
DD'
t
H×nh: Ho¹t ®éng cña tõng cuén d©y trong motor bíc.
A
B
C
D
Step motor
H×nh: S¬ ®å nguyªn lÝ cña khèi khuÕch ®¹i c«ng suÊt ®éng c¬.
Bé khuÕch ®¹i c«ng suÊt sö dông 1 transitor c«ng suÊt cho mçi cuén d©y:
"ABCD"= "0001" ® "0010" ® "0100" ® "1000" ® "0001" ......
® "ABCD" thùc hiÖn lÖnh dÞch 4 lÇn, ®éng c¬ quay 1 vßng.
Gi¶ sö ®éng c¬ quay 1000vßng/phót ®Õn 10000vßng/phót trong kho¶ng T1 ®Õn T2.
Ta cã c«ng thøc: Dn=kDT
n1=1000vßng/phót = 16,6vßng/gi©y
® "ABCD" quay16,6x4lÇn = 66,4lÇn/gi©y.
Víi xung nhÞp = 17,4kHz ® cø 17,4kHz/66.4=262 xung =¶1 "ABCD" quay 1 lÇn.
n2=10000vßng phót, t¬ng tù trªn, 26 xung =¶2 "ABCD" quay 1 lÇn.
Khi nhiÖt ®é biÕn thiªn tõ T0 ®Õn T8, th× biÕn chØ b¸o nhiÖt ®é VT biÕn thiªn tõ 000.0000.0000b ®Õn 8x255=2040=111.1111.1000b.
®1/26-1/262=kx2040
® k=1.69.10-5
Khi ë nhiÖt ®é TX ® 1/¶ - 1/262 = 1,69.10-5x(VT-0)
¶ = 59172/(VT+227).
Nh vËy, víi tÇn sè xung lµ 17,4kHz th× cø ¶ xung th× "ABCD" quay 1 lÇn.
III.S¬ ®å nguyªn lý,tÝnh to¸n vµ m¹ch in.
1.S¬ ®å nguyªn lý.
2.TÝnh to¸n khèi c¶m biÕn.
Theo c«ng thøc ph©n ¸p cã:
Ura=Vcc.Rm/ (RCdS+Rm) (3.1)
suy ra
mặt khác ta có quan hệ giữa Ura và Uso là:
(3.2)
(với Uso là điện áp sau khi chuyển đổi A/D)
A/D
Uso
Ura
thay vào biểu thức trên ta được
E1
E
Rcds
E2
R1
R2
(3.3)
Đồ thị biểu thị sự phụ thuộc của điện trở CDS vào độ sáng
coi gần đúng sự phụ thuộc trên là tuyến tính, ta có:
E = b – a.R (3.4)
bằng thực nghiệm ta xác định được cặp các giá trị R1, R2 tương ứng với E1, E2 , từ đó ta xác định được các hệ số a,b. ta có:
E1 = b - a.R1
E2 = b – a.R2
từ đó suy ra:
với E1= 1000, đo được R1=1800W
E2=500, đo được R2=27090W
Þ a=0,55 ; b=2000
thay biểu thức (2.3) vào (2.4) ta tìm được biểu thức liên hệ giữa tín hiệu sau bộ A/D và độ sáng là:
(3.5)
chọn Rm =
3.Sơ đồ mạch in
Sơ đồ lớp trên và lớp dưới
Sơ đồ mạch in tổng quát
IV. Lưu đồ thuật toán
Begin
Khëi t¹o
KiÓm tra cã ng¾t nèi tiÕp kh«ng ?
Thay ®æi gi¸ trÞ mÉu
HiÓn thÞ ra ®Ìn LED
KiÓm tra cã ng¾t ®Þnh thêi kh«ng?
NhËn d÷ liÖu tõ c¶m biÕn
Xö lÝ d÷ liÖu vµ ®a tÝn hiÖu t¬ng øng ra c¬ cÊu chÊp hµnh
HiÓn thÞ ra ®Ìn LED c¸c gi¸ trÞ vÒ ¸nh s¸ng
V. Phần mềm điều khiển
Ch¬ng tr×nh ®ùoc viÕt b»ng ng«n ng÷ lËp tr×nh C trªn m«i trêng RIDE
Ch¬ng tr×nh ®îc chia thµnh 5 module chÝnh:
Module khai b¸o
Module ®iÒu khiÓn ADC
Module hiÓn thÞ
Module nh¹p gi¸ trÞ mÉu
Module xö lÝ chÝnh
Sau ®©y la code cô thÓ cña phÇn mÒm ®iÒu khiÓn:
//************************************************************
Module khai b¸o: ®©y lµ 1 tÖp tiªu ®Ò ®Æt tªn lµ “define.h”
//************************************************************
#include
#include
#include
#include
//Dinh nghia cac cong
at 0x80 sbit CTRL0;
at 0x81 sbit CTRL1;
at 0x82 sbit CTRL2;
at 0x83 sbit CTRL3;
at 0x84 sbit START_ALE;
at 0x85 sbit OE_ADC;
at 0x86 sbit PhimTang;
at 0x87 sbit PhimGiam;
sbit Enter = P3^2;
sbit Kich = P3^4;
sbit Chuyen = P3^7;
at 0xA0 sbit b0;
at 0xA1 sbit b1;
at 0xA2 sbit b2;
at 0xA3 sbit b3;
at 0xA4 sbit Q0;
at 0xA5 sbit Q1;
at 0xA6 sbit Q2;
at 0xA7 sbit Q3;
//************************************************************
Module nhËp gi¸ trÞ mÉu: Module nµy cã chøc n¨ng thay ®æi gi¸ trÞ mÉu nhiÖt ®é cÇn æn ®Þnh
//************************************************************
#include
//Khai bao cac bien
extern unsigned int E, EDuoi, ETren;
//Khai bao cac ham
void HienthiLEDDuoi(); //Display to 7 bar LED gia tri can duoi
void HienthiLEDTren(); //Display to 7 bar LED gia tri can tren
void Hienthi(unsigned time);
void Delay(unsigned int time);
void ThietLap()interrupt 0; //Ngat ngoai 0
//------------------------------------------------------------------------------------
void ThietLap()interrupt 0 //Ngat ngoai 0
{
bit NhapXong;
Delay(100);
EX0=0;//Vo hieu hoa ngat ngoai 0
while (Enter==0) {};
NhapXong=0;
while (NhapXong==0)
{
while ((PhimTang==1)&&(PhimGiam==1)&&(Chuyen==1))
{
HienThiLEDDuoi();
}
if (Chuyen==0)
{
NhapXong=1;
while (Chuyen==0) {};
}
else
{
if (PhimTang==0) {EDuoi=EDuoi+1;}
if (PhimGiam==0) {EDuoi=EDuoi-1;}
while ((PhimTang==0)||(PhimGiam==0))
{
HienThiLEDDuoi();
}
}
}
NhapXong=0;
while (NhapXong==0)
{
while ((PhimTang==1)&&(PhimGiam==1)&&(Chuyen==1))
{
HienThiLEDTren();
}
if (Chuyen==0)
{
NhapXong=1;
while (Chuyen==0) {};
}
else
{
if (PhimTang==0) {ETren=ETren+1;}
if (PhimGiam==0) {ETren=ETren-1;}
while ((PhimTang==0)||(PhimGiam==0))
{
HienThiLEDTren();
}
}
}
Hienthi(2);
EX0=1; //Cho phep ngat ngoai 0 hoat dong tro lai
Delay(100);
}
//-----------------------------------------------------------------------------------------
//************************************************************
Module ®iÒu khiÓn ADC0809
//************************************************************
#include
void Delay(unsigned int time);
void Hienthi(unsigned time);
//-----------------------------------------------------------------
unsigned char QuetDuLieuSo()
{
unsigned char so,i;
unsigned int Sum;
Sum=0;
for (i=0; i<20; i++)
{
START_ALE=1;
START_ALE=0;
Hienthi(1); //Doi cho ADC chuyen doi xong
P1=0xFF;
OE_ADC=1;
so=P1; //Lay du lieu ve anh sang
OE_ADC=0;
Sum = Sum + so;
}
so = Sum/20;
return so;
}
//-----------------------------------------------------------------------
unsigned int AnhSang(unsigned char so)
{
unsigned int tg;
tg=4*so-4;
return tg;
}
//----------------------------------------------------------------------
//************************************************************
Module ®iÒu khiÓn hiÓn thÞ ra ®Ìn LED
//************************************************************
#include
// Variables used in this program
extern unsigned int E, EDuoi, ETren;
bit Q0_hn, Q1_hn, Q2_hn, Q3_hn, Q0_ht, Q1_ht, Q2_ht, Q3_ht,
Q0_hc, Q1_hc, Q2_hc, Q3_hc, Q0_hdv, Q1_hdv, Q2_hdv, Q3_hdv;
//Functions used in this program
void Delay(unsigned int time);
void Khoitaoht(unsigned char gt);
void Khoitaohc(unsigned char gt);
void Khoitaohdv(unsigned char gt);
void Khoitao(unsigned int num);
void HienthiLEDHienThoi(); //Display to 7 bar LED gia tri anh sang hien thoi
void HienthiLEDDuoi(); //Display to 7 bar LED gia tri anh sang can duoi
void HienthiLEDTren(); //Display to 7 bar LED gia tri anh sang can tren
void Hienthi(unsigned int time);
void Duavao7447(bit bi0,bit bi1,bit bi2,bit bi3);
//------------------------------------------------------------------------
//Noi dung cac ham
//------------------------------------------------------------------------
void TatLED()
{
Q3_hn=1; Q2_hn=1; Q1_hn=1; Q0_hn=1;
Q3_ht=1; Q2_ht=1; Q1_ht=1; Q0_ht=1;
Q3_hc=1; Q2_hc=1; Q1_hc=1; Q0_hc=1;
Q3_hdv=1; Q2_hdv=1; Q1_hdv=1; Q0_hdv=1;
}
//--------------------------------------------------------------------------------
void Khoitaohn(unsigned char gt)
{
Q0_hn=(gt&0x01)?1:0;
Q1_hn=(gt&0x02)?1:0;
Q2_hn=(gt&0x04)?1:0;
Q3_hn=(gt&0x08)?1:0;
}
//--------------------------------------------------------------------------------
void Khoitaoht(unsigned char gt)
{
Q0_ht=(gt&0x01)?1:0;
Q1_ht=(gt&0x02)?1:0;
Q2_ht=(gt&0x04)?1:0;
Q3_ht=(gt&0x08)?1:0;
}
//--------------------------------------------------------------------------------
void Khoitaohc(unsigned char gt)
{
Q0_hc=(gt&0x01)?1:0;
Q1_hc=(gt&0x02)?1:0;
Q2_hc=(gt&0x04)?1:0;
Q3_hc=(gt&0x08)?1:0;
}
//--------------------------------------------------------------------------------
void Khoitaohdv(unsigned char gt)
{
Q0_hdv=(gt&0x01)?1:0;
Q1_hdv=(gt&0x02)?1:0;
Q2_hdv=(gt&0x04)?1:0;
Q3_hdv=(gt&0x08)?1:0;
}
//--------------------------------------------------------------------------------
void Khoitao(unsigned int num)
{
unsigned char th,d;
d=num%10; th=num/10;
Khoitaohdv(d);
d=th%10; th=th/10;
Khoitaohc(d);
d=th%10; th=th/10;
Khoitaoht(d);
Khoitaohn(th);
}
//---------------------------------------------------------
void Duavao7447(bit bi0,bit bi1,bit bi2,bit bi3)
{
Q0=bi0;
Q1=bi1;
Q2=bi2;
Q3=bi3;
}
//---------------------------------------------------------
void HienThiLEDHienThoi()
{
Khoitao(E);
Duavao7447(Q0_hn,Q1_hn,Q2_hn,Q3_hn);
b3 = 0; b2 = 0; b1 = 0; b0 = 0;
Delay(100);
Duavao7447(Q0_ht,Q1_ht,Q2_ht,Q3_ht);
b3 = 0; b2 = 0; b1 = 0; b0 = 1;
Delay(100);
Duavao7447(Q0_hc,Q1_hc,Q2_hc,Q3_hc);
b3 = 0; b2 = 0; b1 = 1; b0 = 0;
Delay(100);
Duavao7447(Q0_hdv,Q1_hdv,Q2_hdv,Q3_hdv);
b3 = 0; b2 = 0; b1 = 1; b0 = 1;
Delay(100);
}
//------------------------------------------------------------------
void HienThiLEDDuoi()
{
Khoitao(EDuoi);
Duavao7447(Q0_hn,Q1_hn,Q2_hn,Q3_hn);
b3 = 0; b2 = 1; b1 = 0; b0 = 0;
Delay(100);
Duavao7447(Q0_ht,Q1_ht,Q2_ht,Q3_ht);
b3 = 0; b2 = 1; b1 = 0; b0 = 1;
Delay(100);
Duavao7447(Q0_hc,Q1_hc,Q2_hc,Q3_hc);
b3 = 0; b2 = 1; b1 = 1; b0 = 0;
Delay(100);
Duavao7447(Q0_hdv,Q1_hdv,Q2_hdv,Q3_hdv);
b3 = 0; b2 = 1; b1 = 1; b0 = 1;
Delay(100);
}
//------------------------------------------------------------------
void HienThiLEDTren()
{
Khoitao(ETren);
Duavao7447(Q0_hn,Q1_hn,Q2_hn,Q3_hn);
b3 = 1; b2 = 0; b1 = 0; b0 = 0;
Delay(100);
Duavao7447(Q0_ht,Q1_ht,Q2_ht,Q3_ht);
b3 = 1; b2 = 0; b1 = 0; b0 = 1;
Delay(100);
Duavao7447(Q0_hc,Q1_hc,Q2_hc,Q3_hc);
b3 = 1; b2 = 0; b1 = 1; b0 = 0;
Delay(100);
Duavao7447(Q0_hdv,Q1_hdv,Q2_hdv,Q3_hdv);
b3 = 1; b2 = 0; b1 = 1; b0 = 1;
Delay(100);
}
//------------------------------------------------------------------
void Delay(unsigned int time)
{
unsigned int i;
for (i=0;i<=time;i++);
}
//--------------------------------------------------------------
void Hienthi(unsigned time)
{
unsigned int i;
for (i=0;i<=time;i++)
{
void HienthiLEDHienThoi();
void HienthiLEDDuoi();
void HienthiLEDTren();
}
}
//************************************************************
Module chÝnh cña ch¬ng tr×nh
//************************************************************
#include
//Khai bao cac bien dung trong chuong trinh
unsigned char Eso, Solantran;
unsigned int E, EDuoi, ETren, BuocRem;
//Cac ham dung trong chuong trinh
void HienthiLEDHienThoi(); //Ham hien thi ra LED 7 thanh
void HienthiLEDDuoi();
void HienthiLEDTren();
void Hienthi(unsigned int time);
unsigned char QuetDuLieuSo(); //Lay du lieu tu cac cam bien o cac vi tri va luu vao bo nho
unsigned int AnhSang(unsigned char so);
void KiemTra()interrupt 1; //Ngat do bo dinh thoi 0
void Delay(int time);
//Chuong trinh chinh
void main()
{
//Cho phep ngat do bo dinh thoi 0 va ngat ngoai 0
IE=0x83; //10000011 EA=1 va ET0=1 , EX0=1
PX0=1; //Uu tien cho ngat ngoai 0
IT0=1; //Chon ngat ngoai 0 duoc kich thich boi canh
//Khoi tao bo dinh thoi 0 va bo dinh thoi 1
TMOD=0x01;//=00000001
TL0=0;
TH0=0;
//Khoi tao port de xuat/nhap
P0=0xFF;
P1=0xFF;
P3=0xFF;
//Khoi tao ADC
OE_ADC=0;
START_ALE=0;
//Khoi tao gia tri mau chuan
EDuoi=700;
ETren=1000;
BuocRem = 0; //Khoi tao rem o vi tri dong han
//Khoi tao dong co buoc
CTRL0 = 0;
CTRL1 = 0;
CTRL2 = 0;
CTRL3 = 0;
//Chay bo dinh thoi 0
TR0=1;
Solantran = 0;
while (1)
{
HienthiLEDHienThoi();
HienthiLEDDuoi();
HienthiLEDTren();
}
}
//------------------------------------------------------------------------
void KiemTra() interrupt 1 //Ngat do bo dinh thoi 0
{
unsigned char i;
TF0=0;//Xoa co tran
Solantran++;
if (Solantran > 20)
{
TR0=0; //Dung bo dinh thoi 0 lai
Solantran=0;
Eso=QuetDuLieuSo();
E=AnhSang(Eso);
if (E<EDuoi) //Mo rem
{
if (Kich == 1)
{
i = BuocRem % 4;
switch (i)
{
case 0:
CTRL0=1; CTRL1=0; CTRL2=0; CTRL3=0;
Hienthi(4);
break;
case 1:
CTRL0=0; CTRL1=1; CTRL2=0; CTRL3=0;
Hienthi(4);
break;
case 2:
CTRL0=0; CTRL1=0; CTRL2=1; CTRL3=0;
Hienthi(4);
break;
case 3:
CTRL0=0; CTRL1=0; CTRL2=0; CTRL3=1;
Hienthi(4);
break;
}
BuocRem++;
}
}
else
if (E>ETren) //Dong rem
{
if (BuocRem > 0)
{
i = BuocRem % 4;
switch (i)
{
case 0:
CTRL0=0; CTRL1=0; CTRL2=0; CTRL3=1;
Hienthi(4);
break;
case 1:
CTRL0=1; CTRL1=0; CTRL2=0; CTRL3=0;
Hienthi(4);
break;
case 2:
CTRL0=0; CTRL1=1; CTRL2=0; CTRL3=0;
Hienthi(4);
break;
case 3:
CTRL0=0; CTRL1=0; CTRL2=1; CTRL3=0;
Hienthi(4);
break;
}
BuocRem--;
}
}
TH0=0;
TL0=0;
TR0=1;//Kich hoat lai bo dinh thoi 0
}
}
//-------------------------------------------------------------------------------------------
._.
Các file đính kèm theo tài liệu này:
- V0251.doc