Đo & ổn định độ sáng phòng

Tài liệu Đo & ổn định độ sáng phòng: ... Ebook Đo & ổn định độ sáng phòng

doc29 trang | Chia sẻ: huyen82 | Lượt xem: 1628 | Lượt tải: 0download
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.L­u ®å 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 tr­ng 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:

  • docV0251.doc
Tài liệu liên quan