Hệ thống thu thập dữ liệu và điều khiển

MỤC LỤC I/ Chuyển đổi AD dùng ADS7841 A/ Sơ lược về ADS7841 1/ Giới thiệu 2/ Mô tả chân 3/ Kỹ thuật điều khiển B/ Ap dụng vào luận văn 1/ Kết nối phần cứng 2/ Phần mềm điều khiển II/ Chuyển đổi DA dùng DAC7611 A/ Sơ lược về DAC7611 1/ Giới thiệu 2/ Mô tả chân 3/ Hoạt động B/ Ap dụng vào luận văn 1/ Kết nối phần cứng 2/ Phần mềm điều khiển III/ Truyền thông nối tiếp với Visual Basic A/ Sơ lược về truyền thông nối tiếp B/ Các đặc tính của MSComm C/ Sự kiện OnComm D/ Thông báo lỗi E/ Hỏi vòng ở cổng RS-232 IV/ Màn hình tinh thể lỏng LCD A/ Chức năng các chân B/ Nguồn cung cấp và hoạt động C/ Tập lệnh điều khiển D/ Ap dụng vào luận văn 1/ Sơ đồ kết nối 2/ Phần mềm nạp cho 8951 V/ Hoạt động port nối tiếp của 8951 A/ Giới thiệu B/ Thanh ghi điều khiển port nối tiếp C/ Các chế độ hoạt động D/ Khởi động và truy xuất các thanh ghi cổng nối tiếp E/ Tốc độ baud port nối tiếp VI/ Hệ thống thu thập số liệu và điều khiển A/ Giới thiệu B/ Kết nối phần cứng và phần mềm điều khiển C/ Giao diện điều khiển 1/ Chuyển đổi AD 2/ Chuyển đổi DA 3/ Hiển thị trên LCD 4/ Các nút lệnh khác VII/ Các hộp điều khiển ActiveX A/ Hộp điều khiển chuyển đổi AD B/ Hộp điều khiển chuyển đổi DA C/ Hộp điều khiển LCD

doc103 trang | Chia sẻ: banmai | Ngày: 27/02/2013 | Lượt xem: 1514 | Lượt tải: 1download
Bạn đang xem nội dung tài liệu Hệ thống thu thập dữ liệu và điều khiển, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Vieäc phaùt ñi ñöôïc khôûi ñoäng baèng baát cöù leänh naøo ghi döõ lieäu vaøo SBUF. Döõ lieäu ñöôïc dòch ra ngoaøi qua ñöôøng RXD (P3.0) vôùi caùc xung nhòp ñöôïc göûi ra ñöôøng TXD (P3.1). Moãi bit phaùt ñi hôïp leä (treân RXD) trong 1 chu kì maùy. Trong moãi chu kì maùy, tín hieäu xung nhòp xuoáng thaáp ôû S3P1 vaø trôû veà möùc cao ôû S6P1. Vieäc thu ñöôïc khôûi ñoäng khi bit cho pheùp boä thu (REN) laø 1 vaø bit ngaét thu (RI) laø 0. Qui taéc toång quaùt laø ñaët REN khi baét ñaàu chöông trình ñeã khôûi ñoäng port noái tieáp, roài xoùa RI ñeã baét ñaàu hoaït ñoäng nhaäp döõ lieäu. Khi RI bò xoùa, caùc xung nhòp ñöôïc ñöa ra ñöôøng TXD, baét ñaàu chu kì maùy keá tieáp, vaø döõ lieäu theo xung nhòp ôû ñöôøng RXD. Laáy xung nhòp cho döõ lieäu vaøo port noái tieápxaûy ra ôû caïch döông cuûa TXD. Moät chu kì maùy S1 S2 S3 S4 S5 S6 P1 P2 P1 P2 P1 P2 P1 P2 P1 P2 P1 P2 OSC ALE Döõ Lieäu Clock Dòch ALE Data D0 D1 D2 D3 D4 D5 D6 D7 Clock Dòch (TXD) Giaûn ñoà thôøi gian port noái tieáp phaùt ôû cheá ñoä 0 Vieäc thu ñöôïc khôûi ñoäng khibit cho pheùp boä thu (REN) laø 1 vaø bit ngaét thu (RI) laø 0. Qui taéc toång quaùt laø ñaët REN khi baét ñaàu chöông trình ñeã khôûi ñoäng port noái tieáp, roài xoùa RI ñeã baét ñaàu hoaït ñoäng nhaäp döõ lieäu. Khi RI bò xoùa caùc xung nhòp ñöôïc ñöa ra ñöôøng TXD, baét ñaàu chu kì maùy keá tieáp , vaø döõ lieäu theo xung nhòp ôû ñöôøng RXD. Laáy xung nhòp cho döõ lieäu vaøo port noái tieápxaûy ra ôû caïnh döông cuûa RXD. Moät chu kì maùy ALE Data Nhaäp D0 D1 D2 D3 D4 D5 D6 D7 Clock Dòch (TXD) Giaûn ñoà thôøi gian port noái tieáp thu ôû cheá ñoä 0 Moät öùng duïng cuûa cheá ñoä thanh ghi dòch laø môû roäng khaû naêng cuûa 8951. IC thanh ghi dòch noái tieáp ra song song coù theå noái vaøo caùc ñöôøng TXD vaø RXD cuûa 8951 ñeã cung caáp theâm 8 ñöôøng ra. Coù theå noái xaâu chuoãi theâm caùc thanh ghi dòch ñeã môû roäng theâm. Theâm 8 ngoõ ra Clock Thanh ghi Döõ lieäu dòch 8951 TXD (P3.1) RXD (P3.0) Cheá ñoä thanh ghi dòch cuûa port noái tieáp b/ UART 8 bit vôùi toác ñoä baud thay ñoåi ñöôïc (cheá ñoä1): ÔÛ cheá ñoä 1, port noái tieáp cuûa 8951 laøm vieäc nhö 1 UART 8 bit vôùi toác ñoä baud thay ñoåi ñöôïc. Moät UART (boä thu phaùt baát ñoàng boä vaïn naêng) laø moät duïng cuï thu vaø phaùt döõ lieäu noái tieáp vôùi moãi kí töï döõ lieäu ñi tröôùc laø bit start ôû möùc thaáp vaø theo sau laø bit stop ôû möùc cao. Ñoâi khi xen theâm bit kieåm tra chaün leõ giöõa bit döõ lieäu cuoái cuøng vaø bit stop. Hoaït ñoäng chuû yeáu cuûa UART laø chuyeån ñoåi song song sang noái tieáp vôùi döõ lieäu xuaát vaø chuyeån ñoåi noái tieáp sang song song ñoái vôùi döõ lieäu nhaäp. ÔÛ cheá ñoä 1, 10 bit ñöôïc phaùt treân TXD hoaëc thu treân RXD. Nhöõng bit ñoù laø: 1 bit start (luoân luoân laø 0), 8 bit döõ lieäu (LSB ñaàu tieân) vaø 1 bit stop (luoân luoân laø 1). Vôùi hoaït ñoäng thu, bit stop ñöôïc ñöa vaøo RB8 trong SCON. Trong 8951 toác ñoä baud ñöôïc ñaët baèng toác ñoä traøn cuûa timer 1. Taïo xung nhòp vaø ñoàng boä hoùa caùc thanh ghi dòch cuûa port noái tieáp trong caùc cheá ñoä 1, 2 vaø 3 ñöôïc thieát laäp baèng boä ñeám 4 bit chia cho 16, ngoõ ra laø xung nhòp toác ñoä baud. Ngoõ vaøo cuûa boä ñeám naøy ñöôïc choïn qua phaàn meàm : 16 16 * toác ñoä baud Xung nhòp toác ñoä baud Thanh ghi dòch port noái tieáp Taïo xung nhòp port noái tieáp Truyeàn döõ lieäu (phaùt ñuôïc khôûi ñoäng baèng caùch ghi vaøo SBUF, nhöng vaãn chöa thaät söï chaïy cho ñeán khi söï thay theá keá tieáp cuûa boä ñeám chia cho 16 cung caáp toác ñoä baud coång noái tieáp. Döõ lieäu ñöôïc dòch ra ngoaøi treân ñöôøng TXD baét ñaàu laø bit start, theo sau laø 8 bit döõ lieäu vaø sau cuøng laø bit stop. Ñoä roäng theo thôøi gian cuûa moãi bit laø ngòch ñaûo cuûa toác ñoä baud ñuôïc laäp trình trong timer. Côø ngaét phaùt (TI) ñöôïc ñaët leân 1 khi xuaát hieän bit stop treân TXD. 1/ toác ñoä baud TXD Start bit D0 D1 D2 D3 D4 D5 D6 D7 Bit stop TI (SCON.1) Ngaét phaùt Ñaët côø TI baèng port noái tieáp Vieäc thu döõ lieäu ñöôïc khôûi ñoäng baèng moät chuyeån traïng thaùi töø 1 xuoáng 0 treân RXD. Boä ñeám 16 töùc thôøi ñöôïc xoùa ñeã ñoàng boä soá ñeám vôùi luoàng bit ñeán. Luoàng bit ñeán ñuôïc laáy maãu giöõa 16 laàn ñeám. Boä thu seõ phaùt hieän ñuôïc bit start sai baèng caùch yeâu caàu traïng thaùi 0 ôû bit start ôû laàn ñeám thöù 8 sau khi coù chuyeån traïng thaùi töø 1 xuoáng 0 ñaàu tieân. Neáu ñieàu naøy khoâng xaûy ra , ngöôøi ta giaû söû laø boä thu ñuôïc kích bôûi nhieãu chöù khoâng phaûi do moät kí töï hôïp leä. Boä thu ñuôïc reset vaø quay veà traïng thaùi nghó (idle), tìm kieám (ñôïi) chuyeån traïng thaùi töø 1 xuoáng 0 keá. Giaû söû ñaõ phaùt hieän ñöôïc bit start hôïp leä, thì tieáp tuïc thu kí töï. Bit start ñöôïc boû qua vaø 8 bit döõ lieäu ñöôïc ñöa vaøo thanh ghi dòch coång noái tieáp theo xung nhòp. Khi ñaõ coù ñöôïc taát caû 8 bit, ñieàu sau ñaây seõ xaûy ra: 1/ Bit thöù 9 (bit stop) ñöôïc choát vaøo RB8 trong SCON. 2/ SBUF ñöôïc naïp vôùi 8 bit döõ lieäu 3/ Côø ngaét boä thu (RI) ñöôïc ñaët leân 1 Tuy nhieân, nhöõng ñieàu naøy chæ xaûy ra neáu ñaõ coù nhöõng ñieàu kieän sau : 1/ RI = 0 2/ SM2 = 1 vaø bit stop thu ñöôïc laø 1, hoaëc SM2 = 0. Ñoøi hoûi RI=0 ñeã baûo ñaûm laø phaàn meàm ñaõ ñoïc kí töï tröôùc (vaø RI ñöôïc xoùa). Ñieàu kieän thöù hai hôi phöùc taïp nhöng chæ aùp duïng trong cheá ñoä truyeàn thoâng ña xöû lí. Ñieàu ñoù haøm yù laø khoâng ñaët RI leân 1trong cheá ñoä truyeàn thoâng ña xöû lí khi bit döõ lieäu thöù 9 laø 0. c/ UART 9 bit vôùi toác ñoä baud coá ñònh (cheá ñoä 2): Khi SM1 = 1 vaø SM0 = 0, coång noái tieáp laøm vieäc ôû cheá ñoä 2 , nhö 1 UART 9 bit coù toác ñoä baud coá ñònh, 11 bit seõ ñöôïc phaùt hoaëc thu : 1 bit start, 8 bit döõ lieäu, bit döõ lieäu thöù 9 coù theå laäp trình ñöôïc vaø 1 bit stop. Khi phaùt bit thöù 9 laø baát cöù gì ñaõ ñöôïc ñöa vaøo TB8 trong SCON (coù theå laø bit parity). Khi thu, bit thöù 9 thu ñöôïc seõ ôû trong RB8. Toác ñoä baud ôû cheá ñoä 2 laø 1/32 hoaëc 1/16 taàn soá dao ñoäng treân chip. d/ UART 9 bit vôùi toác ñoä baud thay ñoåi ñöôïc Cheá ñoä naøy gioáng nhö cheá ñoä 2 ngoaïi tröø toác ñoä baud coù theå laäp trình ñöôïc vaø ñöôïc cung caáp bôûi timer. Thaät ra caùc cheá ñoä 1, 2 vaø 3 raát gioáng nhau. Caùc khaùc bieät laø ôû toác ñoä baud (coá ñònh trong cheá ñoä 2, thay ñoåi trong caùc cheá ñoä 1 vaø 3) vaø ôû soá bit döõ lieäu (8 trong cheá ñoä 1, 9 trong caùc cheá ñoä 2 vaø 3). D/ Khôûi ñoäng vaø truy xuaát caùc thanh ghi coång noái tieáp: a/ Cho pheùp thu: Bit cho pheùp boä thu (REN) phaûi ñöôïc ñaët leân 1 baèng phaàn meàm ñeã cho pheùp thu caùc kí töï. Thoâng thöôøng thöïc hieän vieäc naøy ôû ñaàu chöông trình khi khôûi ñoäng coång noái tieáp, timer,...Coù theå thöïc hieän vieäc naøy theo hai caùch. Leänh: SETB REN Seõ ñaët REN leân 1, hoaëc leänh: MOV SCON,#xxx1xxxxB Seõ ñaët REN leân 1 vaø ñaët hoaëc xoùa caùc bit khaùc trong SCON khi caàn (caùc x phaûi laø 0 hoaëc 1) ñeã ñaët cheá ñoä laøm vieäc. b/ Bit döõ lieäu thöù 9: Bit döõ lieäu thöù 9 caàn phaùt trong cheá ñoä 2 vaø 3 phaûi ñöôïc naïp vaøo TB8 baèng phaàn meàm. Bit döõ lieäu thöù 9 thu ñöôïc ñaët ôû RB8. Phaàn meàm coù theå caàn hoaëc khoâng caàn bit döõ lieäu thöù 9, phuï thuoäc vaøo ñaëc tính kyõ thuaät cuûa thieát bò noái tieáp söû duïng. (Bit döõ lieäu thöù 9 cuõng ñoùng moät vai troø quan troïng trong truyeàn thoâng ña xöû lí). c/ Theâm 1 bit parity: Thöôøng söû duïng bit döõ lieäu thöù 9 ñeã theâm parity vaøo kí töï. Nhö ñaõ xeùt trong caùc chöông tröôùc, bit P trong töø traïng thaùi chöông trình (PSW) ñöôïc ñaët leân 1 hoaëc bò xoùa moãi chu kì maùy ñeã thieát laäp kieåm tra chaün vôùi 8 bit trong thanh ghi tích luõy. Ví duï, neáu truyeàn thoâng caàn 8 bit döõ lieäu coäng theâm kieåm tra chaün, coù theå söû duïng caùc leänh sau ñeã phaùt 8 bit trong thanh ghi tích luõy vôùi kieåm tra chaün leû vaøo bit thöù 9 : MOV C,P ; Ñaët parity chaün vaøo TB8 MOV TB8,C ; noù trôû thaønh bit döõ lieäu thöù 9 MOV SBUF,A ; Chuyeån 8 bit töø ACC vaøo SBUF Neáu caàn parity leõ thì söûa caùc leänh laïi nhö sau: MOV C,P ; Ñaët parity chaün vaøo TB8 CPL C ; Ñoåi sang parity leõ MOV TB8,C ; noù trôû thaønh bit döõ lieäu thöù 9 MOV SBUF,A ; Chuyeån 8 bit töø ACC vaøo SBUF Dó nhieân, vieäc söû duïng parity khoâng bò giôùi haïn ôû caùc cheá ñoä 2 vaø 3. ÔÛ cheá ñoä 1, 8 bit döõ lieäu ñöôïc truyeàn ñi coù theå bao goàm 7 bit döõ lieäu coäng theâm bit parity. Ñeã truyeàn maõ ASCII 7 bit vôùi parity chaün ôû bit 8, coù theå söû duïng caùc leänh sau: CLR ACC.7 ;Baûo ñaûm MSB ñöôïc xoùa MOV C,P ;parity chaün ôû trong P MOV ACC.7,C ;Ñaët parity chaün vaøo MSB MOV SBUF,A ;göûi kí töï ñi ;7 bit döõ lieäu coäng parity chaün d/ Caùc côø ngaét: Hai côø ngaét thu vaø phaùt (RI vaø TI) trong SCON ñoùng moät vai troø quan troïng trong truyeàn thoâng noái tieáp duøng 8951. Caû hai bit naøy ñöôïc ñaët leân 1 baèng phaàn cöùng, nhöng phaûi ñöôïc xoùa baèng phaàn meàm. Ví duï, thöôøng RI ñöôïc ñaët leân 1 khi keát thuùc vieäc thu kí töï vaø baùo boä ñeäm thu traøn. Ñieàu kieän naøy coù theå ñöôïc kieåm tra baèng phaàn meàm hoaëc coù theå ñöôïc laäp trình ñeã gaây ra moät ngaét. Neáu phaàn meàm muoán nhaäp moät kí töï töø thieát bò ñöôïc noái vaøo coång noái tieáp (coù theå laø thieát bò ñaàu cuoái hieån thò video), noù phaûi ñôïi cho ñeán khi RI ñöôïc ñaët leân 1, roài xoùa RI vaø ñoïc kí töï töø SBUF. Chöông trình nhö sau: WAIT: JNB RI,WAIT ;Kieåm tra RI cho ñeán khi noù baèng 1 CLR RI ;Xoùa RI MOV A,SBUF ;Ñoïc kí töï TI ñöôïc ñaët leân 1 ôû cuoái luùc phaùt kí töï vaø baùo boä ñeäm phaùt troáng. Neáu phaàn meàm muoán göûi moät kí töï ñeán 1 thieát bò ñöôïc noái vaøo coång noái tieáp, tröôùc heát noù phaûi kieåm tra xem coånh noái tieáp saün saøng chöa. Noùi caùch khaùc, neáu kí töï tröôùc ñaõ ñöôïc göûi ñi, ñôïi cho ñeán khi vieäc truyeàn döõ lieäuhoaøn taát tröôùc khi göûi kí töï keá. Caùc leänh sau seõ truyeàn kí töï trong thanh ghi tích luõy: WAIT: JNB TI,WAIT ;Kieåmtra TI cho ñeán khi noù baèng1 CLR TI ;Xoùa TI MOV SBUF,A ;Göûi kí töï ñi Caùc ñoaïn chöông trình treân laø moät phaàn cuûa caùc haøm nhaäp vaø xuaát kí töï chuaån. E/ Toác ñoä baud port noái tieáp: Nhö ñaõ noùi, toác ñoä baud coá ñònh ôû caùc cheá ñoä 0 vaø 2. Trong cheá ñoä 0 noù luoân luoân laø taàn soá dao ñoäng treân chip ñöôïc chia cho 12. Thoâng thöôøng thaïch anh aán ñònh taàn soá dao ñoäng treân chip cuûa 8951, nhöng cuõng coù theå söû duïng nguoàn xng nhòp khaùc. Giaû söû vôùi taàn soá dao ñoäng danh ñònh laø 12 MHz, thì toác ñoä baud cheá ñoä 0 laø 1 MHz. :12 dao ñoäng xung nhòp treân chip toác ñoä baud a/ cheá ñoä 0 :64 dao ñoäng SMOD=0 xung nhòp :32 treân chip SMOD=1 toác ñoä baud b/ cheá ñoä 2 :16 :32 dao ñoäng SMOD=0 xung nhòp treân chip SMOD=1 toác ñoä baud c/ cheá ñoä 1 vaø 3 Caùc ngoàn taïo xung nhòp cho port noái tieáp Maëc nhieân sau khi reset heä thoáng, toác ñoä baud cheá ñoä 2 laø taàn soá dao ñoäng chia cho 64. Toác ñoä baud cuõng bò aûnh höôûng bôûi moät bit trong thanh ghi ñieàu khieån nguoàn cung caáp (PCON). Bit 7 cuûa PCON laø bit SMOD. Ñaët bit SMOD leân 1 laøm gaáp ñoâi toác ñoä baud trong caùc cheá ñoä 1, 2 vaø 3. Trong cheá ñoä 2, toác ñoä baud coù theå bò gaáp ñoâi töø giaù trò maëc ñònh cuûa 1/64 taàn soá dao ñoäng (SMOD = 0) ñeán 1/32 taàn soá dao ñoäng (SMOD=1). Vì PCON khoâng ñöôïc ñònh ñòa chæ theo bit, neân ñeã ñaët bit SMOD leân 1 caàn phaûi theo caùc leänh sau: MOV A,PCON ;Laáy giaù trò hieän thôøi cuûa PCON SETB ACC.7 ;Ñaët bit 7 (SMOD) leân1 MOV PCON,A ;Ghi giaù trò ngöôïc veà PCON Caùc toác ñoä baud trong caùc cheá ñoä 1 vaø 3 ñöôïc xaùc ñònh baèng toác ñoä traøn cuûa timer1. Vì timer hoaït ñoäng ôû taàn soá töông ñoái cao, traøn timer ñöôïc chia theâm cho 32 (16 neáu SMOD = 1) tröôùc khi cung caáp xung nhòp toác ñoä baud cho port noái tieáp. Söû duïng Timer 1 laøm xung nhòp toác ñoä baud: Xeùt 8951, caùch thoâng duïng ñeã taïo toác ñoä baud laø khôûi ñoäng TMOD cho cheá ñoä 8 bit töï ñoäng naïp laïi (cheá ñoä 2) vaø ñaët giaù trò naïp laïi ñuùng vaøo TH1 ñeã cho toác ñoä traøn ñuùng vôùi toác ñoä baud. TMOD ñöôïc khôûi ñoäng nhö sau: MOV TMOD,#0010xxxxB Caùc x laø caùc bit 1 hoaëc 0 caàn cho timer Cuõng coù theå ñaït ñöôïc toác ñoä baud thaáp baèng caùch söû duïng timer cheá ñoä 1 vôùi TMOD = 0001xxxxB. Tuy nhieân toán theâm phaàn meàm vì caùc thanh ghi TH1/ TL1 phaûi ñöôïc khôûi ñoäng laïi sau moãi laàn traøn. Vieäc naøy seõ ñöôïc thöïc hieän trong chöông trình phuïc vuï ngaét. Moät choïn löïa khaùc laø caáp xung nhòp cho timer 1 töø ngoaøi duøng T1 (P3.5). Vaø luoân luoân toác ñoä baud laø toác ñoä traøn cuûa timer 1 chia cho 32 (hoaëc cho 16 neáu SMOD=1) Coâng thöùc toång quaùt ñeã xaùc ñònh toác ñoä baud trong caùc cheá ñoä 1 vaø 3 laø: Toác ñoä baud = Toác ñoä traøn cuûa Timer 1 : 32 Ví duï, muoán laøm vieäc vôùi toác ñoä baud laø 1200 baud, thì toác ñoä traøn cuûa timer 1 phaûi laø: 1200 * 32 = 38.4KHz Neáu duøng thaïch anh 12 MHz, Timer 1 ñöôïc cung caáp xung nhòp 1MHz hay 1000KHz. Vì toác ñoä traøn cuûa Timer 1 laø 38.4 KHz vaø Timer 1 ñöôïc caáp xung nhòp 1000KHz , thì caàn traøn sau 1000/38.4 = 26.04 xung nhòp (laøm troøn laø 26). Vì timer ñeám leân vaø traøn xaûy ra khi coù söï thay ñoåi töø FFH xuoáng 00H ôû soá ñeám. Nhö vaäy giaù trò ñuùng caàn naïp vaøo TH1 laø -26 . Caùch deã daøng nhaát ñeã ñaët giaù trò naïp vaøo TH1 laø: MOV TH1,#-26 Trình hôïp dòch seõ thöïc hieän chuyeån ñoåi caàn thieát. Trong tröôøng hôïp naøy –26 ñöôïc chuyeån thaønh 0E6H. Nhö vaäy leänh treân hoaøn toaøn gioáng vôùi leänh : MOV TH1,#0E6H Do vieäc laøm troøn neân coù sai soá trong toác ñoä baud. Toång quaùt thì cho pheùp dung sai 5% trong truyeàn thoâng baát ñoàng boä (start/stop). Coù theå coù ñöôïc toác ñoä baud chính xaùc neáu duøng thaïch anh 11.059MHz. Baûng sau ñaây toùm taét caùc giaù trò naïp laïi cho caùc toác ñoä baud thoâng duïng nhaát, duøng thaïch anh 12 MHz hoaëc thaïch anh 11.059MHz: Toác ño Taàn soá SMOD Giaù trò naïp laïi Toác ñoä Sai soá Baud thaïch anh vaøo TH1 baud thaät 9600 12.000MHz 1 -7(F9H) 8923 7% 2400 12.000MHz 0 -13(F3H) 2404 0.16% 1200 12.000MHz 0 -26(E6H) 1202 0.16% 19200 11.059MHz 1 -3(FDH) 19200 0 9600 11.059MHz 0 -3(FDH) 9600 0 2400 11.059MHz 0 -12(F4H) 2400 0 1200 11.059MHz 0 -24(E8H) 1200 0 Baûng toùm taét toác ñoä baud HEÄ THOÁNG THU THAÄP SOÁ LIEÄU VAØ ÑIEÀU KHIEÅN A/ GIÔÙI THIEÄU: Ñeà taøi thöïc hieän trong luaän vaên naøy laø “Thieát keá heä thoáng thu thaäp döõ lieäu vaø ñieàu khieån”, döõ lieäu ôû ñaây laø caùc soá lieäu ñöôïc laáy töø caùc keânh 0 ñeán keânh 3 vaø ñöa veà maùy tính, caùc döõ lieäu naøy seõ ñöôïc caát vaøo trong moät File ôû daïng baûng tính cuûa Excel. Ñieàu khieån ôû ñaây chính laø ñieàu khieån ñieän aùp ngoõ ra cuûa boä bieán ñoåi DA. Thieát bò hieån thò söû duïng trong ñeà taøi naøy laø maøn hình tinh theå loûng (LCD), vaø baèng giao dieän treân maùy tính. Ñeã tieän theo doõi ta chia luaän vaên laøm hai phaàn : Phaàn cöùng vaø giao dieän ñieàu khieån. Phaàn cöùng ñöôïc thieát keá bao goàm caùc IC chính sau : IC chuyeån ñoåi AD (ADS7841),IC chuyeån ñoåi DA (DAC7611), thieát bò hieån thò baèng maøn hình tinh theå loûng (LCD) vaø vi ñieàu khieån 8951, ñi ñoâi vôùi phaàn cöùng naøy laø chöông trình vieát cho vi ñieàu khieån 8951. Giao dieän ñieàu khieån cho heä thoáng thu thaäp döõ lieäu naøy ñöôïc vieát baèng ngoân ngöõ Visual Basic. Trong phaàn meàm naøy ta söû duïng hoäp coâng cuï MSComm ñeã truyeàn thoâng noái tieáp vôùi vi ñieàu khieån 8951, hoäp coâng cuï MSChart ñeã veõ caùc soá lieäu laáy töø caùc keânh döõ lieäu cuûa boä bieán ñoåi AD. Ngoaøi ra ta coøn söû duïng khaû naêng nhuùng döõ lieäu giöõa Visual Basic vôùi Microsoft Excel ñeã taïo File döõ lieäu ôû daïng baûng tính Excel. Bieán ñoåi AD SÔ ÑOÀ KHOÁI HEÄ THOÁNG Vi xöû lí 8951 Maùy Tính Bieán ñoåi DA RS232 Com LCD B/ KEÁT NOÁI PHAÀN CÖÙNG VAØ PHAÀN MEÀM ÑIEÀU KHIEÅN GIAÛI THUAÄT ÑIEÀU KHIEÅN CHÍNH LCALL KHAIBAOPORT LCALL NUTNHAN A = 2 ? A = 1 ? LCALL THU Y (Bieán ñoåi DA) LCALL THU B A N LCALL THU LCALL DAC Y (Bieán ñoåi AD) LCALL THU R1 A N LCALL ADC LCALL PHAT Laëp (R1) laàn A B LCALL PHAT A = 4 ? Y (Choïn Mode cho bieán ñoåi AD) LCALL THU 20H A LCALL LCD10 N A = 5 ? Y (Xuaát leänh cho LCD) LCALL THU LCALL THU LCALL LCD00 N A = 3 ? Y (Xuaát kí töï ra LCD) N GIAÛI THUAÄT CHÖÔNG TRÌNH CON DAC A B STACK A SWAP A SETB LD CLR CS SDI C A STACK RLC A Laëp 8 laàn CLR CLK SETB CLK CLR LD RLC A SDI C Laëp SETB CS 4 laàn RET CLR CLK SETB CLK GIAÛI THUAÄT CHÖÔNG TRÌNH CON ADC A 20H RLC A DIN C CLR CS Taïo xung DCLK Taïo xung DCLK C DOUT RLC A ANL A,#0FH B A Taïo xung DCLK SETB CS RET Taïo xung DCLK C DOUT RLC A Laëp 8 Laëp 8 laàn laàn Laëp 3 laàn Laëp 4 Laàn THU VAØ PHAÙT PORT NOÁI TIEÁP THU PHAT TI = 1 ? CLR TI SBUF A RET RI = 1 ? CLR RI A SBUF RET N N Y Y HIEÅN THÒ TREÂN LCD LCD00 LCD10 CLR E SETB RS CLR W/R P0 A SETB E CLR E RET P0 A CLR E CLR RS CLR W/R SETB E CLR E RET NUTNHAN A #0 P2.0 = 0 ? P2.1 = 0 ? N N DELAY 100ms Y Y DELAY 100ms P2.1 = 0 ? P2.0 = 0 ? N N P2.1 = 1 ? P2.0 = 1 ? CLR C Y N N SETB C RLC C Laëp 2 laàn A = 2 ? A = 1 ? A = 0 ? N N N Y Y Y 20H #228 20H #164 20H #148 20H #211 RET Chöông trình naïp cho Vi xöû lí 8951 ORG 0000H LJMP START ORG 000BH LJMP ISRTIMER0 ORG 0030H MAIN: LCALL NUTNHAN LCALL KHAIBAOPORT START: LCALL THU CJNE A,#1,ADMAIN LCALL THU MOV B,A LCALL THU LCALL DAC SJMP START ADMAIN: CJNE A,#2,MODEAD LCALL THU MOV R1,A ADMAIN3:LCALL ADC LCALL PHAT MOV A,B LCALL PHAT DJNZ R1,ADMAIN3 SJMP START MODEAD: CJNE A,#3,LCDM00 LCALL THU MOV 20H,A SJMP START LCDM00: CJNE A,#4,LCDM10 LCALL THU LCALL LCD00 SJMP START LCDM10: CJNE A,#5,START LCALL THU LCALL LCD10 SJMP START ;******************************************************** ;***********NGAÉT TIMER0 TAÏO XUNG 10Hz**************** ISRTIMER0: CLR TR0 MOV TH0,#HIGH(-50000) MOV TL0,#LOW(-50000) SETB TR0 CPL P2.4 RETI ;********************************************************* ;**THÖÏC HIEÄN LEÄNH CHO LCD COÙ DÖÕ LIEÄU CHÖÙA TRONG A** LCD00 MOV P0,A CLR P2.5 CLR P2.7 CLR P2.6 SETB P2.5 CLR P2.5 RET ;********************************************************* ;**********HIEÅN THÒ TREÂN LCD KÍ TÖÏ CHÖÙA TRONG A******* LCD10: MOV P0,A CLR P2.5 SETB P2.7 CLR P2.6 SETB P2.5 CLR P2.5 RET ;********************************************************* ;****CHOÏN KEÂNH CHO ADS7841 KHI KHÔÛI ÑOÄNG VI XÖÛ LÍ**** ;*****************CHÖÙA VAØO OÂ NHÔÙ 20H******************* NUTNHAN: MOV A,#00H MOV R7,#2 NSTART: JB P2.0,XETP21 MOV R6,#255 ;DELAY 100ms NDELAY2: MOV R5,#255 ;DELAY 100ms NDELAY1: DJNZ R5,NDELAY1 ;DELAY 100ms DJNZ R6,NDELAY2 ;DELAY 100ms JB P2.0,NSTART CLR C CHOP20: JNB P2.0,CHOP20 SJMP DANHAN XETP21: JB P2.1,NSTART MOV R6,#255 ;DELAY 100ms NDELAY4: MOV R5,#255 ;DELAY 100ms NDELAY3: DJNZ R5,NDELAY3 ;DELAY 100ms DJNZ R6,NDELAY4 ;DELAY 100ms JB P2.1,NSTART SETB C CHOP21: JNB P2.1,CHOP21 DANHAN: RLC A DJNZ R7,NSTART CJNE A,#0,CHANEL1 MOV 20H,#148 SJMP THOATNUTNHAN CHANEL1: CJNE A,#1,CHANEL2 MOV 20H,#211 SJMP THOATNUTNHAN CHANEL2: CJNE A,#2,CHANEL3 MOV 20H,#164 SJMP THOATNUTNHAN CHANEL3: MOV 20H,#228 THOATNUTNHAN: RET ;********************************************************* ;**KHÔÛI ÑOÄNG SIO UART 8 BIT, 38400 BAUD,XTAL=22.11MHz** ;****KHÔÛI ÑOÄNG NGAÉT TIME 0***************************** KHAIBAOPORT: MOV A,87H SETB ACC.7 MOV 87H,A MOV SCON,#52H MOV IE,#82H MOV TMOD,#21H MOV TH1,#-3 SETB TR1 SETB TR0 RET ;********************************************************* ;***********PHAÙT NOÄI DUNG THANH GHI A RA SIO********** PHAT: JNB TI,$ CLR TI MOV SBUF,A RET ;********************************************************* ;**********THU TÖØ SIO VAØ CHÖÙA VAØO THANH GHI A******** THU: JNB RI,$ CLR RI MOV A,SBUF RET ;********************************************************* ;*****BIEÁN ÑOÅI DA VÔÙI DÖÕ LIEÄU CHÖÙA TRONG A VAØ B******* ;***************B 4 BIT CAO, A 8 BIT THAP***************** DAC: PUSH ACC MOV A,B SWAP A SETB P1.4 CLR P1.7 MOV R7,#4 LOOPDA1: RLC A MOV P1.5,C CLR P1.6 SETB P1.6 DJNZ R7,LOOPDA1 POP ACC MOV R7,#8 LOOPDA2: RLC A MOV P1.5,C CLR P1.6 SETB P1.6 DJNZ R7,LOOPDA2 CLR P1.4 SETB P1.7 RET ;********************************************************* ;*BIEÁN ÑOÅI AD, BYTE ÑIEÀU KHIEÅN CHÖÙA TRONG OÂ NHÔÙ 20H* ;******DÖÕ LIEÄU CHÖÙA VAØO B:4 BIT CAO,A:8 BIT THAP******* ADC: CLR P1.1 MOV A,20H MOV R7,#8 NHAPDIN: RLC A MOV P1.2,C CLR P1.0 SETB P1.0 DJNZ R7,NHAPDIN CLR P1.0 SETB P1.0 MOV R7,#4 LOOPAD1: CLR P1.0 SETB P1.0 MOV C,P1.3 RLC A DJNZ R7,LOOPAD1 ANL A,#0FH MOV B,A MOV R7,#8 LOOPAD2: CLR P1.0 SETB P1.0 MOV C,P1.3 RLC A DJNZ R7,LOOPAD2 MOV R7,#3 CUOI: CLR P1.0 SETB P1.0 DJNZ R7,CUOI CLR P1.0 SETB P1.1 RET END ;********************************************************** C/ GIAO DIEÄN ÑIEÀU KHIEÅN Trong Visual Basic taïo moät form vôùi caùc thaønh phaàn nhö sau : Ngoaøi caùc thaønh phaàn quen thuoäc nhö Caption, Label, Text coøn coù theâm 2 bieåu töôïng khaùc laø hoäp ñieän thoaïi vaø ñoà thò. Hoäp ñieän thoaïi laø bieåu töôïng cuûa truyeàn thoâng noái tieáp ôû coång COM , ñoà thò laø coâng cuï ñeã ta veõ caùc döõ lieäu nhaän veà. Khi khôûi ñoäng thì hai hoäp coâng cuï naøy khoâng coù saün treân Toolbox maø ta phaûi boå sung theâm vaøo. Caùch boå sung 2 hoäp coâng cuï naøy : Vaøo muïc Project , choïn muïc Component, choïn tieáp hai thaønh phaàn Microsoft Chart control 6.0 , vaø Microsoft Comm control 6.0. Form treân ñöôïc chia laøm ba phaàn ADC, DAC, LCD . Ta seõ xeùt chöùc naêng, caùch söû duïng vaø chöông trình cuûa töøng thaønh phaàn trong moãi phaàn cuûa form treân. Tuy nhieân tröôùc heát ta caàn phaûi khôûi ñoäng cho truyeàn thoâng noái tieáp. Nhöõng caâu leänh khôûi ñoäng naøy ta ghi vaøo trong Form_Load töùc laø khi khôûi ñoäng maøn hình giao dieän thì truyeàn thoâng noái tieáp cuõng ñöôïc khôûi ñoäng ñoàng thôøi. Chöông trình naïp cho Form_Load Private Sub Form_Load() MSComm1.CommPort = 1 ‘söû duïng COM1 MSComm1.Settings = "19200, n, 8,1" ‘toác ñoä baud 19200 ‘khoâng kieåm tra chaün leõ, 8 bit döõ lieäu, 1 bit stop MSComm1.InputLen = 1 ‘moãi laàn ñoïc 1 byte MSComm1.PortOpen = True ‘ môû Port Text1.Text = "" ‘khôûi ñoäng cho caùc oâ Text Text2.Text = "" Text3.Text = "" Text4.Text = "" Text5.Text = "" Text6.Text = "0" Text7.Text = "200" Ñoaïn chöông trình khôûi ñoäng cho LCD End Sub Trong chöông trình con treân coøn moät phaàn chöông trình khôûi ñoäng cho LCD maø ta seõ xeùt roõ noäi dung trong phaàn noùi veà caùc nuùt leänh ñieàu khieån LCD. A/ CHUYEÅN ÑOÅI AD Tröôùc khi xeùt caùc nuùt leänh trong phaàn chuyeån ñoåi AD naøy ta xeùt chöông trình con thöïc vieäc chuyeån ñoåi AD Private Sub ThutucADC(Somau, a() As Integer) Dim instring As String Dim i, j, k, l As Integer l = Somau MSComm1.Output = Chr(2) MSComm1.Output = Chr(l) For k = 1 To l Do dummy = DoEvents() Loop Until MSComm1.InBufferCount >= 1 instring = MSComm1.Input i = Asc(instring) Do dummy = DoEvents() Loop Until MSComm1.InBufferCount >= 1 instring = MSComm1.Input j = Asc(instring) j = j * 256 + I a(k) = j Next k End Sub Tham soá “somau” quy ñònh seõ laáy bao nhieâu maãu döõ lieäu Chuoãi tham soá a( ) laø chuoãi döõ lieäu traû veà. Nuùt leänh ADC Nuùt leänh naøy duøng ñeã xuaát tín hieäu ra leänh cho phaàn cöùng laáy maãu döõ lieäu töø caùc keânh döõ lieäu (keânh 0 ñeán keânh 3), soá maãu döõ lieäu ñöôïc quy ñònh trong Text 7 (beân phaûi Label “SO MAU”). Söï thöïïc thi cuûa nuùt leänh ADC ñöôïc quy ñònh laø ïkhi Click traùi chuoät vaøo nuùt leänh. Chöông trình naïp cho nuùt leänh ADC: Private Sub ADC_Click() Dim instring As String Dim x As Double Dim i, j, k, l As Integer l = Text7.text MSComm1.Output = Chr(2) ‘vi xöû lí nhaûy tôùi vieäc laáy döõ lieäu MSComm1.Output = Chr(l) ‘soá laàn laáy maãu x = 0 For k = 1 To l Do ‘ñôïi döõ lieäu veà dummy = DoEvents() Loop Until MSComm1.InBufferCount >= 1 instring = MSComm1.Input i = Asc(instring) ‘chuyeån soá HEX cuûa döõ lieäu thaønh ‘ soá thaäp phaân (8 bit thaáp) Do ‘ñôïi döõ lieäu veà dummy = DoEvents() Loop Until MSComm1.InBufferCount >= 1 instring = MSComm1.Input j = Asc(instring) ‘chuyeån soá HEX cuûa döõ lieäu thaønh ‘soá thaäp phaân (4 bit cao) j = j * 256 + i ‘j chöùa 4 bit cao neân phaûi nhaân troïng ‘soá 256, j chöùa data m(k) = j ‘maûng m chöùa döõ lieäu x = x + j ‘x ñeã laáy giaù trò trung bình Next k x = x / l ‘x ñeã laáy giaù trò trung bình Text4.Text = x End Sub Haøm chr (char code as long) ñeã ñoåi soá thaäp phaân caàn truyeàn ra daïng kí töï vì khi truyeàn ñi maùy seõ laáy maõ ASCII cuûa kí töï caàn truyeàn ñeã truyeàn ñi. Haøm Asc(s as string) ñeã laáy maõ ASCII cuûa kí töï ñöa vaøo. Sau khi thöïc thi nuùt leänh ADC Text4 seõ laø giaù trò trung bình cuûa caùc maãu döõ lieäu laáy ñöôïc, caùc maãu döõ lieäu seõ ñöôïc chöùa trong maûng m, maûng m naøy ñöôïc duøng ñeã naïp vaøo File DataADC.xls . Text4 vaø nhaõn “Voltage” Text4 (beân phaûi nhaõn Voltage) laø nôi ñeã hieån thò cho ngöôøi söû duïng bieát giaù trò trung bình cuûa caùc maãu döõ lieäu ñöôïc laáy veà khi thöïc thi nuùt leänh ADC. Nuùt leänh Chanel Nuùt leänh naøy ra leänh cho vi xöû lí bieát keânh döõ lieäu naøo caàn phaûi ñoïc veà. Keânh chuyeån ñoåi do ngöôøi söû duïng nhaäp vaøo töø Text6 (beân phaûi nuùt leänh Chanel). Söï thöïc thi cuûa nuùt leänh naøy khi click traùi chuoät vaøo nuùt leänh. Ngoaøi vieäc choïn keânh baèng nuùt leänh chanel naøy ta coøn coù theå choïn keânh baèng caùc nuùt nhaán ôû phaàn cöùng khi khôûi ñoäng cho vi xöû lí . Chöông trình naïp cho nuùt leänh Chanel: Private Sub Chanel_Click() Dim i, j As Integer i = 132 j = Text6.Text If j = 0 Then i = i + 16 ‘keânh 0 End If If j = 1 Then i = i + 80 ‘keânh 1 End If If j = 2 Then i = i + 32 ‘keânh 2 End If If j = 3 Then i = i + 96 ‘keânh 3 End If MSComm1.Output = Chr(3) ‘cho vi xö ûlí nhaûy tôùi vieäc ‘choïn keânh MSComm1.Output = Chr(i) ‘göûi soá keânh caàn chuyeån ñoåi End Sub Trong chöông trình treân vieäc phaùt ñi soá Integer i ñeã choïn keânh chính laø phaùt ñi byte ñieàu khieån cho ADS7841 (xem trong phaàn giôùi thieäu veà ADS7841). Keânh 0, 1, 2, 3 öùng vôùi caùc byte ñieàu khieån (soá thaäp phaân) 148, 212, 164, 228. Nuùt leänh DataADC Nuùt leänh naøy khoâng lieân heä ñeán phaàn cöùng maø chæ thao taùc laäp trình treân maùy tính. Nuùt leänh naøy ra leänh cho hieän baûng tính Excel, trong ñoù coù chöùa caùc döõ lieäu cuûa caùc keânh 0, 1, 2, 3. Moãi keânh laø 250 maãu döõ lieäu. Söï thöïc thi cuûa nuùt leänh naøy khi click traùi chuoät vaøo nuùt leänh. ÔÛ ñaây ta söû duïng khaû naêng nhuùng döõ lieäu giöõa Visual Basic vaø Excel neân ta caàn phaûi boå sung caùc chöùc naêng naøy vaøo chöông trình. Maëc ñònh khi khôûi ñoäng maùy tính seõ khoâng coù chöùc naêng naøy. Boå sung caùc chöùc naêng naøy nhö sau: Vaøo muïc Project , choïn muïc Preferences , choïn hai oâ “Microsoft Excel 8.0 Object Library” vaø “Microsoft Office 8.0 Object Library”, (töông öùng vôùi hai taäp tin MSO97.DLL vaø Excel8.OLB). Tröôùc khi thöïc thi nuùt leänh naøy ta phaûi taïo tröôùc file Excel C:\huy\dataADC.xls. Chöông trình naïp cho nuùt leänh DataADC: Private Sub DataADC_Click() Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlsheet As Excel.Worksheet Dim i, j As Integer Set xlApp = Excel.Application Set xlbook =xlApp.Workbooks.Open("C:\huy\DataADC.xls") xlBook.Application.Visible = True ‘hieån thò baûng tính Excel Set xlsheet = xlBook.Sheets(1) j = 1 i = Text6.Text i = i + 2 Do j = j + 1 xlsheet.Cells(j, i) = m(j - 1) Loop Until (j = 250) Set xlApp = Nothing Set xlBook = Nothing Set xlsheet = Nothing End Sub Nuùt leänh Chart Nuùt leänh naøy khoâng lieân heä ñeán phaàn cöùng maø chæ thao taùc laäp trình treân maùy tính. Nuùt leänh naøy thöïc hieän vieäc veõ caùc döõ lieäu ñöoïc laáy töø caùc keânh döõ lieäu leân ñoà thò . Söï thöïc thi cuûa nuùt leänh naøy khi click traùi vaøo nuùt leänh . Chöông trình naïp cho nuùt leänh Chart Private Sub chart_Click() Dim i , j As Integer j = Text7.Text ‘soá maãu caàn veõ ReDim b(1 To j) As Double For i = 1 To j b( i ) = m( i ) Next i MSChart1.ChartData = b ‘naïp data vaøo ñoà thò End Sub Soá maãu döõ lieäu caàn veõ do ngöôøi söû duïng nhaäp vaøo töø oâ Text7 (beân phaûi nhaõn “SO MAU”). Trong nuùt leänh ADC ta coù ñeà caäp veà maûng m (laø maûng ñeã chöùa döõ lieäu laáy töø caùc keânh döõ lieäu), ñeán nuùt leänh naøy döõ lieäu ñöa vaøo ñoà thò seõ laø maûng m, maûng m laø maûng bieán toaøn cuïc. Cuù phaùp Redim ñöôïc söû duïng trong chöông trình treân nhaèm ñeã thay ñoåi soá maãu döõ lieäu ñöa vaøo ñoà thò. Ñeã veõ caùc döõ lieäu naøy leân ñoà thò ôû daïng gioáng nhö dao ñoäng kí ta caàn phaûi thay ñoåi caùc property cho hoäp coâng cuï MSChart. Caùch laøm nhö sau : Vaøo trang property cuûa MSChart1 Trong trang Chart : Trong muïc Chart type choïn “line” (daïng ñöôøng thaúng), choïn “2D” (daïng maët phaúng hai chieàu). Trong muïc Chart Options choïn oâ Series in rows. Trong trang Axis khoâng choïn oâ show scaling (khi veõ ñoà thò noù seõ khoâng ghi caùc soá thöù töï cuûa maãu). Trong trang Axis Grid choïn caùc muïc XAxis , YAxis thuoäc daïng “Null” (khoâng veõ caùc ñöôøng löôùi treân ñoà thò ). Trong trang Series Color choïn cho caùc R1 ñeán R5 cuøng moät maøu (ví duï nhö maøu ñoû). Trang property cuûa MSChart B/ CHUYEÅN ÑOÅI DA Tröôùc khi xeùt caùc nuùt leänh trong phaàn chuyeån ñoåi AD naøy ta xeùt chöông trình con thöïc vieäc chuyeån ñoåi DA Private Sub ThutucDAC (Voltage As Double) Dim i, j As Integer Dim k As Double k = Voltage j = (1000 * k) Mod 256 i = ((1000 * k) - j) / 256 If j >= 2 Then j = j - 2 End If If i <= 15 Then MSComm1.Output = Chr(1) MSComm1.Output = Chr(i) MSComm1.Output = Chr(j) End If End Sub Tham soá “Voltage” quy ñònh ñieän aùp caàn xuaát ra Nuùt leänh DAC Nuùt leänh “DAC” seõ thöïc hieän leänh bieán ñoåi DA , ñieän aùp caàn xuaát ra do ngöôøi söû duïng nhaäp vaøo töø oâ Text1 (phía döôùi nhaõn “VOLTAGE”) ñôn vò quy ñònh laø Voltï. Ñieän aùp caàn xuaát ra coù toái ña laø ba soá leõ (töùc laø ñoä phaân giaûi baèng 1 mV) vaø phaûi naèm trong taàm töø 0 V ñeán 4.096 V, neáu nhaäp vaøo lôùn hôn taàm ñieän aùp naøy leänh xuaát seõ khoâng ñöôïc thöïc thi. Söï thöïc thi cuûa nuùt leänh naøy khi ta click traùi vaøo nuùt leänh DAC. Chöông trình naïp cho nuùt leänh DAC: Private Sub DAC_Click() Dim i, j, k As Integer k = Text1.Text ‘ñieän aùp caàn chuyeån ñoåi j = (1000 * k) Mod 256 ‘8 bit thaáp i = ((1000 * k) - j) / 256 ‘4 bit cao If i <= 15 Then ‘loaïi tröôøng hôïp quaù taàm MSComm1.Output = Chr(1) ‘nhaûy ñeán bieán ñoåi DA MSComm1.Output = Chr(i) ‘4 bit cao MSComm1.Output = Chr(j) ‘8 bit thaáp End If End Sub Do ñoä phaân giaûi cuûa DAC7611 laø 1mV neân ñieän aùp caàn chuyeån ñoåi chuyeån qua soá nhò phaân naèm trong taàm 000H ñeán FFFH , ta chia laøm hai byte ñeã truyeàn cho vi xöû lí , byte ñaàu tieân chöùa 4 bit cao chöùa trong bieán i, 8 bit thaáp chöùa trong byte thöù hai . Nuùt leänh Tam giac Nuùt leänh “Tam giac” seõ taïo soùng tam giaùc taïi ngoõ ra cuûa boä bieán ñoåi DA. Chu kì cuûa soùng tam giaùc naøy laø 7ms, bieân ñoä 4 V. Ta thöïc hieän chöùc naêng naøy baèng caùch söû duïng theâm 1 hoäp ñieàu khieån timer (timer1). Hoäp ñieàu khieån Timer coù bieåu töôïng sau: Söï thöïc thi cuûa nuùt leänh naøy khi ta click traùi vaøo nuùt leänh “Tam giac”. Chöông trình naïp cho nuùt leänh “Tam giac”: Private Sub Tamgiac_Click() Timer1.Enabled = True End Sub Chöông trình naïp cho boä Timer1 : Private Sub Timer1_Timer() Call ThutucDAC(0) Call ThutucDAC(1) Call ThutucDAC(2) Call ThutucAC(3) Call ThutucDAC(4) Call ThutucDAC(3) Call ThutucDAC(2) Call ThutucDAC(1) End Sub Ta phaûi quy ñònh property “Interval” cuûa timer1 baèng 7ms Vaøo trang property cuûa timer1 vaø nhaäp vaøo 7 ms vaøo muïc Interval, ñieàu naøy coù nghóa laø cöù sau 7 ms seõ thöïc hieän coâng vieäc trong Timer1. Choïn ñaëc tính Enable baèng False. Nuùt leänh Song vuong Nuùt leänh “Song vuong” seõ taïo soùng vuoâng taïi ngoõ ra cuûa boä bieán ñoåi DA. Chu kì cuûa soùng vuoâng naøy laø 2 ms. Bieân ñoä 4 V. Ta thöïc hieän chöùc naêng naøy baèng caùch söû duïng theâm 1 hoäp ñieàu khieån timer (timer3). Söï thöïc thi cuûa nuùt leänh naøy khi ta click traùi vaøo nuùt leänh “Tam giac”. Chöông trình naïp cho nuùt leänh “Tam giac”: Private Sub Vuong_Click() Timer3.Enabled = True End Sub Chöông trình naïp cho boä Timer3 : Private Sub Timer3_Timer() Call ThutucDAC(4) Call ThutucDAC(0) End Sub Ta phaûi quy ñònh property “interval” cuûa timer3 baèng 2ms vaø ñaëc tính Enable baèng False. Nuùt leänh Finish Nuùt leänh naøy seõ keát thuùc vieäc thöïc hieän taïo soùng ñieän aùp taïi ñaàu ra boä bieán ñoåi DA. Söï thöïc thi cuûa nuùt leänh naøy khi ta click traùi vaøo nuùt leänh. Chöông trình naïp cho nuùt leänh “Finish” Private Sub Finish_Click() Timer1.Enabled = False Timer3.Enabled = False End Sub C/ HIEÅN THÒ TREÂN LCD Trong phaàn hieån thò baèng maøn hình tinh theå loûng (LCD) ñeã söû duïng ñöôïc caùc nuùt leänh trong phaàn naøy ta phaûi khôûi ñoäng cho LCD caùc cheá ñoä hoaït ñoäng cuûa noù. Caùc caâu leänh khôûi ñoäng cho LCD ñöôïc naïp vaøo trong Form_Load töùc laø khi khôûi ñoäng maøn hình giao dieän thì LCD cuõng seõ ñöôïc khôûi ñoäng. Chöông trình naïp cho Form_Load Private Sub Form_Load() Ñoaïn khôûi ñoäng truyeàn thoâng noái tieáp Ñoaïn khôûi ñoäng cho caùc oâ Text MSComm1.Output = Chr(4) ‘choïn cheá ñoä hoaït ñoäng dòch MSComm1.Output = Chr(6) ‘con troû moãi laàn xuaát kí töï MSComm1.Output = Chr(4) ‘choïn 8 bit data, 2 line, font MSComm1.Output = Chr(63) ‘0.5 * 7 dots MSComm1.Output = Chr(4) ‘choïn display “on”, cursor MSComm1.Output = Chr(15) ‘”on” vaø noåi con troû MSComm1.Output = Chr(4) ‘xoùa maøn hình vaø dòch veà vò MSComm1.Output = Chr(1) ‘trí 0 End Sub Nuùt leänh Move cursor Nuùt leänh “Move cursor” seõ ra leânh cho LCD di chuyeån con troû tôùi vò trí ñöôïc choïn, vò trí naøy do ngöôøi söû duïng nhaäp vaøo 2 oâ Text2 vaø Text3, oâ Text2 chæ haøng ñöôïc choïn , oâ Text3 chæ coät ñöôïc choïn. Giaù trò hôïp leä cuûa haøng laø 1 hoaëc 2, giaù trò hôïp leä cuûa coät laø 15. Thöïc ra giaù trò cuûa coät coù theå leân ñeán 63, nhöng neáu ôû vò trí lôùn hôn 15 ta khoâng theån thaáy noù, muoán thaáy ta phaûi söû duïng leänh dòch maøn hình ñeán vò trí ñoù. Leänh naøy seõ ñöôïc thöïc thi khi ta click traùi vaøo nuùt leänh. Chöông trình naïp cho nuùt leänh “Move cursor” Private Sub Movecurse_Click() Dim i As Integer MSComm1.Output = Chr(4) ‘ nhaûy ñeán nhaõn xuaát ‘leänh cho LCD i = (Text2.Text - 1) * 64 + Text3.Text i = i + 128 MSComm1.Output = Chr(i) ‘truyeàn maõ leänh cho LCD End Sub Nhö ta ñaõ bieát veà LCD trong phaàn tröôùc thì con troû seõ coù 128 vò trí , 64 vò trí ôû line 1 vaø 64 vò trí ôû line 2, do ñoù ñeã coâng thöùc tính i ôû treân cho pheùp ta dòch Cursor ñeán vò trí mong muoán, coäng theâm 128 laø ñeã phuø hôïp vôùi maõ leänh. Nuùt leänh “Display character” Nuùt leänh “Display Character” ra leänh cho LCD hieån thò chuoãi ñöôïc choïn taïi vò trí cursor ñang ñöùng. Chuoãi naøy do ngöôøi söû duïng nhaäp vaøo oâ Text5 (döôùi nhaõn Character). Leänh naøy ñöôïc thöïc hieän khi click traùi vaøo nuùt leänh. Chöông trình naïp cho nuùt leänh “Display Character” Private Sub DisplayLCD_Click() Dim i As Integer Dim s As String s = Text5.Text For i = 1 To Len(s) MSComm1.Output = Chr(6) ‘nhaûy tôùi vieäc hieån thò MSComm1.Output = Mid(s, i, 1) ‘göûi kí töï caàn ‘hieån thò Next i End Sub Haøm Len (string) ñöôïc söû duïng ñeã laáy chieàu daøi cuûa chuoãi s. Haøm Mid (string,vò trí baét ñaàu,chieàu daøi chuoãi môùi) ñeã laáy laàn löôït töøng kí töï trong chuoãi ñöa vaøo.Ta thöïc hieän vieäc chuyeån moät chuoãi kí töï ñi baèng caùch laëp voøng vieäc göûi ñi 1 kí töï. Nuùt leänh “Clear Display” Nuùt leänh “Clear Display” ra leänh cho LCD xoùa maøn hình vaø cho cursor veà vò trí haøng 1 , coät 0. Leänh naøy thöïc hieän khi click traùi vaøo nuùt leänh. Chöông trình naïp cho nuùt leänh “Clear Display” Private Sub Cleardisplay_Click() MSC.Output = Chr(4) ‘nhaûy tôùi vieäc thöïc thi leänh MSComm1.Output = Chr(1) ‘truyeàn maõ leänh cho LCD End Sub D/ CAÙC NUÙT LEÄNH KHAÙC Nuùt leänh “Exit” Nuùt leänh Exit ñeã keát thuùc chöông trình giao dieän. Leänh naøy thöïc hieän khi click traùi vaøo nuùt leänh. Chöông trình naïp cho nuùt leänh Exit Private Sub Exit_Click() End End Sub Nuùt leänh “Khoi dong OCX” Nuùt leänh naøy duøng ñeã khôûi ñoäng caùc hoäp ñieàu khieån OCX maø ta seõ taïo ôû phaàn sau. Leänh naøy thöïc hieän khi click traùi vaøo nuùt leänh. Chöông trình naïp cho nuùt leänh “Khoi dong OCX” Private Sub Khoidong_Click() MSComm1.PortOpen = False Call LCD1.KhaibaoPort(1, 1, "38400,n,8,1") Call ADC1.KhaibaoPort(1, 1, "38400,n,8,1") Call DAC1.KhaibaoPort(1, 1, "38400,n,8,1") MSComm1.PortOpen = True End Sub Nuùt leänh “Text OCX” Nuùt leänh naøy ñeã thöû caùc chöùc naêng ta ñaõ xaây döïng cho caùc hoäp ñieàu khieån OCX. Leänh naøy thöïc hieän khi click traùi vaøo nuùt leänh. Chöông trình naïp cho nuùt leänh “Text OCX” Private Sub ThuOCX_Click() MSComm1.PortOpen = False . . . MSComm1.PortOpen = True End Sub TAÏO CAÙC HOÄP ÑIEÀU KHIEÅN ACTIVEX Nhö ñaõ bieát trong caùc phaàn treân, phaàn cöùng cuûa luaän vaên naøy goàm ba phaàn : Chuyeån ñoåi AD (duøng ADS7841), chuyeån ñoåi DA (duøng DAC7611) vaø hieån thò baèng maøn hình tinh theå loûng LCD. Trong phaàn tröôùc ta ñaõ vieát giao dieän ñieàu khieån heä thoáng naøy cho ngöôøi söû duïng. Vaán ñeà ñaët ra trong phaàn naøy laø ta seõ ñoùng goùi töøng phaàn treân baèng caùch taïo ra caùc hoäp ñieàu khieån ActiveX, trong moãi hoäp ñieàu khieån ñoù ta seõ vieát caùc haøm chöùc naêng ñeã ñieàu khieån cho ba phaàn naøy. Sôû dó neân laøm phaàn naøy vì noù seõ giuùp ta coù moät thö vieän ñaõ coù saün caùc haøm chöùc naêng, khi caàn duøng ñeán ta chæ loâi caùc hoäp ñieàu khieån naøy ra vaø söû duïng caùc haøm chöùc naêng trong noù, ñieàu naøy khoâng nhöõng giuùp ta deã laäp trình ñieàu khieån heä thoáng hôn maø coøn coù theå cho ngöôøi khaùc söû duïng caùc chöùc naêng naøy moät caùch deã daøng. Ngoaøi öu ñieåm laø coù theå söû duïng deã daøng caùc chöùc naêng ñöôïc xaây döïng thì nhöôïc ñieåm lôùn nhaát cuûa vieäc ñoùng goùi thaønh caùc hoäp ñieàu khieån rieâng leõ laø toác ñoä thöïc hieän giaûm ñi raát nhieàu do ñoù khi muoán toác ñoä cao ta neân thöïc hieän tröïc tieáp trong chöông trình chính. Caùch taïo moät hoäp ñieàu khieån ActiveX : Khi khôûi ñoäng Visual Basic ta choïn ActiveX Control töø hoäp thoaïi New Project. Keát quaû maøn hình seõ xuaát hieän töông töï nhö moâi tröôøng Visual Basic bình thöôøng ngoaïi tröø thanh tieâu ñeà cuûa bieåu maãu laø Project – [Usercontrol 1 (user Control)]. Ta coù theå söûa laïi theo nhu caàu cuûa mình. Sau khi ñaõ taïo xong caùc hoäp ñieàu khieån ActiveX ta phaûi boå sung vaøo trong muïc Component (thuoäc muïc Project). Caùch söû duïng caùc hoäp ñieàu khieån naøy cuõng gioáng nhö vieäc söû duïng hoäp ñieàu khieån MSComm vaø MSChart ñaõ noùi trong caùc phaàn tröôùc. A/ HOÄP ÑIEÀU KHIEÅN CHUYEÅN ÑOÅI AD Trong phaàn bieán ñoåi AD naøy ta seõ xaây döïng ñaëc tính ñeã choïn keânh cho boä bieán ñoåi AD vaø haøm thöïc hieän vieäc laáy döõ lieäu veà töø keânh ñaõ choïn. Tuy nhieân tröôùc heát ta taïo bieåu maãu goàm moät Label coù Caption laø “ANALOG TO DIGITAL CONVERSION” vaø moät hoäp ñieàu khieån truyeàn thoâng noái tieáp MSComm. Caùc chöùc naêng ñöôïc xaây döïng cho ADS7841 : KhaibaoPort(commport, inputlen As Integer, settings As String) Ñaây laø thuû tuïc ñeå khai baùo caùc thoâng soá cho truyeàn thoâng noái tieáp. Thuû tuïc naøy phaûi ñöôïc goïi tröôùc khi söû duïng caùc thuû tuïc khaùc. Comport : Giao tieáp ôû coång COM soá maáy. Inputlen : quy ñònh soá kí töï khi ñoïc vaøo. Settings : ñaët toác ñoä baud, kieåm tra chaün leû, soá bit döõ lieäu, bit stop Ví duï khôûi ñoäng caùc thoâng soá sau cho coång COM : coång COM soá 1, moät kí töï ñöôïc ñoïc vaøo, toác ñoä baud 38400, khoâng kieåm tra chaün leû, 8 bits döõ lieäu, 1 bit stop ta goïi thuû tuïc naøy nhö sau : Call KhaibaoPort (1, 1, “38400, N,8,1”) Chöông trình naïp cho thuû tuïc “KhaibaoPort” : Public Sub KhaibaoPort( commport, inputlen As Integer, settings As String) MSComm1.commport = commport MSComm1.settings = settings MSComm1.inputlen = inputlen End Sub Chanel ( Number As Integer ) Ñaây laø thuû tuïc ñeã choïn keânh caàn chuyeån ñoåi cho ADS7841. Ví duï ta caàn choïn keânh 2 laøm keânh ñeã laáy döõ lieäu veà ta goïi thuû tuïc naøy nhö sau : Call Chanel ( 2 ) Chöông trình naïp cho thuû tuïc “Chanel” : Public Sub Chanel(Number As Integer) Dim i, j As Integer i = 132 j = Number If j = 0 Then i = i + 16 End If If j = 1 Then i = i + 80 End If If j = 2 Then i = i + 32 End If If j = 3 Then i = i + 96 End If MSComm1.PortOpen = True MSComm1.Output = Chr(3) MSComm1.Output = Chr(i) MSComm1.PortOpen = False End Sub ADC ( somau, a( ) As Integer ) Ñaây laø thuû tuïc ñeã thöïc hieän vieäc laáy döõ lieäu töø keânh ñaõ ñöôïc choïn. Tham soá ‘somau’ quy ñònh soá maãu caàn laáy. Chuoãi tham soá a( ) laø chuoåi döõ lieäu ta caàn laáy veà. Ví duï ta caàn laáy 200 maãu döõ lieäu töø keânh döõ lieäu ñaõ ñöôïc choïn vôùi maûng döõ lieäu (200 maãu) ñöôïc chöùa vaøo maûng m ( ), khi ñoù ta caàn goïi thuû tuïc nhö sau : Call ADC ( 200, m( ) ) Chöông trình naïp cho thuû tuïc “Chanel” : Public Sub ADC ( somau, a( ) As Integer ) Dim instring As String Dim i, j, k, l As Integer l = somau MSComm1.PortOpen = True MSComm1.Output = Chr(2) MSComm1.Output = Chr(l) For k = 1 To l Do dummy = DoEvents() Loop Until MSComm1.InBufferCount >= 1 instring = MSComm1.Input i = Asc(instring) Do dummy = DoEvents() Loop Until MSComm1.InBufferCount >= 1 instring = MSComm1.Input j = Asc(instring) j = j * 256 + i a(k) = j Next k MSComm1.PortOpen = False End Sub B/ HOÄP ÑIEÀU KHIEÅN CHUYEÅN ÑOÅI DA Trong phaàn bieán ñoåi DA naøy ta seõ xaây döïng thuû tuïc ñeã xuaát moät giaù trò ñieän aùp ra chaân IC DAC7611. Ta taïo bieåu maãu goàm moät Label coù Caption laø “DIGITAL TO ANALOG CONVERSION” vaø moät hoäp ñieàu khieån truyeàn thoâng noái tieáp MSComm. Caùc chöùc naêng ñöôïc xaây döïng cho DAC7611 : KhaibaoPort(commport, inputlen As Integer, settings As String) Ñaây laø thuû tuïc ñeå khai baùo caùc thoâng soá cho truyeàn thoâng noái tieáp. Thuû tuïc naøy phaûi ñöôïc goïi tröôùc khi söû duïng caùc thuû tuïc khaùc. Comport : Giao tieáp ôû coång COM soá maáy. Inputlen : quy ñònh soá kí töï khi ñoïc vaøo. Settings : ñaët toác ñoä baud, kieåm tra chaün leû, soá bit döõ lieäu, bit stop Ví duï khôûi ñoäng caùc thoâng soá sau cho coång COM : coång COM soá 2, moät kí töï ñöôïc ñoïc vaøo, toác ñoä baud 19200, khoâng kieåm tra chaün leû, 8 bits döõ lieäu, 1 bit stop ta goïi thuû tuïc naøy nhö sau : Call KhaibaoPort (2, 1, “19200, N,8,1”) Chöông trình naïp cho thuû tuïc “KhaibaoPort” : Public Sub KhaibaoPort(commport, inputlen As Integer, settings As String) MSComm1.commport = commport MSComm1.settings = settings MSComm1.inputlen = inputlen End Sub Xuat (Voltage As Double) Ñaây laø thuû tuïc ñeã xuaát ñieän aùp ra cho DAC7611 Tham soá ‘Voltage’ ñöôïc hieåu ôû ñôn vò Volt Ví duï caàn xuaát ñieän aùp 3.2V ra DAC7611 ta goïi thuû tuïc naøy nhö sau: Call Xuat ( 3.2 ) Chöông trình naïp cho thuû tuïc “Xuat” Public Sub Xuat(Voltage As Double) Dim i, j As Integer j = (1000 * Voltage) Mod 256 i = ((1000 * Voltage) - j) / 256 If i <= 15 Then MSComm1.PortOpen = True MSComm1.Output = Chr(1) MSComm1.Output = Chr(i) MSComm1.Output = Chr(j) MSComm1.PortOpen = False End If End Sub C/ HOÄP ÑIEÀU KHIEÅN LCD Cuõng gioáng nhö hai hoäp ñieàu khieån ADC vaø DAC ñöôïc xaây döïng ôû phaàn treân, tröôùc khi vieát caùc chöùc naêng cho vieäc ñieàu khieån LCD ta cuõng caàn taïo bieåu maãu cho hoäp ñieàu khieån LCD goàm moät Label coù Caption laø “LCD” vaø moät hoäp ñieàu khieån truyeàn thoâng noái tieáp MSComm. Caùc chöùc naêng ñöôïc xaây döïng cho LCD : KhaibaoPort(commport, inputlen As Integer, settings As String) Ñaây laø thuû tuïc ñeå khai baùo caùc thoâng soá cho truyeàn thoâng noái tieáp. Thuû tuïc naøy phaûi ñöôïc goïi tröôùc khi söû duïng caùc thuû tuïc khaùc. Comport : Giao tieáp ôû coång COM soá maáy. Inputlen : quy ñònh soá kí töï khi ñoïc vaøo. Settings : ñaët toác ñoä baud, kieåm tra chaün leû, soá bit döõ lieäu, bit stop Ví duï khôûi ñoäng caùc thoâng soá sau cho coång COM : coång COM soá 1, moät kí töï ñöôïc ñoïc vaøo, toác ñoä baud 19200, khoâng kieåm tra chaün leû, 8 bits döõ lieäu, 1 bit stop ta goïi thuû tuïc naøy nhö sau : Call KhaibaoPort (1, 1, “19200, N,8,1”) Chöông trình naïp cho thuû tuïc “KhaibaoPort” : Public Sub KhaibaoPort(commport, inputlen As Integer, settings As String) MSComm1.commport = commport MSComm1.settings = settings MSComm1.inputlen = inputlen MSComm1.PortOpen = True MSComm1.Output = Chr(4) MSComm1.Output = Chr(6) MSComm1.PortOpen = False End Sub ClearDisplay ( ) Ñaây laø thuû tuïc thöïc hieän chöùc naêng xoùa maøn hình ñoàng thôøi di chuyeån con troû veà vò trí haøng 1 coät 0. Thuû tuïc naøy khoâng caàn phaûi truyeàn tham soá cho noù. Chöông trình naïp cho thuû tuïc “KhaibaoPort” : Public Sub cleardisplay() MSComm1.PortOpen = True MSComm1.Output = Chr(4) MSComm1.Output = Chr(1) MSComm1.PortOpen = False End Sub On_Off(Display, Curse, Blink As String) Ñaây laø thuû tuïc ñeã khai baùo caùc chöùc naêng baät taét maøn hình, con troû, hoaëc noåi kí töï treân con troû. Ñeã choïn cheá ñoä hieån thò ta truyeàn tham soá laø chuoåi “ON” , ngöôïc laïi ta choïn “OFF”. Tham soá ‘Display’ ñeã choïn cheá ñoä cho maøn hình Tham soá ‘Curse’ ñeã choïn cheá ñoä cho con troû Tham soá ‘Blink’ ñeã choïn cheá ñoä kí töõ treân ñaàu con troû Ví duï nhö caàn choïn cheá ñoä baät maøn hình, hieån thò con troû vaø khoâng hieån thò kí töï treân ñaàu con troû ta goïi thuû tuïc naøy nhö sau : Call On_Off (“ON”,”ON”,”OFF” ) Chöông trình naïp cho thuû tuïc “On_Off” : Public Sub On_Off(Display, Curse, Blink As String) Dim i As Integer i = 8 If Display = "ON" Then i = i + 4 End If If Curse = "ON" Then i = i + 2 End If If Blink = "ON" Then i = i + 1 End If MSComm1.PortOpen = True MSComm1.Output = Chr(4) MSComm1.Output = Chr(i) MSComm1.PortOpen = False End Sub Shift(display_curse, right_left As String, Lenght As Integer) Ñaây laø thuû tuïc ñeã ñieàu khieån vieäc dòch maøn hình hoaëc con troû sang traùi hay phaûi vaø bao nhieâu kí töï. Tham soá ‘display_curse’ ñeã choïn cheá ñoä dòch cho maøn hình hay con troû. Truyeàn “display” ñeã dòch maøn hình vaø truyeàn “curse” ñeã dòch con troû Tham soá ‘right_left’ ñeã choïn cheá ñoä dòch phaûi hoaëc dòch traùi. Truyeàn “right” ñeã dòch phaûi vaø truyeàn “left” ñeã dòch traùi Tham soá ‘Lenght’ ñeã choïn cheá ñoä dòch bao nhieâu kí töï Ví duï caàn dòch maøn hình sang phaûi 5 ki töï ta caàn phaûi goïi thuû tuïc naøy nhö sau : Call Shift (“display” , “right” , 5) Chöông trình naïp cho thuû tuïc “Shift” : Public Sub Shift(display_curse, right_left As String, Lenght As Integer) Dim i, j As Integer i = 16 If display_curse = "display" Then i = i + 8 End If If right_left = "right" Then i = i + 4 End If MSComm1.PortOpen = True For j = 1 To Lenght MSComm1.Output = Chr(4) MSComm1.Output = Chr(i) Next j MSComm1.PortOpen = False End Sub Function_set(Line, Font As Integer) Ñaây laø thuû tuïc ñaët caùc chöùc naêng veà soá haøng caàn söû duïng vaø Font chöõ hieån thò treân LCD. Tham soá ‘Line’ quy ñònh soá haøng caàn ñöôïc ñaët Tham soá ‘Font’ quy ñònh font chöõ hieån thò Ví duï caàn söû duïng LCD ôû cheá ñoä 2 Lines , Font chöõ 7 ta goïiï thuû tuïc naøy nhö sau : Call Function_set( 2, 7 ) Chöông trình naïp cho thuû tuïc “Function_set” : Public Sub Function_set(Line, Font As Integer) Dim i As Integer i = 48 If Line = 2 Then i = i + 8 End If If Font = 10 Then i = i + 4 End If MSComm1.PortOpen = True MSComm1.Output = Chr(4) MSComm1.Output = Chr(i) MSComm1.PortOpen = False End Sub Movecurse(Line, Column As Integer) Ñaây laø thuû tuïc di chuyeån con troû tôùi vò trí mong muoán. Tham soá ‘Line’ chæ haøng con troû seõ di chuyeån tôùi. Tham soá ‘Column’ chæ coät con troû seõ di chuyeån tôùi. Ví duï muoán di chuyeån con troû tôùi vò trí doøng 2 coät 3 cuûa LCD ta goïi thuû tuïc naøy nhö sau : Call Movecurse( 2, 3) Chöông trình naïp cho thuû tuïc “Movecurse” : Public Sub Movecurse(Line, Column As Integer) Dim i As Integer i = (Line - 1) * 64 + Column i = i + 128 MSComm1.PortOpen = True MSComm1.Output = Chr(4) MSComm1.Output = Chr(i) MSComm1.PortOpen = False End Sub Display(outstring As String) Ñaây laø thuû tuïc hieån thò xaâu kí töï leân maøn hình LCD baét ñaàu taïi vò trí con troû ñang ñöùng. Ví duï caàn xuaát chuoãi “Hello” taïi vò trí con troû ñang ñöùng ta goïi thuû tuïc naøy nhö sau : Call Display ( “Hello” ) Chöông trình naïp cho thuû tuïc “Display” : Public Sub Display(outstring As String) Dim i As Integer MSComm1.PortOpen = True For i = 1 To Len(outstring) MSComm1.Output = Chr(6) MSComm1.Output = Mid(outstring, i, 1) Next i MSComm1.PortOpen = False End Sub

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

  • docThesis.doc