Luận văn Thiết kế và thi công máy chấm công

LỜI GIỚI THIỆU ˜—:–™ Khi xã hội càng phát triển thì con người ngày càng tự hoàn thiện mình hơn; đồng thời cũng có những nhu cầu cao hơn về mọi mặt; trong đó có việc Quản Lý Nhân Sự. Nắm bắt được nhu cầu đó, các nhà khoa học đã nghiên cứu và chế tạo ra Máy Chấm Công, ngày càng tốt hơn và hiệu quả hơn. Vì những tiện lợi nêu trên mà tôi đã nhận đề tài Luận Văn Tốt Nghiệp của mình là : “Thiết Kế và Thi Công Máy Chấm Công”. Một đề tài mới và đầy triển vọng. Sau nhiều tháng tìm tòi học hỏi, tôi đã thành công. Nội dung Luận Văn gồm có các phần chính như sau : · Phần I : Giới Thiệu về Máy Chấm Công . · Phần II : Giới Thiệu Riêng Về Vi Điều Khiển AT89C51 . · Phần III : Giới Thiệu Sơ Lược Về Nguyên Lý Hồng Ngoại . · Phần IV : Giới Thiệu Sơ Lược Về Các Nghi Thức Truyền Dữ Liệu . Xoáy Trọng Tâm Vào Chuẩn RS 485 và RS 232 . · Phần V : Giới Thiệu Khái Quát Về Tất Cả Các Linh Kiện Được Dùng Trong Luận Văn . · Phần VI : Giải Thích Sơ Lược Nguyên Lý Làm Việc . · Phần VII : Giải Thuật Và Lưu Đồ Chương Trình . · Phần VIII : Thi Công Lắp Ráp – Sơ Đồ Mạch In . Để có được thành công như hôm nay, tôi xin chân thành cảm ơn sự giúp đỡ hết sức nhiệt tình của thầy hướng dẫn : LÊ QUANG THUẦN và các thầy cô trong Bộ Môn cũng như trong khoa. Bên cạnh đó, tôi cũng xin cảm ơn những ý kiến đóng góp của các bạn đã giúp đỡ tôi hoàn thành Đề Tài này. Tuy nhiên, vì thời gian có hạn nên không thể tránh khỏi những thiếu sót. Rất mong nhận được sự đóng góp thêm nữa của quý thầy cô và các bạn. Xin Chân Thành Cảm Ơn Rất Nhiều ! MỤC LỤC TRA CỨU LỜI GIỚI THIỆU .Trang 01 MỤC LỤC TRA CỨU .Trang 02 PHẦN I .Trang 03 ¸ 12 PHẦN II Trang 13 ¸ 55 PHẦN III Trang 56 ¸ 66 PHẦN IV .Trang 67 ¸ 89 PHẦN V Trang 90 ¸ 94 PHẦN VI Trang 95 ¸ 101 PHẦN VII .Trang 102 ¸ 147 PHẦN VIII Trang 148 ¸ 150 KẾT LUẬN . Trang 151

doc145 trang | Chia sẻ: lvcdongnoi | Lượt xem: 2308 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Luận văn Thiết kế và thi công máy chấm công, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
cho caàu Diode treân nhöng seõ khoâng goïn vaø khoâng thaåm myõ. Vì OP-AMP caàn moät ñieän aùp cung caáp laø ± 15V neân 2 Diode Zener oån aùp ñöôïc duøng trong maïch khoâng ngoaøi muïc ñích treân. * Bieán trôû tinh chænh maøu xanh noái vaøo OP-AMP coù taùc duïng taïo aùp Reference cho hoaït ñoäng so saùnh cuûa OP-AMP. * Coøn laïi caùc ñaàu noái, Contact vaø ñeá caém khoâng coù gì ñaëc nieät. PHAÀN VI : GIAÛI THÍCH SÔ LÖÔÏC THIEÁT KEÁ SÔ ÑOÀ NGUYEÂN LYÙ I. SÔ ÑOÀ NGUYEÂN LYÙ PHAÀN CÖÙNG : 1. Caáu Truùc Maõ Vaïch Söû Duïng Trong Luaän Vaên : E 8 7 6 5 4 3 2 1 B 8 bits maõ Maõ keát thuùc Maõ baét ñaàu Hình 6.1 Sô ñoà caáu truùc Maõ Vaïch Caáu truùc cuûa maõ vaïch söû duïng trong luaän vaên goàm coù 3 vaïch maõ baét ñaàu , 3 vaïch maõ keát thuùc vaø 8 vaïch maõ chính naèm giöõa. Vôùi 8bits , ta seõ coù toång coäng 28 = 128 theû rieâng bieät khaùc nhau. Ñoä daøy cuûa moãi vaïch maõ laø 2 mm. Maõ baét ñaàu laø toå hôïp 3 vaïch : Traéng – Ñen – Ñen; maõ keát thuùc laø toå hôïp 3 vaïch : Traéng – Ñen – Traéng AÙnh saùng Hoàng Ngoaïi khi gaëp vaïch traéng seõ phaûn xaï coøn gaëp vaïch ñen seõ khoâng phaûn xaï, töông öùng ta seõ coù möùc 1 hay möùc 0. Chi tieát xin ñöôïc trình baøy ôû phaàn sau . Trong traïng thaùi nghó ( khoâng coù theû ñöa vaøo ) , thì seõ khoâng coù aùnh saùng Hoàng Ngoaïi phaûn xaï. Khi phaùt hieän vaïch traéng thì coù nghóa laø coù theû ñöa vaøo, Vi Ñieàu Khieån seõ ñoïc maõ nhö chöông trình ñaõ döôïc naïp. Chi tieát xin ñöôïc trình baøy ôû phaàn sau. 2. Caáu Truùc Boä Phaùt AÙnh Saùng Hoàng Ngoaïi vaø Thu Nhaän Tín Hieäu Hoàng Ngoaïi Phaûn Xaï : Photo-Diode PD IRR LED Baùn Laêng Kính / Phaân tia Thaáu Kính Loài Thaáu Kính Loài Hình 6.2 Caáu truùc boä thu phaùt Hoàng Ngoaïi Diode phaùt vaø Diode thu ñöôïc boû trong moät oáng Gen ñen coù ñöôøng kính trong 6 mm. OÁng naøy coù taùc duïng laøm cho aùnh saùng Hoàng Ngoaïi khoâng bò maát ra ngoaøi; ñoàng thôøi traùnh nhieãu do aùnh saùng Hoàng Ngoaïi cuûa moâi tröôøng. ÔÛ moãi ñaàu oáng gaén moät thaáu kính hoäi tuï daïng loài coù taùc duïng hoäi tuï aùnh saùng Hoàng Ngoaïi taïi moät ñieåm. Ñieàu naøy laøm giaûm kích thöôùc (ñoä daøy ) cuûa vaïch maõ. Vì vaäy, tuøy thuoäc vaøo thaáu kính toát hay xaáu maø ñoä daøy vaïch maõ seõ coù theå nhoû ñeán möùc naøo. ÔÛ ñaây do giôùi haïn thôøi gian vaø linh kieän söû duïng neân toâi chæ coù theå giaûm toái ña ñoä daøy vaïch maõ laø 1mm. Tuy nhieân, khi keùo theû vôùi toác ñoä cao thì vaïch maõ phaûi daøy 2 mm môùi ñaùp öùng ñöôïc söï thay ñoåi : Ñen Traéng. Nhöõng tia saùng phaûn xaï khi gaëp vaïch Traéng treân theû laïi phaûn xaï toaøn phaàn khi gaëp baùn laêng kính. Taïi ñaây, tia phaûn xaï ñeán töø theû seõ bò phaûn xaï vaøo ngay Diode Thu (Diode caûm quang). Diode naøy seõ nhaän aùnh saùng phaûn xaï ñoù vaø bieán ñoåi noù thaønh daïng doøng ngöôïc. Ta hoaøn toaøn coù theå xöû lyù tín hieäu daïng doøng ñieän naøy nhôø coù maïch gia coâng tín hieäu ñöôïc trình baøy chi tieát ôû phaàn sau . Thaáu kính tröôùc Diode Thu coù taùc duïng laøm taêng ñoä tuï cho aùnh saùng Hoàng Ngoaïi phaûn xaï veà. Vieäc laøm taêng ñoä tuï aùnh saùng cuõng ñoàng nghóa vôùi vieäc laøm taêng cöôøng ñoä saùng taïi tieâu ñieåm cuûa thaáu kính. Vì vaäy laøm taêng doøng ngöôïc qua Diode Thu khi coù aùnh saùng Hoàng Ngoaïi chieáu tôùi. Keát quaû laø laøm taêng ñoä nhaïy cho boä Thu Phaùt Hoàng Ngoaïi treân . 3. Maïch Thu Nhaän vaø Gia Coâng Tín Hieäu : Hình 6.3 Sô ñoà nguyeân lyù Maïch thu nhaän vaø gia coâng tín hieäu Tín hieäu quang ñöôïc thu bôûi LED THU. Khi cöôøng ñoä saùng thay ñoåi seõ laøm doøng ngöôïc chaïy qua Diode ñoåi theo, daãn ñeán aùp treân ñieän trôû 1M cuõng seõ thay ñoåi. Bieán trôû R2 coù taùc duïng taïo aùp chuaån ñeå khi aùp vaøo treân cöïc 2 cuûa OP-AMP thay ñoåi noù seõ laät aùp vaø taïo möùc aùp ra thay ñoåi quanh 2 möùc ± 12V . AÙnh saùng Hoàng Ngoaïi seõ phaûn xaï khi beà maët ñöôïc chieáu coù maøu saùng vaø ngöôïc laïi seõ khoâng phaûn xaï khi beà maët vaät ñöôïc chieáu coù maøu ñen tuyeàn. Vì theá, ta quy ñònh vaïch maøu saùng laø möùc Logic 1, vaïch maøu ñen laø möùc Logic 0. Khi khoâng nhaän ñöôïc aùnh saùng Hoàng Ngoaïi phaûn xaï thì aùp ra taïi chaân 1 cuûa OP-AMP seõ laø + 12V . Vôùi möùc aùp naøy seõ laøm Transistor C1815 daãn hoaøn toaøn (baõo hoøa saâu) vaø vì theá möùc aùp ñöa tôùi Vi Ñieàu Khieån laø 0V, öùng vôùi möùc Logic 0 theo chuaån TTL : 0V ¸ 0,8V. Ngöôïc laïi khi coù aùnh saùng Hoàng Ngoaïi phaûn xaï laøm doøng ngöôïc qua Diode Thu taêng, daãn ñeán vieäc taêng aùp treân ngaõ vaøo chaân 2 cuûa OP-AMP, laøm cho aùp ra chuyeån möùc – 12V . Khi ñoù Transistor khoâng ñöôïc kích. Vaø vì vaäy, möùc aùp tôùi Vi Ñieàu Khieån laø möùc 5V, öùng vôùi möùc Logic 1 theo chuaån TTL : 4V¸5V Caùc Diode Zener 15V vaø caùc tuï 100 mF coù taùc duïng loïc nguoàn, loïc nhieãu aùp cung caáp cho söï hoaït ñoäng cuûa OP-AMP. 4. Maïch Thu Nhaän – Xöû Lyù Tín Hieäu vaø Giao Tieáp Maùy Tính : Hình 6.4 Sô ñoà nguyeân lyù maïch xöû lyù tín hieäu vaø giao tieáp Maùy Tính Vi Ñieàu Khieån ñöôïc laäp trình ñeå kieåm tra lieân tuïc chaân 8 P1.7. Khi ngöôøi ta ñaët theû vaøo thì chaân naøy seõ leân 1 vaø baét ñaàu chu trình kieåm tra ñaàu cuoái theû vaø ñoïc maõ cuûa theû veà caát trong thanh ghi A, chuaån bò phaùt veà Maùy Tính ñeå xöû lyù vaø chaám coâng. Ngoaøi nhieäm vuï chính treân, Vi Ñieàu Khieån coøn laøm nhieäm vuï thu nhaän tín hieäu kieåm tra ñöôøng truyeàn do Maùy Tính phaùt ra vaø traû lôøi moãi khi nhaän ñöôïc. Vieäc naøy ñöôïc thöïc hieän thoâng qua chöông trình Ngaét noái tieáp ñöôïc laäp trình saún treân Vi Ñieàu Khieån, chi tieát xin ñöôïc trình baøy ôû phaàn sau. Caùc Port 0 vaø Port 2 coù nhöõng ñeá caém Data 8 bits ñöôïc gaén theâm ñeå tieän vieäc môû roäng veà sau nhö keát noái vôùi thieát bò hieån thò : LED 7 ñoaïn, LCD, v.v... hay loa baùo khi ñaët ngöôïc theû vaøo khe. Chip AT89C51 söû duïng Thaïch Anh 11.0592 MHz raát thích hôïp cho vieäc truyeàn thoâng noái tieáp baát ñoàng boä vôùi Maùy Tính. Hoaït ñoäng Reset ñöôïc thöïc hieän töï ñoäng moãi khi baät nguoàn vaø coù theå thöïc hieän baèng tay khi aán nuùt RSBUTTON ñöôïc thaáy treân sô ñoà . 5. Boä Nguoàn Ñoái Xöùng vaø Nguoàn Ñôn : Hình 6.5 Sô ñoà nguyeân lyù boä naén vaø loïc nguoàn cung caáp cho caùc maïch treân Ñieän aùp 12VAC ñoâi vôùi chaân Mass chính giöõa, ñöôïc loïc nhieãu bôûi 2 tuï 104 vaø ñöôïc naén 2 nöûa baùn kyø bôûi caàu Diode. Sau ñoù , ta loïc phaúng baèng tuï loïc coù ñieän dung lôùn : ñoä gôïn soùng cuûa aùp sau khi loïc tyû leä nghòch vôùi ñieän dung tuï loïc. Tuy nhieân, ta khoâng theå duøng tuï loïc quaù lôùn vì nhö theá thì kích thöôùc tuï cuõng taêng theo laøm cho kích thöôùc Board taêng : khoâng kinh teá vaø thaåm myõ. Vôùi tuï loïc khoaûng vaøi ngaøn mF laø vöøa ñuû ñoái vôùi Board naøy. Vì maïch caàn thieát söû duïng nhieàu möùc aùp khaùc nhau : ±15V vaø + 5V ñôn neân ta phaûi duøng IC oån aùp 78X05 ñeå laáy aùp ra + 5V cung caáp cho caùc vi maïch soá. Caùc tuï 104 phía sau IC 78X05 coù nhieäm vuï loïc phaúng vaø choáng nhieãu. D7 laø LED pilot theå traïng thaùi hoaït ñoäng cuûa Board : LED saùng khi Board hoaït ñoäng . Treân laø toaøn boä phaàn cöùng cuûa Luaän Vaên Toát Nghieäp naøy vaø nhöõng lyù giaûi cô baûn cô cheá hoaït ñoäng vaø nhieäm vuï cuûa töøng linh kieän ñöôïc duøng. Sô ñoà nguyeân lyù phaàn cöùng toång hôïp seõ ñöôïc ñính keøm theo Luaän Vaên ôû trang sau. II. SÔ LÖÔÏC HOAÏT ÑOÄNG CUÛA MAÏCH : Bình thöôøng khi khoâng coù theå vaøo khe, khe toái ñen neân khoâng coù söï cheânh aùp xaûy ra. Vì vaäy OP-AMP coù ngoõ ra laø +12V kích transistor qua ñieän trôû 2,2KW laøm con naøy vaãn baûo hoaø taïo neân möùc aùp ( 0V ) treân chaân P1.7 ( chaân soá 8) cuûa chip Vi Ñieàu Khieån AT89C51: Hình 6.7 Sô ñoà nguyeân lyù maïch chuyeån aùp ± 12V chuaån TTL Khi theû vaøo khe vaø ñöôïc keùo ñeán vaïch traéng ( vaïch traéng ñaàu tieân ñöôïc söû duïng ñeå nhaän bieát söï coù maët cuûa theû) thì aùp vaùo OP-AMP thay ñoåi so vôùi aùp chuaån ñaët treân chaân 3 neân ngoõ ra OP-AMP laät aùp töø +12V xuoáng –12V laøm cho transistor ngöng daãn; do ñoù, möùc aùp Logic vaøo chaân P1.7 laø +5V ( möùc Logic 1) . Ngay luùc ñoù, khi P1.7 thay ñoåi traïng thaùi töø 0 leân 1, chip AT89C51 baét ñaàu chu trình nhaän vaø ñoïc maõ vaïch töø söï thay ñoåi möùc aùp öùng vôùi loaïi vaïch traéng vaø ñen. Ngay laäp töùc, chip khôûi ñoäng Timer 0 cuûa mình vaø ñôïi ñeán khi möùc Logic treân chaân P1.7 trôû veà 0 laàn nöõa thì seõ ngöng Timer 0 vaø löu laïi thôøi gian vöøa qua. Ñoù laø thôøi gian quy ñònh moät vaïch ñöôïc keùo qua LED hoàng ngoaïi. Nhö vaäy, thôøi gian naøy seõ thay ñoåi tuyø theo toác ñoä keùo cuûa vaïch qua khe. Vôùi caáu truùc maõ vaïch nhö treân, khi phaùt thôøi gian delay moät vaïch thì seõ ñoïc möùc Logic ôû chaân P1.7 vaøo caùc bit cuûa thanh ghi A. Ngoaøi nhieäm vuï chính nhö treân, chip AT89C51 coøn ñöôïc laäp trình ñeå nhaän bieát loãi khi ta keùo theû khoâng ñuùng chieàu quy ñònh nhôø vaøo maõ vaïch keá tieáp traéng hay ñen : ñen laø ñuùng vaø traéng laø sai ( ngöôïc chieàu ). Töøng vaïch traéng vaø ñen treân theû ñöôïc chuyeån thaønh möùc Logic töông öùng 1 hoaëc 0 treân chaân P1.7 ñöôïc ñoïc vaøo ñaày ñu û( 8bit ) thì Chip seõ truyeàn byte maõ ñoù veà Maùy Tính thoâng qua coång COM vôùi chuaån giao tieáp RS-232. Treân Maùy Tính coù saún danh saùch vaø maõ cuûa nhaân vieân caàn quaûn lyù. Caùc nhaân vieân naøy ñöôïc caáp theû töông öùng vôùi ID ñöôïc quaûn lyù cuûa mình. Ngay khi nhaän byte maõ töø chip Vi Ñieàu Khieån AT89C51, Maùy Tính seõ laáy giôø heä thoáng cuûa mình ñeå tính thôøi ñieåm Ra/Vaøo cuûa nhaân vieân töông öùng coù ID truøng khôùp vôùi byte maõ nhaän ñöôïc. Neáu nhaän phaûi byte maõ khoâng ñöôïc quaûn lyù thì chöông trình seõ thoâng baùo loãi. Thôøi ñieåm Vaøo/Ra cuûa moãi nhaân vieân seõ ñöôïc löu laïi vaøo Maùy Tính vaø coù theå xem baát cöù luùc naøo baèng caùch Click vaøo teân cuûa nhaân vieân ñoù. Hoaït ñoäng cuûa chöông trình treân Maùy Tính : + Click vaøo bieåu töôïng (Icon) cuûa chöông trình treân Maùy Tính, nghóa laø ta ñaõ kích hoaït chöông trình, thì ngay laäp töùc Form giôùi thieäu veà ñeà taøi seõ hieän ra. Form naøy chöùa teân Ñeà Taøi Luaän Vaên Toát Nghieäp, ngaøy vaø giôø heä thoáng cuûa Maùy Tính, thoâng tin veà Giaùo Vieân höôùng daãn vaø Sinh Vieân thöïc hieän, vaø coøn coù bieåu töôïng Baùch Khoa. Click vaøo Button giöõa Form ñeå khôûi ñoäng chöông trình chính. Ñoù laø chöông trình Quaûn Lyù, Theo Doõi vaø Chaám Coâng nhaân vieân. + Form chính laø phaàn phaàn coát loõi cuûa chöông trình, laø nôi thu nhaän byte maõ töø Vi Ñieàu Khieån truyeàn veà vaø thöïc hieän vieäc chaám coâng, quaûn lyù nhaân vieân. Ta coù theå taïo keát noái, kieåm tra ñöôøng truyeàn vaø thoâng baùo loãi khi ñöôøng truyeàn coù söï coá : khoâng keát noái ñöôïc , maát lieân laïc giöõa chöøng trong khi ñang hoaït ñoäng. Neáu muoán taïo theâm nhieàu nhaân vieân trong danh saùch quaûn lyù naèm beân traùi Form, ta söû duïng nuùt leänh “Taïo Môùi”. Töông töï, ta coù theå xoùa hoaëc söûa chöõa thoâng tin cuûa nhöõng nhaân vieân ñang ñöôïc quaûn lyù. Neáu danh saùch quaù daøi hôn nhöõng gì coù theå hieån thò treân Form, ta coù theå söû duïng nuùt leänh ”Tìm Kieám” ñeå tìm vaø xem thoâng tin chi tieát veà nhaân vieân ñoù thoâng qua vieäc nhaäp ID cuûa nhaân vieân caàn tìm khi chöông trình yeâu caàu. PHAÀN VII : GIAÛI THUAÄT - LÖU ÑOÀ VAØ CHÖÔNG TRÌNH I. SÔ LÖÔÏC GIAÛI THUAÄT : Vi Ñieàu Khieån AT 89C51 thu thaäp maõ vaïch töø theû vaø chuyeån thaønh ID göûi veà Maùy Tính PC. Maùy Tính nhaän döõ lieäu qua coång COM theo chuaån giao tieáp RS 232. Chöông trình nhaän vaø xöû lyù ID treân Maùy Tính ñöôïc vieát baèng phaàn meàm laäp trình Visual Basic 6.0 cuûa haõng Microsoft. Cöù moãi giaây, chöông trình seõ hoûi moät laàn xem Boä Ñeäm Nhaän coù kyù töï haây chöa. Neáu coù thì nhaän veà, tìm vaø so saùnh ID trong danh saùch cho tröôùc; ñoàng thôøi laáy giôø heä thoáng ñeå tính thôøi ñieåm nhaän ñöôïc kyù töï ñoù. Ñoù cuõng laø thôøi ñieåm vaøo hay ra cuûa moät nhaân vieân coù theû. Neáu kyù töï nhaän veà khoâng truøng khôùp vôùi taát caû caùc ID trong danh saùch quaûn lyù thì chöông trình seõ thoâng baùo vaø seõ khoâng caäp nhaät thoâng tin môùi. Beân caïnh coâng vieäc chính vöøa neâu treân, chöông trình coøn cung caáp cho ta nhöõng thoâng tin vaø chöùc naêng khaùc. Ta coù theå theâm vaøo hay söûa chöûa moät vaøi chi tieát trong baûng Lyù Lòch cuûa töøng nhaân vieân; thaäm chí coøn coù theå xoùa boû chuùng hay xoùa boû luoân nhaân vieân ñoù trong danh saùch quaûn lyù. Ta coù theå xem Baûng Toång Keát cho taát caû caùc nhaân vieân trong danh saùch hoaëc Baûng Baùo Caùo cuûa töøng caù nhaân. Hai Baûng naøy theå hieän ñaày ñuû thôøi ñieåm vaøo ra cuûa hoï vaø tính toaùn thôøi gian laøm vieäc, coù ñi treã hay veà sôùm khoâng? Coøn ñi sôùm vaø veà treã hôn giôø laøm vieäc quy ñònh thì khoâng tính! Chöông trình coøn coù khaû naêng kieåm tra loãi ñöôøng truyeàn cho duø luùc baét ñaàu khôûi ñoäng chöông trình hay khi chöông trình ñang chaïy. Baát cöù khi naøo ñöôøng truyeàn gaëp söï coá hay xaûy ra loãi nhö : maát tín hieäu, ñöùt ñöôøng truyeàn, phaàn cöùng bò maát nguoàn cung caáp, v.v...; chöông trình ñeàu hieän caâu thoâng baùo loãi cho töøng tröôøng hôïp cuï theå . Vaø coøn nhieàu nöõa nhöõng tieän ích thaåm myõ vaø phoå bieán trong moïi chöông trình nhö khi keát noái Indicator ôû Frame Keát Noái seõ chaïy cho ñeán khi keát noái ñöôïc hoaëc nhaän ñöôïc caâu thoâng baùo : “Khoâng keát noái ñöôïc “ vaø coù theå in baûng Toång Keát ra laøm taøi lieäu tham khaûo, v.v...... . II. LÖU ÑOÀ : 1. Treân Maùy Tính : Baét ñaàu Load Form Demo Coù Click hay chöa? Load Form chính Moät giaây kieåm tra InBufferCount 1 laàn N Coù nhaän ñöôïc Maõ hay khoâng ? Y N Maõ coù naøy trong danh saùch quaûn lyù ? Baùo Loãi Y Xoùa Baûng In Xoùa Baûng Out Laáy thôøi ñieåm heä thoáng Maõ naøy nhaän ñöôïc laàn leû hay chaún ? Löu thôøi ñieåm vaøo Baûng In Löu thôøi ñieåm vaøo Baûng Out Caäp nhaät Baûng ID_date Caäp nhaät Baûng S_timework Hieån thò leân Form chính 2. Chöông Trình Chính Treân Vi Ñieàu Khieån : Baét ñaàu N P1.7 = 1? Y Khôûi ñoäng Timer 0 N P1.7 = 0 ? Y Löu laïi giaù trò TH0, TL0 vaø R5 neáu coù Goïi Delay 1 vaïch N P1.7 = 0 ? Baùo Loãi Y Goïi Delay 1 vaïch Ñoïc bit 1 Goïi Delay 1 vaïch Ñoïc bit 2 Goïi Delay 1 vaïch Ñoïc bit 3 Goïi Delay 1 vaïch Ñoïc bit 4 Goïi Delay 1 vaïch Ñoïc bit 5 Goïi Delay 1 vaïch Ñoïc bit 6 Goïi Delay 1 vaïch Ñoïc bit 7 Goïi Delay 1 vaïch Ñoïc bit 8 3. Chöông Trình Ngaét Serial Port Treân Vi Ñieàu Khieån : Coù thoâng baùo ngaét TI = 1 ? Xoùa RI Caát A Nhaäp lieäu vaøo A So saùnh xem coù phaûi kyù töï kieåm tra 11111110 B Taêng 1 Göûi traû veà Maùy Tính Laáy A Xoùa TI Thoaùt Ngaét Vôùi löu ñoà treân, ta thaáy chöông trình ngaét Port noái tieáp chæ söû duïng cho vieäc thu kyù töï töø Maùy Tính vaø kieåm tra ñöôøng truyeàn . Khi coù thoâng baùo ngaét xyû ra, chöông trình nhaûy ñeán Vector ngaét töông öùng vaø sau ñoù nhaûy ñeán chöông trình phuïc vuï ngaét . Kieåm tra xem ngaét do phaùt hay do thu ( TI = 1 hay RI = 1 ) ? Neáu ngaét do phaùt thì xoùa TI , khoâng laøm gì caû vaø thoaùt khoûi chöông trình . Neáu ngaét do thu thì kieåm tra xem kyù töï thu ñöôïc coù phaûi laø kyù töï kieåm tra ñöôøng truyeàn hay khoâng ? Neáu khoâng phaûi thì thoaùt vaø baùo loãi . Neáu ñuùng thì taêng leân 1 , caám ngaét , truyeàn kyù töï traû laïi Maùy Tính vaø thoaùt khoûi chöông trình . Sau ñaây laø maõ chöông trình cuûa caùc chöông trình coù löu ñoà treân . III. MAÕ CHÖÔNG TRÌNH : 1. Maõ Chöông Trình Treân Maùy Tính : * Form Demo ( Form môû ñaàu – giôùi thieäu chöông trình ) : Dim doc, ngang, tren, trai As Single Dim gio, phut, giay As Byte Dim ngay As Date Dim buttondown% Dim textup% Const Delta = 20 Public Sub movetextup() If Not textup Then lblani(1).Left = lblani(1).Left - Delta lblani(1).Top = lblani(1).Top - Delta textup = True End If End Sub Public Sub movetextdown() If textup Then lblani(1).Left = lblani(1).Left + Delta lblani(1).Top = lblani(1).Top + Delta textup = False End If End Sub Private Sub Form_Load() lbltitle(0).Visible = False lbltitle(1).Visible = False lbltitle(2).Visible = False lblani(0).Visible = False lblani(1).Visible = False lblgio.Visible = False lblphut.Visible = False lblgiay.Visible = False lbl1.Visible = False lbl2.Visible = False lblngay.Visible = False Top = 3475 Left = 6460 Height = 50 Width = 80 tren = 3475 trai = 6460 doc = 50 ngang = 80 Timer1.Interval = 1 End Sub Private Sub image2_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single) movetextdown End Sub Private Sub lblani_MouseDown(Index As Integer, Button As Integer, Shift As Integer, x As Single, y As Single) movetextdown End Sub Private Sub lblani_MouseMove(Index As Integer, Button As Integer, Shift As Integer, x As Single, y As Single) movetextup End Sub Private Sub lblani_MouseUp(Index As Integer, Button As Integer, Shift As Integer, x As Single, y As Single) movetextup Timer3.Enabled = True Image1.Visible = False 'Unload Me End Sub Private Sub Timer1_Timer() If doc = 5000 And ngang = 9000 Then ngay = Date lblngay.Caption = ngay gio = Hour(Time) phut = Minute(Time) giay = Second(Time) lblgio.Caption = gio lblphut.Caption = phut lblgiay.Caption = giay lbltitle(0).Visible = True lbltitle(1).Visible = True lbltitle(2).Visible = True lblani(0).Visible = True lblani(1).Visible = True lblgio.Visible = True lblphut.Visible = True lblgiay.Visible = True lblngay.Visible = True lbl1.Visible = True lbl2.Visible = True lblphut.Caption = Right("00" & Trim(CStr(phut)), 2) Timer1.Enabled = False Else doc = doc + 495 ngang = ngang + 892 tren = tren - 247.5 trai = trai - 446 Top = tren Left = trai Width = ngang Height = doc End If End Sub Private Sub Timer2_Timer() giay = giay + 1 If giay >= 60 Then giay = 0 phut = phut + 1 If phut >= 60 Then phut = 0 gio = gio + 1 If gio >= 24 Then gio = 0 End If lblgio.Caption = Right("00" & Trim(CStr(gio)), 2) End If lblphut.Caption = Right("00" & Trim(CStr(phut)), 2) End If lblgiay.Caption = Right("00" & Trim(CStr(giay)), 2) End Sub Private Sub Timer3_Timer() If doc = 50 And ngang = 80 Then Timer3.Enabled = False Unload Me Form1.Show Else doc = doc - 495 ngang = ngang - 892 tren = tren + 247.5 trai = trai + 446 Top = tren Left = trai Width = ngang Height = doc End If End Sub * Form 1 ( Form chính ) : Option Explicit Const csdl = "csdl.mdb" Dim instring As String Dim ii, traloi, k As Integer Dim i, q, delinout As Integer Dim npath, nho As String Dim s_late, s_early As Date 'Bien nho de truy xuat bang worktime Dim id_r, name_r As String Private Sub cancelcmd_Click() Select Case q Case 1 Newcmd.Enabled = True Case 2 editcmd.Enabled = True Case 3 delCmd.Enabled = True End Select q = 0 OKCmd.Visible = False cancelcmd.Visible = False IDTxt.Locked = True NameTxt.Locked = True CVTxt.Locked = True note.Visible = False End Sub ' i so record Private Sub ClosCmd_Click() End End Sub Private Sub CVTxt_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then OKCmd.SetFocus End If End Sub Private Sub delCmd_Click() q = 3 note.Caption = "Baïn coù ñoàng yù xoùa?" note.Visible = True delCmd.Enabled = False OKCmd.Visible = True cancelcmd.Visible = True cancelcmd.SetFocus End Sub Private Sub editcmd_Click() IDTxt.Locked = False NameTxt.Locked = False CVTxt.Locked = False nho = IDTxt.Text editcmd.Enabled = False OKCmd.Visible = True cancelcmd.Visible = True IDTxt.SetFocus note.Visible = True note.Caption = " Baïn coù ñoàng yù söûa chöõa ?" IDTxt.SetFocus q = 2 'sua chua End Sub Private Sub Form_Load() Dim db As Database Dim bang As Recordset Dim hang, m As Integer npath = App.Path & "\" k = 0 Set db = OpenDatabase(npath & csdl) Set bang = db.OpenRecordset("lylich") 'txtin.Text = Asc(vbbackspace) With LylichFlx .Rows = 1 .Cols = 5 .FormatString = "|^ ID |^ Hoï vaø Teân |^ Chöùc Vuï |^;" End With 'Lay record dau tien cua bang lylich If Not (bang.BOF And bang.EOF) Then bang.MoveFirst NameTxt.Text = bang.Fields("name") IDTxt.Text = bang.Fields("Id") CVTxt.Text = bang.Fields("chucvu") frten.Caption = NameTxt.Text IDTxt.Locked = True NameTxt.Locked = True CVTxt.Locked = True dienkhung_ll End If OKCmd.Visible = False cancelcmd.Visible = False note.Visible = False q = 0 bang.Close db.Close 'make_index bangIDdate BangInOut 'asc("") KhungInOut (IDTxt.Text) tongket (IDTxt.Text) End Sub Private Sub IDTxt_KeyPress(KeyAscii As Integer) If (KeyAscii = 13) Then NameTxt.SetFocus End If If Len(IDTxt.Text) >= 4 Then KeyAscii = 0 NameTxt.SetFocus End If If (KeyAscii 13) And (KeyAscii 8) And (KeyAscii 127) And (KeyAscii 27) Then If (KeyAscii 57) Then KeyAscii = 0 End If End If End Sub Private Sub INOutFlx_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single) If Button = 2 Then delinout = INOutFlx.MouseRow PopupMenu mnuinout End If End Sub Private Sub LylichFlx_Click() Dim db As Database Dim ta_s_timework As Recordset With LylichFlx If .MouseRow > 0 Then NameTxt.Text = .TextMatrix(.MouseRow, 2) CVTxt.Text = .TextMatrix(.MouseRow, 3) IDTxt.Text = .TextMatrix(.MouseRow, 1) id_r = IDTxt.Text name_r = NameTxt.Text lbten.Caption = name_r bangIDdate BangInOut KhungInOut (id_r) tongket (id_r) frten.Caption = name_r Set db = OpenDatabase(npath & csdl) Set ta_s_timework = db.OpenRecordset("s_timework") With ta_s_timework .Index = "ID1index" .Seek "=", id_r If Not .NoMatch Then tongket (id_r) End If End With ta_s_timework.Close db.Close Else .Col = .MouseCol .Sort = 1 End If End With End Sub Private Sub mnuxoa_Click() Dim db As Database Dim queIn, queOut, datework, m As String Dim timeIn, timeOut As String Dim k As Integer If INOutFlx.MouseRow >= 1 Then Set db = OpenDatabase(npath & csdl) datework = Trim(INOutFlx.TextMatrix(delinout, 1)) timeIn = (datework & " " & Trim(INOutFlx.TextMatrix(delinout, 2))) timeOut = datework & " " & Trim(INOutFlx.TextMatrix(delinout, 3)) queIn = " delete * from timework where id='" & IDTxt.Text & "' and " & " IDtime ='" & IDTxt.Text & CStr(CDate(timeIn)) & "'" db.Execute (queIn) queOut = " delete * from timework where id='" & IDTxt.Text & "' and " & " IDtime ='" & IDTxt.Text & CStr(CDate(timeOut)) & "'" db.Execute (queOut) BangInOut KhungInOut (id_r) tongket (id_r) db.Close End If End Sub Private Sub NameTxt_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then CVTxt.SetFocus End If End Sub Private Sub Newcmd_Click() NameTxt.Text = "" CVTxt.Text = "" IDTxt.Text = "" IDTxt.Locked = False NameTxt.Locked = False CVTxt.Locked = False cancelcmd.Visible = True OKCmd.Visible = True Newcmd.Enabled = False q = 1 note.Visible = True note.Caption = "Baïn coù doàng yù vôùi hay khoâng ? " IDTxt.SetFocus End Sub Private Sub nhapIDCmd_Click() Nhap_ID End Sub Private Sub OKCmd_Click() Dim db As Database Dim bang As Recordset Dim querry As String Dim k, m As Integer 'tao moi If q = 1 Then If (IsNumeric(IDTxt.Text)) And (NameTxt.Text "") And (CVTxt.Text "") Then Set db = OpenDatabase(npath & csdl) Set bang = db.OpenRecordset("lylich") bang.Index = "IDindex" IDTxt.Text = chuanID(IDTxt.Text) bang.Seek "=", IDTxt.Text If bang.NoMatch Then 'Dien vao csdl With bang .AddNew .Fields("ID") = (IDTxt.Text) .Fields("name") = NameTxt.Text .Fields("chucvu") = CVTxt.Text .Update .MoveLast i = .RecordCount End With 'Dien vao bang lylich With LylichFlx .AddItem "" & vbTab & IDTxt.Text & vbTab & NameTxt.Text & vbTab & CVTxt.Text End With cancelcmd.Visible = False OKCmd.Visible = False Newcmd.Visible = True Newcmd.Enabled = True IDTxt.Locked = True NameTxt.Locked = True CVTxt.Locked = True note.Visible = False bang.Close db.Close Else m = MsgBox("nhap lai ma so ID") IDTxt.SetFocus IDTxt.Locked = False NameTxt.Locked = False CVTxt.Locked = False End If End If End If 'Sua chua If q = 2 Then Set db = OpenDatabase(npath & csdl) Set bang = db.OpenRecordset("lylich") bang.Index = "IDindex" bang.Seek "=", nho x: If bang.NoMatch Then k = MsgBox("Khoâng tìm thaáy ñeå söûa!" + Chr(13) + "Baïn coù muoán theâm vaøo hay khoâng ?", vbOKCancel) Else With bang Dim thay As Boolean Dim j As Integer thay = False j = 1 IDTxt.Text = chuanID(IDTxt.Text) Do While (j < LylichFlx.Rows) And (Not thay) If (LylichFlx.TextMatrix(j, 1) = IDTxt.Text) And (nho IDTxt.Text) Then thay = True Else j = j + 1 End If Loop If thay Then k = MsgBox("ID naøy ñaõ ñuoc söû duïng" & Chr(13) & "Nhaäp ID khaùc ") IDTxt.Text = nho IDTxt.SetFocus Else .Edit .Fields("ID") = chuanID(IDTxt.Text) .Fields("name") = NameTxt.Text .Fields("chucvu") = CVTxt.Text .Update End If End With dienkhung_ll End If cancelcmd.Visible = False OKCmd.Visible = False editcmd.Enabled = True IDTxt.Locked = True NameTxt.Locked = True CVTxt.Locked = True note.Visible = False bang.Close db.Close End If 'xoa If q = 3 Then Set db = OpenDatabase(npath & csdl) querry = " delete * from lylich where id='" & IDTxt.Text & "'" db.Execute (querry) querry = " delete * from timework where id='" & IDTxt.Text & "'" db.Execute (querry) querry = " delete * from ID_date where id='" & IDTxt.Text & "'" db.Execute (querry) querry = " delete * from s_timework where id='" & IDTxt.Text & "'" db.Execute (querry) querry = " delete * from inout where id='" & IDTxt.Text & "'" db.Execute (querry) dienkhung_ll If LylichFlx.Rows > 2 Then KhungInOut (LylichFlx.TextMatrix(1, 1)) tongket (LylichFlx.TextMatrix(1, 1)) Else With INOutFlx .Rows = 1 .Cols = 5 .FormatString = "|^ Ngaøy |^ Thôøi ñieåm vaøo|^Thôøi ñieåm ra|^;" End With End If Set db = OpenDatabase(npath & csdl) Set bang = db.OpenRecordset("lylich") If Not (bang.BOF And bang.EOF) Then bang.MoveFirst NameTxt.Text = bang.Fields("name") IDTxt.Text = bang.Fields("ID") CVTxt.Text = bang.Fields("chucvu") Else NameTxt.Text = "" IDTxt.Text = "" CVTxt.Text = "" With LylichFlx .Rows = 1 .Cols = 5 .FormatString = "|^ ID |^ Hoï vaø Teân |^ Chöùc Vuï |^;" End With With INOutFlx .Rows = 1 .Cols = 5 .FormatString = "|^ Ngaøy |^Thôøi ñieåm vaøo|^Thôøi ñieåm ra|^;" End With frten.Caption = "" lbten.Caption = "-----" lblate.Caption = "0" lbearly.Caption = "0" End If delCmd.Enabled = True cancelcmd.Visible = False OKCmd.Visible = False note.Visible = False IDTxt.Locked = True NameTxt.Locked = True CVTxt.Locked = True note.Visible = False End If ' IDTxt.Locked = True ' NameTxt.Locked = True ' CVTxt.Locked = True 'note.Visible = False End Sub Public Sub make_index() Dim db As Database Dim td As TableDef Dim ind As Index On Error GoTo thoat Set db = OpenDatabase(npath & csdl) Set td = db.TableDefs("lylich") Set ind = td.CreateIndex("nameindex") ind.Fields.Append td.CreateField("name") td.Indexes.Append ind db.Close thoat: MsgBox ("Khoâng taïo ñöôïc chæ muïc") End Sub Public Sub dienkhung_ll() Dim db As Database Dim bang As Recordset Dim hang, m As Integer Set db = OpenDatabase(npath & csdl) Set bang = db.OpenRecordset("lylich") If Not (bang.BOF And bang.EOF) Then 'lay so record trong bang lylich bang.MoveLast i = bang.RecordCount 'Dinh kich thuoc bang lylich With LylichFlx .Rows = i + 1 .Cols = 5 .FormatString = "|^ ID |^ Hoï vaø Teân |^ Chöùc Vuï |^;" End With 'Dien ca truong vao bang lylich bang.MoveFirst hang = 0 Do Until bang.EOF hang = hang + 1 With LylichFlx .TextMatrix(hang, 1) = bang.Fields("ID") .TextMatrix(hang, 2) = bang.Fields("name") .TextMatrix(hang, 3) = bang.Fields("chucvu") End With bang.MoveNext Loop End If bang.Close db.Close End Sub Public Sub Nhap_ID() Dim db As Database Dim ta_lyl, bang As Recordset Dim numbe As String Set db = OpenDatabase(npath & csdl) Set bang = db.OpenRecordset("timework") 'numbe = InputBox("Nhap vao so ID", "Nhap ID") numbe = ID_S Set ta_lyl = db.OpenRecordset("lylich") ta_lyl.Index = "IDindex" ta_lyl.Seek "=", chuanID(numbe) If Not ta_lyl.NoMatch Then With bang .AddNew .Fields("ID") = chuanID(numbe) id_r = .Fields("ID") .Fields("time") = Now .Fields("date") = CStr(Month(Now)) & "/" & CStr(Day(Now)) & "/" & CStr(Year(Now)) .Fields("hour") = CDate(Now) .Fields("IDtime") = .Fields("ID") & CStr(.Fields("time")) .Update End With frten.Caption = ta_lyl.Fields("name") bangIDdate BangInOut KhungInOut (chuanID(numbe)) tongket (chuanID(numbe)) Else MsgBox ("Nhaân Vieân naøy khoâng coù trong Danh Saùch Quaûn Lyù !") End If bang.Close ta_lyl.Close db.Close End Sub Public Sub bangIDdate() Dim db As Database Dim ta_lyl, ta_IDdate, ta_timework As Recordset Dim id_n, key_n, querry1, querry2 As String Set db = OpenDatabase(npath & csdl) Set ta_lyl = db.OpenRecordset("lylich") If Not (ta_lyl.BOF And ta_lyl.EOF) Then ta_lyl.MoveFirst Do Until ta_lyl.EOF id_n = ta_lyl.Fields("ID") querry1 = "select * from timework where id='" & id_n & "'" Set ta_timework = db.OpenRecordset(querry1) Set ta_IDdate = db.OpenRecordset("ID_date") If Not (ta_timework.BOF And ta_timework.EOF) Then ta_timework.MoveFirst Do Until ta_timework.EOF key_n = ta_timework.Fields("ID") & ta_timework.Fields("date") ta_IDdate.Index = "keyIndex" ta_IDdate.Seek "=", key_n If ta_IDdate.NoMatch Then ta_IDdate.AddNew ta_IDdate.Fields("ID") = id_n ta_IDdate.Fields("date") = ta_timework.Fields("date") ta_IDdate.Fields("key") = id_n & ta_IDdate.Fields("date") ta_IDdate.Update End If ta_timework.MoveNext Loop End If ta_lyl.MoveNext ta_timework.Close ta_IDdate.Close Loop End If ta_lyl.Close db.Close End Sub Public Sub BangInOut() Dim ta_lyl, ta_IDdate, ta_inout, ta_timework As Recordset Dim ta_sum_t As Recordset Dim db As Database Dim tim As Date Dim querry1, querry2 As String Dim id_n, date_n, key_n, time_in As String Dim solan, i, k As Integer Dim t_late, t_early As Integer Set db = OpenDatabase(npath & csdl) Set ta_lyl = db.OpenRecordset("lylich") db.Execute ("delete * from s_timework") db.Execute ("delete * from inout") If Not (ta_lyl.BOF And ta_lyl.EOF) Then ta_lyl.MoveFirst Do Until ta_lyl.EOF id_n = ta_lyl.Fields("ID") querry1 = "select * from id_date where id='" & id_n & "' order by date" Set ta_IDdate = db.OpenRecordset(querry1) If Not (ta_IDdate.BOF And ta_IDdate.EOF) Then ta_IDdate.MoveFirst t_late = 0 t_early = 0 Do Until ta_IDdate.EOF date_n = ta_IDdate.Fields("date") querry2 = "select * from timework where id='" & id_n & "' and date='" & date_n & "' order by time" Set ta_timework = db.OpenRecordset(querry2) Set ta_inout = db.OpenRecordset("InOut") If Not (ta_timework.BOF And ta_timework.EOF) Then ta_timework.MoveLast solan = ta_timework.RecordCount i = 1 ta_timework.MoveFirst Do While (i <= solan) And (Not (ta_timework.EOF)) tim = ta_timework.Fields("time") time_in = CStr(Hour(tim)) & ":" & CStr(Minute(tim)) & ":" & CStr(Second(tim)) key_n = id_n & date_n & "#" & CStr(i) ta_inout.Index = "keyindex" ta_inout.Seek "=", key_n If ta_inout.NoMatch Then If ((i Mod 2) 0) Then ta_inout.AddNew ta_inout.Fields("ID") = id_n ta_inout.Fields("date") = date_n ta_inout.Fields("key") = key_n ta_inout.Fields("in") = time_in t_late = t_late + d_late(tim) If i = solan Then ta_inout.Fields("out") = "0" End If ta_inout.Update Else ta_inout.Index = "keyindex" ta_inout.Seek "=", id_n & date_n & "#" & CStr(i - 1) If Not ta_inout.NoMatch Then ta_inout.Edit ta_inout.Fields("out") = time_in t_early = t_early + d_early(tim) ta_inout.Update End If End If End If i = i + 1 ta_timework.MoveNext Loop End If ta_timework.Close ta_inout.Close ta_IDdate.MoveNext Loop Set ta_sum_t = db.OpenRecordset("s_timework") With ta_sum_t .AddNew .Fields("ID") = id_n .Fields("s_late") = CStr(t_late) .Fields("s_early") = CStr(t_early) .Update End With ta_sum_t.Close End If ta_lyl.MoveNext Loop End If Set ta_inout = db.OpenRecordset("inout") With ta_inout If Not (.BOF And .BOF) Then .MoveFirst Do Until .EOF If .Fields("out") = "" Then .Edit .Fields("out") = "#" .Update End If .MoveNext Loop End If End With ta_inout.Close ta_lyl.Close db.Close End Sub Public Sub KhungInOut(ID_m As String) Dim db As Database Dim ta_inout As Recordset Dim hang, m As Integer Dim querry As String Set db = OpenDatabase(npath & csdl) querry = "select * from inout where id='" & ID_m & "'" Set ta_inout = db.OpenRecordset(querry) If Not (ta_inout.BOF And ta_inout.EOF) Then 'lay so record trong bang inout ta_inout.MoveLast i = ta_inout.RecordCount With INOutFlx .Rows = i + 1 .Cols = 5 .FormatString = "|^ Ngaøy |^ Thôøi ñieåm vaøo|^Thôøi ñieåm ra|^;" End With 'Dien cac truong vao khung inout s_late = 0 s_early = 0 ta_inout.MoveFirst hang = 0 Do Until ta_inout.EOF hang = hang + 1 With INOutFlx .TextMatrix(hang, 1) = ta_inout.Fields("date") .TextMatrix(hang, 2) = ta_inout.Fields("in") On Error Resume Next .TextMatrix(hang, 3) = ta_inout.Fields("out") End With nhay1: ta_inout.MoveNext Loop Else With INOutFlx .Rows = 1 .Cols = 4 .FormatString = "|^ Ngaøy |^Thôøi ñieåm vaøo|^Thôøi ñieåm ra|^;" End With End If ta_inout.Close db.Close End Sub Private Sub SearchCmd_Click() Dim inp, s As String Dim k, k1, i, j As Integer Dim thay As Boolean Form3.Show (1) inp = id_search On Error Resume Next If isnum(inp) Then inp = chuanID(inp) With LylichFlx k = .Rows thay = False i = 1 Do Until i > k Or thay j = 1 Do Until j > 2 Or thay s = .TextMatrix(i, j) If s = inp Then thay = True IDTxt.Text = .TextMatrix(i, 1) id_r = IDTxt.Text NameTxt.Text = .TextMatrix(i, 2) CVTxt.Text = .TextMatrix(i, 3) KhungInOut (IDTxt.Text) name_r = NameTxt.Text frten.Caption = name_r lbten.Caption = name_r Dim db As Database Dim ta_s_timework As Recordset Set db = OpenDatabase(npath & csdl) Set ta_s_timework = db.OpenRecordset("s_timework") With ta_s_timework .Index = "ID1index" .Seek "=", IDTxt.Text If Not .NoMatch Then tongket (IDTxt.Text) End If End With ta_s_timework.Close db.Close Else j = j + 1 End If Loop i = i + 1 Loop If Not thay Then k = MsgBox("Khoâng Quaûn Lyù", vbOKOnly, "Thoâng baùo!!!") End If End With End If End Sub Private Sub sum_Click() Form2.Show End Sub Private Sub cmdconnect_Click() If (txttocdo "" And txttocdo "Baudrate") And (txtcong "" And txtcong "Port") Then Timer1.Enabled = True Timer3.Enabled = True Dim mystring As String Dim send, receive As Integer comport = CInt(txtcong.Text) baudrate = CInt(txttocdo.Text) mystring = "11111110" send = Str2dec(mystring) receive = Trans(Chr(send), True) If receive - send = 1 Then traloi = MsgBox("Keát Noái Thaønh Coâng", vbOKOnly + vbInformation, "Keát Noái") Timer1.Enabled = False cmdconnect.Enabled = False Timer2.Enabled = True Timer4.Enabled = True lblstatus.Caption = " Connecting .......................... " lblOK.ForeColor = &HFF0000 lblOK.Caption = " OK " Timer3.Enabled = False Else traloi = MsgBox("Loãi Ñöôøng Truyeàn ! Vui Loøng Thöû Laïi Laàn Nöõa !", vbOKOnly + vbCritical, "KEÁT NOÁI") Timer1.Enabled = False cmdconnect.SetFocus lblstatus.Caption = "Connecting .........................." lblOK.ForeColor = &HFF lblOK.Caption = "Failed" Timer3.Enabled = False End If Else If txttocdo = "Baudrate" Then txttocdo.SetFocus Else txtcong.SetFocus End If End If End Sub Private Sub cmdexit_Click() If MSComm1.PortOpen = True Then MSComm1.PortOpen = False End End Sub Private Sub Timer1_Timer() lblstatus.Caption = " Connecting .......................... " lblOK.ForeColor = &HFF lblOK.Caption = " Failed " Timer3.Enabled = False traloi = MsgBox("Loãi Ñöôøng Truyeàn ! Vui Loøng Thöû Laïi Laàn Nöõa !", vbOKOnly + vbCritical, "KEÁT NOÁI") Timer1.Enabled = False End Sub Private Sub Timer2_Timer() If MSComm1.InBufferCount > 0 Then MSComm1.InputLen = 1 txtin.Text = Asc(MSComm1.Input) ID_S = txtin.Text Nhap_ID MSComm1.InBufferCount = 0 End If End Sub Private Sub Timer3_Timer() Select Case k Case 0 lblstatus.Caption = " Connecting . " Case 1 lblstatus.Caption = " Connecting .. " Case 2 lblstatus.Caption = " Connecting ... " Case 3 lblstatus.Caption = " Connecting .... " Case 4 lblstatus.Caption = " Connecting ..... " Case 5 lblstatus.Caption = " Connecting ...... " Case 6 lblstatus.Caption = " Connecting ....... " Case 7 lblstatus.Caption = " Connecting ........ " Case 8 lblstatus.Caption = " Connecting ......... " Case 9 lblstatus.Caption = " Connecting .......... " Case 10 lblstatus.Caption = " Connecting ........... " Case 11 lblstatus.Caption = " Connecting ............ " Case 12 lblstatus.Caption = " Connecting ............. " Case 13 lblstatus.Caption = " Connecting .............. " Case 14 lblstatus.Caption = " Connecting ............... " Case 15 lblstatus.Caption = " Connecting ................ " Case 16 lblstatus.Caption = " Connecting ................. " Case 17 lblstatus.Caption = " Connecting .................. " Case 18 lblstatus.Caption = " Connecting ................... " Case 19 lblstatus.Caption = " Connecting .................... " Case 20 lblstatus.Caption = " Connecting ..................... " Case 21 lblstatus.Caption = " Connecting ...................... " Case 22 lblstatus.Caption = " Connecting ....................... " Case 23 lblstatus.Caption = " Connecting ........................ " Case 24 lblstatus.Caption = " Connecting ......................... " Case 25 lblstatus.Caption = " Connecting .......................... " k = k + 1 End Select If k < 25 Then k = k + 1 If k > 25 Then k = 0 End Sub Private Sub Timer4_Timer() Dim mystring As String Dim send, receive As Integer Timer5.Enabled = True comport = CInt(txtcong.Text) baudrate = CInt(txttocdo.Text) mystring = "11111110" send = Str2dec(mystring) receive = Trans(Chr(send), True) If receive - send = 1 Then Timer5.Enabled = False End If End Sub Private Sub Timer5_Timer() cmdconnect.Enabled = True traloi = MsgBox("Maát Ñöôøng Truyeàn. Kieåm Tra Laïi Daây Noái Hoaëc Thieát Bò !", vbOKOnly + vbCritical, "KEÁT NOÁI") lblstatus.Caption = " Connecting .......................... " lblOK.ForeColor = &H0 lblOK.Caption = " Lost!!! " Timer5.Enabled = False End Sub Public Sub tongket(ByVal s As String) Dim db As Database Dim que As String Dim ta_stimework, ta_lyl As Recordset Set db = OpenDatabase(npath & csdl) que = "select * from s_timework where id='" & s & "'" Dim h, m As Integer Set ta_stimework = db.OpenRecordset(que) With ta_stimework If Not (.BOF And .EOF) Then .MoveFirst If .Fields("s_late") < 0 Then lblate.Caption = "Khoâng ñi treã" Else h = .Fields("s_late") \ 60 m = .Fields("s_late") Mod 60 lblate.Caption = CStr(h) & " giôø " & CStr(m) & " phuùt " End If If .Fields("s_early") < 0 Then lblate.Caption = "Khoâng veà sôùm" Else h = .Fields("s_early") \ 60 m = .Fields("s_early") Mod 60 lbearly.Caption = CStr(h) & " giôø " & CStr(m) & " phuùt " End If Else lblate.Caption = "0" lbearly.Caption = "0" End If End With ta_stimework.Close que = "select * from lylich where id='" & s & "'" Set ta_lyl = db.OpenRecordset(que) If Not (ta_lyl.BOF And ta_lyl.EOF) Then ta_lyl.MoveFirst frten.Caption = ta_lyl.Fields("name") lbten.Caption = ta_lyl.Fields("name") IDTxt.Text = s NameTxt.Text = ta_lyl.Fields("name") CVTxt.Text = ta_lyl.Fields("chucvu") End If ta_lyl.Close db.Close End Sub * Form 2 ( Form Toång Keát ) : Option Explicit Dim id_r, name_r, date_r, in_r, out_r As String Dim npath, s_late, s_early As String Dim nump, numd As Integer Const csdl = "csdl.mdb" Private Sub cmdOK_Click() Unload Me End Sub Private Sub cmdprint_Click() Printer.Print "HELLO" Printer.EndDoc End Sub Private Sub Form_Load() Dim db As Database Dim ta_IDdate, ta_lyl, ta_s_timework As Recordset Dim ta_inout As Recordset Dim quer0, quer1, quer2 As String Dim i As Integer npath = App.Path & "\" Set db = OpenDatabase(npath & csdl) Set ta_lyl = db.OpenRecordset("lylich") 'Set ta_s_timework = db.OpenRecordset("s_timework") With tongflx .Cols = 8 .Rows = 1 .FormatString = "|^ ID |^Hoï vaø Teân|^Thôøi Gian( ngaøy )|^Thôøi ñieåm vaøo|^Thôøi ñieåm ra|^Toång thôøi gian ñi treã|^Toång thôøi gian veà sôùm" End With If Not (ta_lyl.BOF And ta_lyl.EOF) Then ta_lyl.MoveFirst Do Until ta_lyl.EOF id_r = ta_lyl.Fields("ID") name_r = ta_lyl.Fields("name") '1 quer0 = "select * from s_timework where id='" & id_r & "'" Set ta_s_timework = db.OpenRecordset(quer0) If Not (ta_s_timework.BOF And ta_s_timework.EOF) Then ta_s_timework.MoveFirst s_late = ta_s_timework.Fields("s_late") s_early = ta_s_timework.Fields("s_early") Else s_late = "0" s_early = "0" End If ta_s_timework.Close '1 quer1 = "select * from ID_date where id='" & id_r & "'" Set ta_IDdate = db.OpenRecordset(quer1) If Not (ta_IDdate.BOF And ta_IDdate.EOF) Then ta_IDdate.MoveFirst Do Until ta_IDdate.EOF date_r = ta_IDdate.Fields("date") quer2 = "select * from inout where id='" & id_r & "' and date='" & date_r & "'" Set ta_inout = db.OpenRecordset(quer2) If Not (ta_inout.EOF And ta_inout.BOF) Then ta_inout.MoveFirst Do Until ta_inout.EOF in_r = ta_inout.Fields("in") out_r = ta_inout.Fields("out") ' dien khung With tongflx .AddItem "" & vbTab & id_r & vbTab & name_r & vbTab & date_r & vbTab & in_r & vbTab & out_r & vbTab & s_late & vbTab & s_early & vbTab & "" End With ta_inout.MoveNext Loop ta_inout.Close Else in_r = "0" out_r = "0" 'dien vao khng With tongflx .AddItem "" & vbTab & id_r & vbTab & name_r & vbTab & date_r & vbTab & in_r & vbTab & out_r & vbTab & s_late & vbTab & s_early & vbTab & "" End With End If ta_IDdate.MoveNext Loop 'ta_lyl.MoveNext End If ta_lyl.MoveNext Loop End If ta_lyl.Close ta_IDdate.Close db.Close With tongflx .MergeCells = 3 For i = 1 To 3 .MergeCol(i) = True Next i .MergeCol(6) = True .MergeCol(7) = True End With End Sub * Form 3 ( Form Tìm Kieám ) : Option Explicit Private Sub cancelcmd_Click() id_search = "" Unload Me End Sub Private Sub OKCmd_Click() If (Len(txtiD.Text) > 0) Then id_search = (txtiD.Text) End If Unload Me End Sub Private Sub txtiD_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then OKCmd.SetFocus End If If KeyAscii = 27 Then id_search = "" Unload Me End If End Sub * Module 1 : Option Explicit Const npath = "d:\documents\nhat\" Const csdl = "csdl.mdb" Public comport As Byte Public baudrate As Integer Public ID_S, id_search As String Public Function d_late(ByVal t As Date) As Integer Dim tam, lat, k As Integer tam = 60 * CInt(Hour(t)) + CInt(Minute(t)) If (tam 420) Then '13h lat = tam - 420 '7h End If If (tam > 780) And (tam < 1020) Then lat = tam - 780 End If d_late = (lat) 'k = MsgBox(CStr(lat)) End Function Public Function d_early(ByVal t As Date) As Integer Dim tam, earl As Integer tam = 60 * CInt(Hour(t)) + CInt(Minute(t)) If (tam 420) Then earl = 660 - tam End If If (tam > 780) And (tam < 1020) Then earl = 1020 - tam End If d_early = (earl) End Function Public Function chuanID(ByVal ID As String) As String Dim i, l As Integer Dim tam As String l = Len(ID) tam = "" If (l = 1) Then For i = 1 To 4 - l tam = tam + "0" Next i chuanID = tam & ID Else chuanID = ID End If End Function Public Function isnum(ByVal s As String) As Boolean Dim l, i As Integer Dim phai As Boolean Dim c As String l = Len(s) i = 1 phai = False If s "" Then Do Until i > l Or phai c = Mid(s, i, 1) If (c >= "0") And (c <= "9") Then phai = True Else i = i + 1 End If Loop End If isnum = phai End Function Public Function Str2dec(str As String) As Integer Dim j As Byte Dim ans As Integer ans = 0 For j = 1 To 8 ans = ans + CInt(Mid(str, j, 1)) * (2 ^ (8 - j)) Next j Str2dec = ans End Function Public Function Dec2bin(dec As Integer) As String Dim ans As String Dim t(0 To 7) As String Dim j As Byte For j = 0 To 7 t(j) = dec Mod 2 ans = ans & t(j) dec = dec \ 2 Next j ans = StrReverse(ans) Dec2bin = ans End Function Public Function Trans(str As String, receive As Boolean) As Long Dim ans As Long Dim temp As String If Form1.MSComm1.PortOpen = True Then Form1.MSComm1.PortOpen = False Form1.MSComm1.InBufferCount = 0 Form1.MSComm1.OutBufferCount = 0 Form1.MSComm1.InputLen = 1 Form1.MSComm1.CommPort = comport Form1.MSComm1.Settings = CStr(baudrate) & ",N,8,1" Form1.MSComm1.PortOpen = True Form1.MSComm1.Output = str If receive = False Then Form1.MSComm1.PortOpen = False Trans = 0 Exit Function Else Do DoEvents Loop Until Form1.MSComm1.InBufferCount > 0 temp = Form1.MSComm1.Input Form1.MSComm1.InBufferCount = 0 ans = Asc(temp) 'frmmain.txtin.Text = CStr(ans) Trans = ans End If End Function Public Sub comset() Dim t As Byte Dim temp As Integer On Error GoTo errhandle t = comport temp = baudrate comport = InputBox("The Current Comport is " & CStr(t) & ". Do You Want to Change ?", "Comport Setting", "1") baudrate = InputBox("The Current Baudrate is" & CStr(temp) & "bps" & ". Do You Want to Change ?", "baudrate Setting", "9600") Exit Sub errhandle: comport = t baudrate = temp frmdemo.Hide Form1.Show End Sub 2. Maõ Chöông Trình Treân Vi Ñieàu Khieån AT89C51 : ORG 0000H LJMP MAIN ORG 000BH LJMP NGATT0 ORG 0023H LJMP THU ORG 0030H MAIN : TEST EQU 11111110B MOV SP,#59H MOV TMOD,#21H MOV IE,#00H SETB EA SETB ES SETB PS MOV SCON,#52H MOV TH1,#-3D SETB TR1 AGAIN : MOV P1,#0FFH MOV TH0,#00H MOV TL0,TH0 L1 : MOV C,P1.7 JNC L1 SETB ET0 SETB TR0 SETB P1.7 L2 : MOV C,P1.7 JC L2 CLR TR0 CLR ET0 MOV A,TH0 CPL A MOV R7,A MOV A,TL0 CPL A MOV R6,A CLR P1.0 CLR A SETB P1.7 MOV R2,#10D LCALL DELAY1V JB P1.7,ERR LCALL DELAY1V MOV C,P1.7 MOV ACC.0,C SETB P1.7 LCALL DELAY1V MOV C,P1.7 MOV ACC.1,C SETB P1.7 LCALL DELAY1V MOV C,P1.7 MOV ACC.2,C SETB P1.7 LCALL DELAY1V MOV C,P1.7 MOV ACC.3,C SETB P1.7 LCALL DELAY1V MOV C,P1.7 MOV ACC.4,C SETB P1.7 LCALL DELAY1V MOV C,P1.7 MOV ACC.5,C SETB P1.7 LCALL DELAY1V MOV C,P1.7 MOV ACC.6,C SETB P1.7 LCALL DELAY1V MOV C,P1.7 MOV ACC.7,C SJMP EXIT ERR : CPL P1.0 ACALL DELAY DJNZ R2,ERR LJMP AGAIN EXIT : CLR ES MOV SBUF,A JNB TI,$ CLR TI SETB ES CPL A MOV P0,A ACALL DELAY ACALL DELAY SETB P1.0 LJMP AGAIN NGATT0: INC R5 RETI DELAY: MOV R0,#20D DELAYS: MOV TH0,#HIGH(-50000) MOV TL0,#LOW(-50000) SETB TR0 JNB TF0,$ CLR TF0 CLR TR0 DJNZ R0,DELAYS RET DELAY1V: PUSH ACC MOV TH0,R7 MOV TL0,R6 SETB TR0 MOV A,R5 JNB TF0,$ CLR TF0 CLR TR0 CJNE A,#00H,LONDELAY1V SJMP THOAT LONDELAY1V: MOV TH0,#00H MOV TL0,TH0 SETB TR0 JNB TF0,$ CLR TF0 CLR TR0 DJNZ R5,LONDELAY1V THOAT: POP ACC RET THU : JB TI,OUT PUSH ACC MOV A,SBUF CLR RI CJNE A,#TEST,SKIP INC A CLR ES MOV SBUF,A JNB TI,$ CLR TI SETB ES SKIP : POP ACC OUT : CLR TI RETI END PHAÀN VIII : THI COÂNG LAÉP RAÙP – SÔ ÑOÀ MAÏCH IN I. CAÙC FORM CUÛA CHÖÔNG TRÌNH : 1. Form Demo – Giôùi Thieäu Chöông Trình : Hình 8.1 Form Demo 2. Form Chính : Hình 8.2 Form Chính vaø caùc nuùt leänh chöùc naêng 3. Form Toång Keát : Hình 8.3 Form Toång Keát – Load khi nuùt leänh “ Toång Keát ” ñöôïc CLICK 4. Form Tìm Kieám : Hình 8.4 Form Tìm Kieám – Load khi nuùt leänh “ Tìm Kieám ” ñöôïc CLICK II. SÔ ÑOÀ MAÏCH IN ÑÖÔÏC VEÕ BAÈNG LAYOUT ( OrCAD ) : Hình 8.5 Sô Ñoà Maïch In ñöôïc veõ töø maïch nguyeân lyù treân – Nhìn töø treân xuoáng . KEÁT LUAÄN ˜— G –™ Ñaây laø moät ñeà taøi môùi cuõng nhö khoaûng thôøi gian ít oûi maø toâi coù ñöôïc trong ñeå hoaøn thaønh Luaän Vaên Toát Nghieäp; cho neân khoâng theå khoâng maéc phaûi nhöõng thieáu soùt. Vì vaäy saûn phaåm chöa hoaøn thieän laém nhö nhöõng thieát bò cuøng loaïi treân thò tröôøng hieän nay. Tuy nhieân, thôøi gian seõ buø ñaép nhöõng thieáu soùt ñoù. Toâi tin chaéc trong töông lai neáu coù cô hoäi gaëp laïi vaán ñeà töông töï trong cuoäc soáng vaø coù nhieàu thôøi gian hôn thì saûn phaåm cuûa toâi seõ ñöôïc caûi tieán caû veà chaát löôïng, ñoä tin caäy, ñoä beàn laãn tính thaåm myõ. Toâi mong raèng quyù thaày coâ haõy thoâng caûm, nhieät tình goùp yù vaø boû qua nhöõng thieáu soùt maø trong quaù trình laøm Luaän Vaên toâi ñaõ maéc phaûi ! Hoàng Ngoaïi vaø maõ vaïch laø hai ñeà taøi öùng duïng raát roäng raõi trong thöïc teá, neáu naém baét ñöôïc nguyeân lyù laøm vieäc cuûa noù; ñoàng thôøi hieåu thaáu ñaùo veà noù seõ coù raát nhieàu höôùng phaùt trieån trong töông lai . Cuoái cuøng, moät laàn nöõa, toâi xin chaân thaønh caûm ôn söï giuùp ñôõ vaø höôùng daãn heát söùc nhieät tình cuûa thaày höôùng daãn phuï traùch toâi trong suoát thôøi gian laøm Luaän Vaên vöøa qua, Thaày LE QUANG THUAÀN . Xin chaân thaønh caûm ôn ! Sinh Vieân Thöïc Hieän ÑOà TRÍ NHÖÏT 49701036

Các file đính kèm theo tài liệu này:

  • doclv.doc
  • docHình 6.doc
  • docTITLE.doc