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
103 trang |
Chia sẻ: banmai | Lượt xem: 2099 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Hệ thống thu thập dữ liệu và điều khiển, để xem tài liệu hoàn chỉnh 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:
- Thesis.doc