Professional Documents
Culture Documents
Giao Tiep May Tinh Voi VXL 8085
Giao Tiep May Tinh Voi VXL 8085
Giao Tiep May Tinh Voi VXL 8085
Chöông I:
− Ñoái vôùi nhöõng ai trong giai ñoaïn khôûi ñaàu hoïc laäp trình vi xöû lyù, thì
2 vieäc treân luoân xaåy ra nhaàm laãn gaây maát nhieàu thôøi gian voâ ích.
− Khi caàn theâm hoaëc xoùa, hoaëc söûa chöông trình thì maát nhieàu thôøi gian ñeå
doø laïi chöông trình, nhaäp laïi khoù khaên, thaäm chí phaûi nhaäp laïi phaàn lôùn chöông
tình.
− Sau khi bò maát ñieän thì döõ lieäu löu trong RAM khoâng coù nguoàn döï tröõ seõ
bò maát heát, phaûi nhaäp laïi toaøn boä chöông trình. Ñoái vôùi nhöõng chöông trình nhoû
thì thôøi gian nhaäp khoâng ñaùng keå, nhöng ñoái vôùi nhöõng chöông trình lôùn thì ñaây
laø coâng vieäc maát nhieàu thôøi gian, vaø gaây phieàn haø cho ngöôøi hoïc cuõng nhö ngöôøi
laäp trình vi xöû lyù.
Beân caïnh ñoù, thöïc teá ñaõ coù nhöõng thieát bò naïp EPROM raát tieän lôïi, maø coù
theå ñem yù töôûng ñoù vaøo vieäc hoïc laäp trình vi xöû lyù nhaát laø vieäc giao tieáp vôùi thieát
bò khaùc töø vi xöû lyù laø moät ñieàu khaù deã dang.
Ngoaøi ra, chöông trình ñaïi hoïc raát bao quaùt, thôøi gian vaø ñieàu kieän chæ cho
pheùp sinh vieân ñi heát beà noåi cuûa chöông trình maø chöa coù hoaëc ít coù dòp tìm hieåu
veà chieàu saâu. Do ñoù, ñoà aùn toát nghieäp laø moät cô hoäi toát cho sinh vieân ñaøo saâu vaøo
chöông trình hoïc, öùng duïng baøi hoïc vaøo thöïc teá, chöùng minh ñöôïc söï höõu ích cuûa
nhöõng kieán thöùc ñaõ hoïc ñöôïc trong moâi tröôøng sö phaïm.
Töø nhöõng lyù do treân, ngöôøi vieát quyeát ñònh choïn ñeà taøi “GIAO TIEÁP MAÙY
TÍNH VÔÙI VI XÖÛ LYÙ 8085”.
Ñeà taøi ñöa ra moät chöông trình nhö moät coâng cuï hoã trôï vieäc hoïc laäp trình
vi xöû lyù treân Kit8085 vôùi moät thöù töï sau:
1) Xaùc ñònh muïc ñích yeâu caàu cuûa chöông trình caàn vieát.
2) Veõ löu ñoà.
3) Vieát chöông trình baèng ngoân ngöõ Assembly (ngoân ngöõ gôïi nhôù).
4) Nhaäp chöông trình baèng ngoân ngöõ Assembly vaøo maùy (duøng Norton).
5) Goïi chöông trình dòch Assembler ñeå dòch töø ngoân ngöõ Assembly sang
moät file coù phaàn môû roäng “prn” chöùa maõ maùy.
6) Trong chöông trình Giao tieáp, goïi file dòch ñeå naïp vaøo RAM.
7) Chaïy thöû vaø kieåm tra keát quaû.
Caùch laøm naøy coù nhöõng öu ñieåm sau:
− Dòch töø ngoân ngöõ Assembly (ngoân ngöõ gôïi nhôù) toán raát ít thôøi gian vì vieäc naøy
do maùy tính ñaûm traùch, vôùi ñoä chính xaùc tuyeät ñoái.
− Cuõng vaäy, vieäc naïp döõ lieäu vaøo RAM cuõng chæ trong vaøi giaây, vaø ñöôïc kieåm
tra trong khi naïp neân ñoä chính xaùc cuõng tuyeät ñoái.
− Ngoaøi ra, chöông trình ñöôïc löu tröõ, quaûn lyù deå daøng, deå xem laïi, deå kieåm
tra. Khi caàn theâm, hoaëc xoùa hoaëc söûa hoaëc cheùp laïi moät ñoaïn chöông trình,
ngay caû thay ñoåi ñòa chæ baét ñaàu, cuõng raát ñôn giaûn.
− Veà ñoä chính xaùc vaø thôøi gian caàn thieát thì ñoái vôùi chöông trình caùc lôùn caøng
coù lôïi, caøng phaûi naïp chöông trình nhieáu thì caøng coù lôïi.
II. TAÀM QUAN TROÏNG CUÛA VAÁN ÑEÀ.
Trong xaõ hoäi ngaøy caøng phaùt trieån, löôïng kieán thöùc caàn truyeàn taûi trong
nhaø tröôøng ngaøy caøng taêng, maø thôøi gian cho pheùp ngaøy caøng bò giaûm ñi, thì söï
LUAÂÄN VAÊN TOÁT NGHIEÄP 4
noå löïc cuûa caû ngöôøi daïy laãn ngöôøi hoïc ñeàu raát caàn thieát. Beân caïnh ñoù, phöông
tieän ít nhieàu seõ goùp phaàn quan troïng trong quaù trình hoïc taäp.
Tröôùc ñaây, vieäc hoïc laäp trình vi xöû lyù ñaõ dieãn ra moät caùch töï nhieân, coù theå
coi nhö ñaõ ñaày ñuû veà phöông tieän hoïc taäp. Nhöng nay, neáu coù theâm moät chöông
trình moâ phoûng caùc hoï vi ñieàu khieån, hay vi xöû lyù, giao tieáp maùy tính vôùi vi xöû lyù
ñeå truyeàn file… thì taát nhieân seõ coù maët tích cöïc, mang theâm nhieàu lôïi ích cho vieäc
hoïc.
“Giao tieáp maùy tính vôùi vi xöû lyù” coøn laø moät chöùng thöïc veà giao tieáp _
nhöõng gì ñaõ ñöôïc hoïc _ treân chính kit thöïc taäp, ñieàu ñoù seõ kích hoaït söï tìm toøi,
söï ham thích hieåu bieát cuûa sinh vieân.
III. GIÔÙI HAÏN VAÁN ÑEÀ
Ñaây laø moät chuyeân ñeà thuù vò, coù nhieàu vaàn ñeà ñaùng quan taâm, nhöng do
nhöõng giôùi haïn veà thôøi gian vaø kieán thöùc, neân trong ñoà aùn naøy, ngöôøi vieát chæ coù
theå trình baøy nhöõng phaàn sau:
− Khaùi quaùt Kit 8085 söû duïng, caùc linh kieän coù lieân quan tröïc tieáp
ñeán giao tieáp.
− Caùch thöùc söû duïng kit, nhöõng hoaït ñoäng beân trong kit veà leänh, döõ
lieäu … maø sau ñoù seõ ñöôïc thay theá baèng caùch naïp töø maùy tính.
− Giao tieáp maùy tính.
− Moät soá ñieåm caàn löu yù khi vieát moät chöông trình baèng ngoân ngöõ
gôïi nhôù cho chöông trình dòch Assembler ñeå taïo ra moät file coù phaàn môû roäng
.prn.
− Caáu truùc moät file .prn, nhöõng soá lieäu naøo caàn xuaát.
− Ñoâi neùt veà ngoân ngöõ C, chöông trình Download
− Chöông trình nhaän döõ lieäu.
IV. MUÏC ÑÍCH NGHIEÂN CÖÙU
Tröôùc maét: ñaây laø moät vaán ñeà hay, ñaõ thu huùt ngöôøi vieát töø laâu maø nay môùi
coù dòp thöïc hieän, vaø cuõng laø nhu caàu caàn thieát trong thöïc teá.
Laâu daøi: tuy chæ laø moät thieát keá ñôn giaûn, nhöng laø moät cô sôû ban ñaàu coù
theå phaùt trieån theâm ra höôùng toång quaùt.
V. XAÙC ÑÒNH THUAÄT NGÖÕ
Töïa ñeà taøi laø “Giao tieáp maùy tính vôùi kit vi xöû lyù 8085”. Thöïc chaát, vaán ñeà
giao tieáp chæ laø moät cô sôû, phöông tieän chuû yeáu. Coøn saûn phaåm cuûa ñeà taøi laø moät
giao dieän treân maøn hình vi tính maø trong ñoù, ngöôøi duøng cho theå choïn fie caàn
truyeàn, vaø truyeàn xuoáng kit qua moät port naøo ñoù ñeå naïp döõ lieäu vaøo RAM.
Ñeà taøi naøy chæ thöïc hieän vieäc naïp döõ lieäu vaøo RAM maø sau ñoù seõ coù nhöõng
phaùt trieån khaùc. Thöïc teá ñeà ra laø vieäc thöïc haønh laäp trình vi xöû lyù treân kit,
chöông trình chæ laø ñeå thöïc taäp, chuû yeáu chæ naïp vaøo RAM, maø vieäc naïp döõ lieäu
vaøo Kit maát nhieàu thôøi gian, vaø muïc ñích cuûa ñeà taøi tröôùc tieân laø ñeå giaûi quyeát
vaán ñeà ñoù, sau ñoù coù theå phaùt trieån leân ñeå ñoïc caùc vuøng RAM, EPROM.
LUAÂÄN VAÊN TOÁT NGHIEÄP 5
Chöông II:
Töø vaán ñeà ñaët ra nhö ôû chöông 1 ñaõ trình baøy, ngöôøi thöïc hieän ñeà taøi ñaõ
tieán haønh giaûi quyeát theo höôùng sau:
− Xaùc ñònh thieát bò giao tieáp: Kit vi xöû lyù 8085 ñaõ coù saün caùc IC ngoaïi vi 8255
laøm nhieäm vuï giao tieáp, chæ caàn choïn IC, xaùc ñònh ñòa chæ cuûa IC ñoù, ñòa chæ
cuûa caùc port vaøo ra, mode hoaït ñoäng cuûa caùc port, xaùc ñònh caùc ñieåm noái keát
phaàn cöùng vôùi maùy tính vaø vieát chöông trình nhaän, phaùt döõ lieäu.
− Xaùc ñònh coång giao tieáp: ñoái vôùi maùy tính: choïn coång LPT1 (maø sau naøy coù
theå phaùt trieån ñeå coù theå söû duïng caû LPT2, COM1, COM2) vôùi phöôùng phaùp
giao tieáp song song baát ñoàng boä.
− Xaây döïng giao dieän treân maøn hình maùy tính:Yeâu caàu caàn coù …… vaø phuø hôïp
vôùi ngöôøi söû duïng. Sau ñoù tieán haønh vieát giaûi thuaät, vaø baét tay vaøo vieát
chöông trình. ÔÛ ñaây, ngöôøi thöïc hieän ñaõ vieát chöông trình truyeàn döõ lieäu
trong moâi tröôøng Borland C 3.1. Trong quaù trình vieát, phaûi giaûi quyeát nhöõng
khoù khaên phaùt sinh moät caùch cuï theå.
− Vieát chöông trình truyeàn, nhaän döõ lieäu vôùi Kit.
− Gheùp noái caùc phaàn laïi.
− Thöû nghieäm.
− Söûa loãi.
− Phöông phaùp chuû yeáu laø tham khaûo taøi lieäu vaø thöïc nghieäm
LUAÂÄN VAÊN TOÁT NGHIEÄP 7
Chöông III:
8085 laø moät boä vi xöû lyù 8 bit do Intel saûn xuaát, ñaàu tieân vaøo naêm 1977. Noù
coù khaû naêng ñònh ñòa chæ cho boä nhôù tôùi 64 Kbyte, IC naøy coù 40 chaân, daïng DIP,
söû duïng nguoàn ñôn + 5V.
Chöùc naêng, daïng tín hieäu, traïng thaùi caùc chaân cuûa 8085 ñöôïc cho ôû baûng
sau:
Baûng 1:
8085A: 6MHz
8085A-2: 10MHz
LUAÂÄN VAÊN TOÁT NGHIEÄP 9
8085A-1:12MHz
7,8,9 RST 7.5, 6.5, 5.5 I Restart Intrerupt Repuest: laø caùc tín
hieäu ngaét coù theå ngaên ñöôïc. RST 7.5
coù theå ñöôïc kích baèng caïnh, RST 6.5
vaø 5.5 coù theå ñöôïc kích baèng möùc.
20 Vss Ground.
29,33,34 S0,S1, IO/M\ O,O-3 Machine Cycle Status: 3 bit naøy cho
bieát traïng thaùi chu kyø maùy.
0 0 1 Memory Write
0 1 0 Memory Read
0 1 1 Op-code fetch.
1 0 1 IO write.
1 1 0 IO read.
1 1 1 Interrupt
Ackowledge.
35 READY I Ready laø tín hieäu traû lôøi töø boä nhôù
hoaëc thieát bò ngoaïi vi IO cho
microprocesser bieát ñeå
microprocessor coù theå hoaøn thaønh
chu kyø maùy ñang thöïc hieän.
Caùc chaân cuûa IC ñöôïïc boá trí nhö hình veõ sau (hình 2):
X1 1 40 Vcc
X2 2 39 HOLD
RESET(OUT) 3 38 HLDA
SOD 4 37 CLK(OUT)
SID 5 36 RESET IN
TRAP 6 35 READY
RST7.5 7 34 IO/M
RST6.5 8 33 S1
RST5.5 9 32 RD
INTR 10
8085 31 WR
INTA 11 30 ALE
AD0 12 29 S0
AD1 13 28 A15
AD2 14 27 A14
AD3 15 26 A13
LUAÂÄN VAÊN TOÁT NGHIEÄP 12
Toaøn boä caùc tín hieäu cuûa 8085 coù theå ñuôïc phaân thaønh 6 nhoùm:
(4) Nguoàn cung caáp vaø caùc tín hieäu taàn soá
+5V GND
1 2 40 20
X1 X2 Vcc Vss
Serial SID 5 A15 28
I/O SOD 4 High Outer
Ports Address Bus
TRAP 6 A8 21
RST 7.5 7
RST 6.5 8
RST 5.5 9
10
8085
Interrupts INTR 19
and AD7
Externally Multiplexed
Initiated Address/Data Bus
Signals
READY 35 AD0 12
HOLD 39
RESET IN 36 30 ALE
29 S0
33 S1 Control
34 IO/M and
32 RD
31 WR Status Signals
11 INTA
18 HLDA
21 21
RESET CLK
OUT OUT
LUAÂÄN VAÊN TOÁT NGHIEÄP 13
Instruction
Accumulater Temp. Reg. Register Multiplexer
(8) (8) (8)
(8) (8)
W Z
Temp. Reg. Temp. Reg.
(8) (8)
B C
Reg. Reg.
Flag (8) (8) Register
Flip Flops D E Array
Re Reg. Reg.
g. (8) (8)
Instruction H L
Decoder Sel Reg. Reg.
Arithmatic and ect
Logic Machine Stack Pointer
Unit Cycle (16)
Encoding Program Counter
(ALU)
(16)
(8)
Incrementer / Decrementer
Address Lactch (16)
Power Supply
+5V
GND
CLK OUT RD WR ALE S0 S1 IO/M HLDA RESET OUT AD15 - AD8 AD7 - AD0
READY HOLD RESET IN Address Bus Address Data Bus
Moät leänh (Instruction) laø moät maãu nhò phaân (binary pattern) ñöôïc thieát keá
beân trong vi xöû lyù ñeå thöïc hieän moät chöùc naêng cuï theå (Instruction set), xaùc ñònh
caùc chöùc naêng maø vi xöû lyù coù theå thöïc hieän. Taäp leänh cuûa 8085 coù 74 leänh (hôn
8080 hai leänh), caùc leänh naøy coù theå ñöôïc phaân thaønh 5 nhoùm chöùc naêng :
− Caùc hoaït ñoäng (sao cheùp) truyeàn döõ lieäu
− Caùc hoaït ñoäng toaùn hoïc
− Caùc hoaït ñoäng logic
− Caùc hoaït ñoäng reõ nhaùnh
− Vaø, caùc hoaït ñoäng ñieàu khieån
Taäp leänh vi xöû lyù 8085 ñöôïc phaân thaønh 3 nhoùm tuyø theo kích côõ töø :
1. Caùc leänh moät töø hoaëc 1 byte
2. Caùc leänh hai töø hoaëc 2 byte
3. Caùc leänh ba töø hoaëc 3 byte
Leänh moät byte chöùa maõ hoaït ñoäng (Opcode) vaø toaùn töû (Operand) trong
cuøng moät byte.
Trong leänh hai byte, byte thöù nhaát neâu leân maõ hoaït ñoäng vaø theo sau laø
toaùn töû.
Ñoái vôùi leänh ba byte, byte ñaàu tieân cho bieát maõ hoaït ñoäng, 2 byte theo sau
laø döõ lieäu (noäi dung hoaëc ñòa chæ) 16 bit.
I.2. IC NGOAÏI VI 8255:
I.2.1. Caáu truùc:
I.2.1.1. Phaàn cöùng:
8255 laø moät thieát bò I/O giao tieáp song song, noù coù theå ñöôïc laäp trình ñeå
truyeàn döõ lieäu döôùi caùc ñieàu kieän khaùc nhau, töø I/O ñôn giaûn ñeán I/O coù ngaét. Noù
khaù linh hoaït, ña naêng vaø tinh teá (khi coù nhieàu coång I/O ñöôïc ñoøi hoûi), nhöng
cuõng phöùc taïp. Noù laø moät thieát bò I/O phoå duïng coù theå ñöôïc söû duïng vôùi haàu heát
baát kyø boä vi xöû lyù naøo.
8255 coù 40 chaân daïng DIP nhö hình 5.
8255
Group
PA3 40 PA4 A
1 Group Port I/O
A PA7-PA0
PA2 2 39 PA5 Control A
(8)
PA1 3 38 PA6
PA0 4 37 PA7
RD 5 36 WR
CS 6 35 RESET Group
GND 34 D0 A
7 Bidirectional Port C I/O
A1 8 33 D1 Data Bus Upper PA7-PA0
(4)
A0 9 32 D2
Data
PC7 10 31 D3 Bus
PC6 11 30 D4 Buffer Group
PC5 12 29 D5 A
D7-D0 Port C I/O
PC4 13 28 D6 Lower PA7-PA0
LUAÂÄN VAÊN TOÁT NGHIEÄP 15
Sô ñoà khoái treân hình 5. trình baøy hai coång 8 bit (A vaø B) vaø hai coång 4 bit
(CU vaø CL) boä ñieän tuyeán döõ lieäu, vaø logic ñieàu khieån. Hình 5.9 (b) trình baøy moät
sô ñoà ñôn giaûn hoùa nhöng môû roäng cuûa caáu truùc beân trong, chöùa moät thanh ghi
ñieåu khieån. Sô ñoà khoái naøy chöùa taát caû caùc phaàn töû cuûa moät thieát bò laäp trình;
coång C thöïc hieän chöùc naêng töông töï chöùc naêng cuûa thanh ghi traïng thaùi, ngoaøi
ra coøn cung caáp caùc tín hieäu baét tay.
I.2.1.2. Phaàn meàm:
Töø ñieàu khieån
Hình 6 trình baøy moät thanh ghi ñöôïc goïi laø thanh ghi ñieàu khieån (control
register). Noäi dung cuûa thanh ghi naøy, goïi laø töø ñieàu khieån (control word), neâu
roõ moät chöùc naêng I/O cho moãi coång. Thanh ghi coù theå ñöôïc xaâm nhaäp ñeå ghi töø
LUAÂÄN VAÊN TOÁT NGHIEÄP 16
ñieàu khieån. Khi A0 vaø A1 ôû möùc logic 1, nhö ñaõ ñeà caäp ôû treân. Thanh ghi naøy
khoâng theå bò xaâm nhaäp ñoái vôùi hoaït ñoäng Ñoïc.
Bit D7 cuûa thanh ghi ñieàu khieån neâu roõ hoaëc chöùc naêng I/O hoaëc chöùc naêng
Ñaët/Ñaët laïi bit nhö phaân loaïi trong Hình 5.8 (b). Neáu D7 = 1caùc bit D6 ÷ D5 quyeát
ñònh caùc chöùc naêng I/O ôû caùc moát khaùc nhau. Neáu bit D7 = 0, coång C hoaït ñoäng ôû
moát Ñaët/Ñaët laïi bit (BSR). Töø ñieàu khieån BSR khoâng aûnh höôûng ñeán caùc chöùc
naêng cuûa caùc coång A vaø B.
LUAÂÄN VAÊN TOÁT NGHIEÄP 17
D7 D6 D5 D4 D3 D2 D1 D0 GROUP B
PORT C (LOWER)
1=INPUT
0=OUTPUT
PORT B
1=INPUT
0=OUTPUT
MODE SELECTION
0=MODE 0
1=MODE 1
GROUP A
PORT C (UPPER)
1=INPUT
0=OUTPUT
PORT A
1=INPUT
0=OUTPUT
MODE SELECTION
00=MODE 0
01=MODE 1
1X=MODE 2
Ñeå A, C laø coång nhaäp (8 bít), B laø coång xuaát(8bít), vaø choïn ngoaïi vi coù ñòa
chæ töø 00 – 03 thì phaûi laøm nhö sau:
Gôûi töø ñieàu khieån 99hex vaøo thanh ghi ñieàu khieån.
Xuaát töø ñieàu khieån ra thanh ghi ñieàu khieån coù ñòa chæ 03hex.
I.3. IC GIAÛI MAÕ HIEÅN THÒ 8279:
I.3.1. Caáu truùc 8279
I.3.1.1. Phaàn cöùng:
8279 laø moät phöông phaùp phaàn cöùng ñeå giao tieáp vôùi baøn phím ma traän vaø
hieån thò ña hôïp. Baát lôïi cuûa phöông phaùp duøng phaàn meàm laø vi xöû lí bò baän trong
luùc kieåm tra vaø laøm töôi hieån thò. 8279 seõ thay theá vi xöû lí ñaûm traùch hai nhieäm
vuï naøy.
8279 (Hình ) laø moät thieát bò daïng DIP _ 40, coù hai phaàn chính : baøn phím
vaø hieån thò. Phaàn baøn phím coù theå ñöôïc noái vôùi moät ma traän toái ña 64 phím, söï
goõ phím ñöôïc giaûi naåy vaø maõphím ñöôïc löu tröõ vaøo boä nhôù FIFO beân trong (First
_ In _ First _ Out : Vaøo tröôùc, ra tröôùc) , vaø moät tín hieäu ngaét ñöôïc phaùt ra moãi
laàn goõ phím. Phaàn hieån thò coù theå cung caáp moät hieån thò coù queùt toái ña 16 Led.
Phaàn naøy coù boä nhôù RAM 16 x 8, coù theå ñöôïc söû duïng ñoïc / ghi thoâng tin cho caùc
muïc ñích hieån thò. Phaàn hieån thò coù theå ñöôïc khôûi taïo ôû daïng ghi phaûi (right
entry) hoaëc ghi traùi (left entry).
Taàn soá xung ñoàng hoà caáp cho 8279 toái ña laø 3,125MHz
CL RESE DB0- RD WR CS A0 IR
FIFO/Sensor
Data I/O Control RAM
Buffer Status
Timing
and
Display Control
Registers Scan Counter Return
MSB LSB
Maõ 0 0 0 D D K K K
Trong ñoù, D D laø moát hieån thò vaø K K K laø moát baøn phím
DD
LUAÂÄN VAÊN TOÁT NGHIEÄP 23
KKK
0 0 0 Baøn phím queùt coù laäp maõ _ Khoùa ngoaøi 2 phím
0 0 1 Baøn phím queùt coù giaûi maõ _ Khoùa ngoaøi 2 phím
0 1 0 Baøn phím queùt coù laäp maõ _ Xoay voøng N phím
0 1 1 Baøn phím queùt coù giaûi maõ _ Xoay voøng N phím
1 0 0 Ma traän caûm bieán, queùt coù laäp maõ
1 0 1 Ma traän caûm bieán, queùt coù giaûi maõ
1 1 0 Ngoõ vaøo Strob, queùt hieån thò coù laäp maõ
1 1 0 Ngoõ vaøo Strob, queùt hieån thò coù giaûi maõ
Trong suoát thôøi gian RAM hieån thò ñang bò xoaù (∼ 160 μS), noù khoâng theå
ñöôïc ghi vaøo. Bit coù troïng soá cao nhaát (MSB) cuûa töø traïng thaùi ñöôïc ñaët trong
suoát thôøi gian naøy. Khi RAM hieån thò trôû neân khaû duïng trôû laïi, bit naøy töï ñoäng
ñöôïc ñaët laïi.
LUAÂÄN VAÊN TOÁT NGHIEÄP 24
Döïa vaøo 3 bit A13, A14, A15 ñeå xaùc ñònh caùc vuøng ROM, RAM nhö sau:
74138
O0 CS\ROM1
A13 A O1 CS\ROM2
A14 B O2 CS\RAM1
A15 C O3 CS\RAM2
O4 CS\RAM3
O5 CS\8279
O6 No use
O7 No use
Döïa vaøo 3 bit A3, A4, A5 coù theå xaùc ñònh ngoaïi vi söû duïng nhö sau:
74138
O0 CS\8255A
A3 A O1 CS\8255B
A4 B
A5
O2 CS\8253A
C
O3 CS\8253B
O4 CS\8259
O5 CS\8251
O6 CS\ADC0805
O7 CS\DAC0808
Chöông IV:
GIAO TIEÁP
MAÙY TÍNH VÔÙI
KIT THÖÏC TAÄP
VI XÖÛ LYÙ 8085
LUAÂÄN VAÊN TOÁT NGHIEÄP 28
Giao tieáp giöõa maùy tính vaø thieát bò ngoaïi vi coù theå baèng moät trong caùc caùch
sau:
I. GIAO TIEÁP BAÈNG SLOT-CARD:
Trong maùy tính, treân main board hoaëc IO-card, thöôøng cheá taïo saün caùc
raõnh caém (slot) cho pheùp môû roäng boä nhôù, caøi ñaët theâm phaàn cöùng, môû roäng
phaïm vi öùng duïng cho maùy tính.
Ñeå söû duïng ñöôïc caùc raõnh caém naøy, caàn phaûi coù taøi lieäu chính xaùc veà caùc
thoâng soá caàn thieát, ví duï ñòa chæ cuûa coång laø bao nhieâu, thuoäc loaïi raõnh bao nhieâu
bit, theo chuaån naøo, kich thöôùc phaàn maïch in caém vaøo , ñoä daøy maïch in, raõnh
nguoàn, raõnh döõ lieäu, raõnh döï tröõ, …
II. GIAO TIEÁP BAÈNG COÅNG MAÙY IN:
Moïi maùy tính ñeàu coù coång maùy in ñaët phía sau maùy. Coång maùy in khoâng chæ
ñeå keát noái vôùi maùy in maø coøn coù theå keát noái vôùi nhieáu loaïi thieát bò ngoaïi vi khaùc
cho muïc ñích ño löôøng vaø ñieàu khieån,…
Coång maùy in laø loaïi coång 25 chaân, döõ lieäu truyeàn song song, deã keát noái, caùc
ñòa chæ cuûa coång cuûa caùc maùy tính haàu nhö gioáng nhau.
Giao tieáp baèng coång maùy in goïi laø giao tieáp song song baát ñoàng boä. Trong
kieåu giao tieáp naøy, nôùi phaùt tín hieäu vaø nôùi nhaän tín hieäu ñeàu coù xung baùo phaùt
vaø xung baùo nhaän, taàn soá xung clock taïi nôi phaùt vaø taàn soá xung clock taïi nôi thu
khoâng caàn quan taâm.
III. GIAO TIEÁP BAÈNG COÅNG COM:
Coång COM ñöôïc söû duïng khaù phoå bieán. Döõ lieäu truyeàn ôû coång naøy thuoäc
daïng döõ lieäu noái tieáp. Tín hieäu truyeàn ôû coång naøy coù theå truyeàn ñi xa nhôø coù caáu
taïo ñöôøng daây caùp ít sôïi hôn coång song song, möùc aùp tín hieäu cao.
Coång COM coù loaïi 9 chaân vaø loaïi 25 chaân nhö coång song song, coù toång coäng
8 ñöôøng daãn tín hieäu khoâng keå ñöôøng noái ñaát, töø maùy tính ñi ra laø loaïi phích caém
nhieàu chaân khaùc vôùi coång song song.
Coång COM, coøn goïi laø coång noái tieáp theo chuaån RS-232. Chuaån RS-232 töø
naêm 1969 ñöôïc chaáp nhaän chuyeân duøng cho truyeàn soá lieäu vaø caùc ñöôøng noái
kieåm tra giöõa terminal vaø moderm, toác ñoä cöïc ñaïi laø 20Kbps, vôùi khoaûng caùc toái
ña khoâng quaù 15m. Ñaây laø laïi giao tieáp khoâng caân baèng coù driver.
Möùc aùp tín hieäu treân ñöôøng daây laø +15V/-15V. Treân ñöôøng daây, möùc logic 1
coù ñieän aùp töø 5V ñeán 15V vaø möùc logic 0 töø –5V ñeán –15V. möùc aùp naøy khoâng
töông thích TTL do ñoù thöôøng phaûi söû duïng theâm caùc IC chuyeân duïng MC1488,
MC1489 ñeå thay ñoåi möùc logic cho töông thích TTL.
Giao tieáp noái tieáp coøn chia ra noái tieáp baát ñoàng boä vaø noái tieáp ñoàng boä (söû
duïng caùc chuaån UART duøng CMOS 6402, USART duøng ngoaïi vi 8251, chuaån
ACIA duøng NMOS 6850 …).
IV. CHOÏN PHÖÔNG PHAÙP GIAO TIEÁP VAØ COÅNG KEÁT NOÁI:
Trong ñeà taøi naøy, vì lyù do thôøi gian coù haïn, neân ngöôøi thöïc hieän ñeà taøi chæ
coù theå söû duïng moät phöông phaùp truyeàn döõ lieäu, ñoù laø truyeàn döõ lieäu song song
baát ñoàng boä qua coång maùy in LPT1.
Coång LPT1 laø moät coång song song, döõ lieäu ñöôïc truyeàn vôùi toác ñoä khaù cao
töø maùy tính, do ñoù toác ñoä truyeàn döõ lieäu chung chæ coøn phuï thuoäc vaøo Kit.
LUAÂÄN VAÊN TOÁT NGHIEÄP 29
Hình daïng moät coång LPT1 ñöôïc cho trong hình sau:
13 1
25 14
Coång maùy in LPT1 coù ñòa chæ cô baûn laø 378Hex vaø coång LPT2 coù ñòa chæ cô
baûn laø 78Hex.
Caùc thanh ghi trong maùy tính keát noái vôùi coång maùy in:
Thanh ghi döõ lieäu (Data register, ñòa chæ = ñòa chæ cô baûn )
LUAÂÄN VAÊN TOÁT NGHIEÄP 30
D7 D6 D5 D4 D3 D2 D1 D0
D0 (Pin 2)
D1 (Pin 3)
D2 (Pin 4)
D3(Pin 5)
D4 (Pin 6)
D5 (Pin 7)
D6 (Pin 8)
D7 (Pin 9)
Thanh ghi traïng thaùi(status register, ñòa chæ = ñòa chæ cô baûn +1)
D7 D6 D5 D4 D3 0 0 0
ERROR(Pin 15)
SLCT(Pin 13)
PE(Pin 12)
ACK(Pin 15)
BUSY(Pin 11)
|
Thanh ghi ñieàu khieån(control register, ñòa chæ = ñòa chæ cô baûn + 2)
D7 D6 D5 D4 D3 D2 D1 D0
| D0 (Pin 1)
| D1 (Pin 14)
D2 (Pin 16)
D3(Pin 17)
|
IRQ-
Enable
Hình 12: Keát noái caùc thanh ghi ôû coång maùy in cuûa maùy tính PC.
Coång LPT laø coång gheùp noái song song, taát caû nhöõng ñöôøng daãn cuûa coång
naøy ñeàu töông thích TTL, nghóa laø chuùng ñeàu cung caáp moät möùc aùp naèm giöõa 0
vaø 5V. Do ñoù, raát thích hôïp cho keát noái vôùi Kit.
Nhìn vaøo baûng coâng duïng caùc chaân cuûa coång LPT vaø 3 thanh ghi cuûa maùy
tính, ta thaáy coù theå söû duïng thanh ghi data laø thanh ghi phaùt, coù nhieäm vuï
truyeàn döõ lieäu ra ngoaøi, vaø thanh ghi ñieàu khieån seõ gôûi tín hieäu ñieàu khieån cho
Kit, coøn thanh ghi traïng thaùi seõ nhaän tín hieäu baùo traïng thaùi hieän taïi cuûa Kit veà
maùy tính.
Ñeå keát noái giöõa Kit vaø maùy tính trong tröôøng hôïp naøy, phaûi söû duïng IC
giao tieáp ngoaïi vi 8255 ñeå xuaát vaø nhaän döõ lieäu. Coøn veà phía maùy tính, coù theå
duøng ngoân ngöõ laäp trình C ñeå ñoïc vaø xuaát caùc thanh ghi döõ lieäu. Ñeå keát noái ñôn
giaûn, coù theå khôûi taïo 8255 ôû mode 0 vôùi port A ñoïc thanh ghi data, port B xuaát
traïng thaùi traû veà cho thanh ghi trang thaùi, vaø port C duøng ñeå nhaän tín hieäu ñieàu
khieån töø thanh ghi ñieàu khieån cuûa maùy tính.
LUAÂÄN VAÊN TOÁT NGHIEÄP 31
Chöông V:
Symbols:
No Fatal error(s)
Vaán ñeà ñaët ra laø laøm theá naøo ñeå loïc ra ñöôïc noäi dung chæ treân theo thöù töï
ñuùng nhö noäi dung naïp vaøo Kit. Vaán ñeà naøy seõ ñöôïc giaûi quyeát ôû chöông keá:
Chöông trình DownLoad.
LUAÂÄN VAÊN TOÁT NGHIEÄP 35
Chöông VI:
CHÖÔNG TRÌNH
DOWNLOAD
LUAÂÄN VAÊN TOÁT NGHIEÄP 36
nhôø döïa treân caùc ñoái töôïng neân tính tieán hoùa vaø môû roäng
raát cao.
Trong phaàn vieát chöông trình giao dieän vi tính, ngöôøi vieát ñaõ choïn phöông
phaùp laäp trình höôùng ñoái töông. Nhôø nhöõng öu ñieåm treân, phöông phaùp naøy cho
pheùp boå sung moät caùch deã daøng, taïo ñieàu kieän thuaän lôïi cho vieäc boå sung sau naøy
neáu caàn.
III. PHÖÔNG PHAÙP LAÄP TRÌNH HÖÔÙNG ÑOÁI TÖÔÏNG TRONG C
III.1. Caùc khaùi nieäm:
Theá giôùi thöïc Phöông phaùp laäp trình Ngoân ngöõ laäp trình
Ñoái töôïng baát kyø trong Ñoái töôïng Bieán coù kieåu lôùp
theá giôùi thöïc (töông töï kieåu caáu truùc)
Khaùi nieän chung cuûa moät Lôùp ñoái töôïng Kieåu lôùp(Class-töông töï
ñoái töông kieåu caáu truùc)
Thuoäc tính ñöôïc quan Thuoäc tính Thaønh phaàn döõ lieäu cuûa
taâm cuûa ñoái töôïng kieåu lôùp
Khaû naêng coù theå thöïc Haønh ñoäng Thuû tuïc, haøm cuûa kieåu
hieän cuûa moät ñoái töông lôùp
III.2. Phöông phaùp:
III.2.1. Xaùc ñònh caùc lôùp ñoái töôïng, quan heä qua caùc lôùp naøy (xaây
döïng sô ñoà lôùp)
III.2.2. Thieát keá caùc lôùp (bieåu dieãn treân maùy tính)
− Thaønh phaàn döõ lieäu (thuoäc tính).
− Thaønh phaàn xöû lyù (haønh ñoäng).
III.2.3. Caøi ñaët caùc lôùp: Vieát haøm main()
III.2.4. Thöû nghieäm.
IV. Thöïc hieän vieát chöông trình DownLoad:
IV.1. Yeâu caàu cuûa giao dieän:
− Cho pheùp choïn file seõ truyeàn.
+ Baèng caùch goõ vaøo teân file
+ Baèng caùch click chuoät ñeå choïn
− Xem tröôùc vuøng nhôù caàn thieát seõ söû duïng ôû RAM ôû Kit 8085
− Choïn coång truyeàn.
− Truyeàn file coù kieåm tra.
IV.2. Choïn ngoân ngöõ laäp trình:
− Choïn ngoân ngöõ C vieát ôû moâi tröôøng Dos
− Lyù do: yeâu caàu thieát bò (maùy tính) khoâng cao, phuø hôïp kieán thöùc
ngöôøi vieát.
− Öu ñieåm: C laø moät coâng cuï laäp tình goïn nheï, chaïy nhanh, hieäu
quaû vaø kheùp kín. Vì söû duïng C ôû moâi tröôøng Dos neân khoâng caàn
phaûi kieåm soaùt caùc driver nhö neáu vieát ôû moâi tröôøng Windows.
Ngoân ngöõ C cho pheùp truy caäp tröïc tieáp caùc port, deå daøng kieåm
soaùt töøng bit döõ lieäu.
− Khuyeát ñieåm: Vuøng nhôù troáng ôû moâi tröôøng Dos chæ coù
640Kbyte, vaø sau khi khôûi ñoäng xong (ôû maøn hình dos) thì chæ
LUAÂÄN VAÊN TOÁT NGHIEÄP 38
coøn laïi treân döôùi 400Kbyte, khoâng cho pheùp taïo moät giao dieän
phöùc taïp. Ñoä phaân giaûi ôû cheá ñoä graph trong Dos khoâng theå so
saùnh vôùi moâi tröôøng Windows.
InitGraphics()
InitValues(…)
InitScreen()
InitMouse(…)
Khôûi S
CT baùo loãi
taïo
ø
Ñ
− Closegraph(): Ñoùng cheá ñoä ñoà hoïatröôùc khi thoaùt khoûi chöông trình.
− End: keát thuùc chöông trình.
Haøm Main() naøy ñöôïc vieát baèng ngoân ngöõ C :
void main(void)
{
InitGraphics();
InitValues("Chuong trinh truyen du lieu ra RAM");
InitScreen();
if (!InitMouse(&MainWindow.rViewPort))
{
OutMessage("Mouse driver not found. Init mouse and return");
getch();
closegraph();
exit(1);
}
ShowMouse();
MainProgram();
closegraph();
}
void main(void): void cho bieát raèng haøm main() khoâng traû veà moât giaù trò naøo,
nghóa laø trong haøm main naøy khoâng coù leänh return() hoaëc leänh laø moät leänh
return khoâng coù tham soâ. (void) cho bieát haøm main khoâng caàn ñoái soá ñöa vaøo.
Löu ñoà haøm Mainpro():
Begin
A
LUAÂÄN VAÊN TOÁT NGHIEÄP 41
A
GetEvent()
Truyeàn
Nhaán Esc Return file
− Khôûi taïo caùc giaù trò cho caùc oâ nhaäp text: treân maøn hình seõ coù khung cho
pheùp goõ vaøo teân file, chöông trình con naøy seõ khôûi taïo caùc toïa ñoä, maøu chöõ
cho text.
− Khôûi taïo caùc giaù trò cho caùc nuùt choïn: cuõng gioáng nhö treân, nhöng ñoái vôùi caùc
nuùt Send, Exit vaø nuùt Pulldown.
− Xuaát caùc oâ nhaäp text ra maøn hình.
− Xuaát caùc nuùt choïn ra maøn hình.
− GetEvent: chöông trình con laán bieán coá chuoät. Bieán coá naøy chöùa caùc thoâng
tin veà toïa ñoä chuoät, phím naøo cuûa chuoät ñöôïc click, thôøi gian click laàn cuoái, …
ñeå xaùx ñònh caùc leänh keá tieáp caàn thöïc hieän.
− Click vaøo oâ Open File: neáu bieán coá click chuoät xaåy ra taïi toïa ñoä cuûa cuûa oâ
Open file thì keát quaû click vaøo oâ naøy laø TRUE, thöïc hieän chöông trình con
nhaäp vaøo file caàn xuaát. Ngöôïc laïi thì boû qua.
− Click vaøo nuùt Pulldown: neáu bieán coá click chuoät xaåy ra taïi toïa ñoä cuûa cuûa nuùt
Pulldown thì keát quaû click vaøo oâ naøy laø TRUE, goïi chöông trình xuaát ra cöûa
soå choïn File, ngöôïc laïi thì boû qua.
− Click nuùt Send: neáu bieán coá click chuoät xaåy ra taïi toïa ñoä cuûa cuûa nuùt Send
thì keát quaû click vaøo oâ naøy laø TRUE, thöïc hieän xaùc nhaän file xuaát ñaõ nhaäp
vaøo chöa, neáu file xuaát chöa nhaäp vaøo thì baùo loãi vaø boû qua leänh Send, neáu
file xuaát ñaõ coù teân roài thì xuaát file.
− Click nuùt Exit: neáu bieán coá click chuoät xaåy ra taïi toïa ñoä cuûa cuûa nuùt Exit thì
keát quaû click vaøo oâ naøy laø TRUE, thöïc hieän xaùc nhaän muoán thoaùt khoûi
chöông trình, neáu xaùc nhaän ñuùng thì thoaùt, ngöôïc laïi thì boû qua leänh Exit.
− Nhaán Esc: neáu ngöôøi duøng nhaán vaøo nuùt Esc treân baøn phím thì bieán coá Nhaán
Esc seõ laø TRUE, thöïc hieän xaùc nhaän muoán thoaùt khoûi chöông trình, neáu xaùc
nhaän ñuùng thì thoaùt, ngöôïc laïi thì boû qua leänh thoaùt baèng nuùt Esc.
Sau ñoù, chöông trình laïi thöïc hieän voøng laëp taïi haøm laáy bieán coá chuoät cho
tôùi khi coù thao taùc môùi.
Giaû söû click chuoät vaøo oâ Open File, oâ naøy seõ ñoåi traïng thaùi, caùc kyùtöï trong
oâ seõ ñoåi maøu baùo traïng thaùi chôø nhaäp, nhaäp vaøo moät teân fie coù phaàn môû roäng laø
“prn” vôùi ñaày ñuû ñöôøng daãn, sau ñoù goõ phímEnter thì teân file seõ ñöôïc löu vaøo
moät bieán toaøn cuïc, vaø caùc ñòa chæ ñaàu vaø ñòa chæ cuoái cuûa chöông trình ngoân ngöõ
maùy seõ ñöôïc hieän leân ôû khung “Free memory request”, vaø moät doøng thoâng baøo
beân döôùi baùo cho bieát click Send ñeå truyeàn file.
Giaû söû tieáp tuïc click Send thì moät thoâng baùo xaùc nhaän seõ xuaát hieän, muoán
xaùc nhaän coù chaéc laø ngöôøi duøng muoán truyeàn file khoâng. Neáu traû lôøi Ok thì
chöông trình truyeàn file seõ ñöôïc goïi thi haønh.
Sau ñaây laø löu ñoà cuûa chöông trình con thöïc hieän vieäc truyeàn File.
Giaûi thích löu ñoà:
− Goïi chöông trình caét file: chöông trình caét file thöïc chaát laø moät chöông trình
con coù nhieäm vuï loïc ra nhöõng thoâng tin quan troïng trong file “x.prn” seõ
ñöôïc truyeàn ñi, vaø löu chuùng trong moät file “x.tmp” chæ xuaát hieän trong
khoaûng thôøi gian chöông trình ñang caét file. Sau ñoù file “x.tmp” naøy seõ bò
xoaù ñi khi quaù trình truyeàn file hoaøn taát. Quaù trình truyeàn file phaûi söû duïng
LUAÂÄN VAÊN TOÁT NGHIEÄP 43
böôùc naøy ñeå caùc quaù trình baét tay giöõa maùy tính vaø Kit ñöôïc oån ñònh (thöïc
nghieäm), vaø vieäc vieát chöông trình ñöôïc roõ raøng hôn.
− Goïi chöông trình xuaát file: chöông trình naøy seõ ñoïc file coù teân laø “x.tmp”
ñöôïc taïo töø chöông trình caét file. Chöông trình naøy seõ tuaàn töï ñoïc file, nhaän
tín hieäu baét tay vaø gôûi döõ lieäu cho ñeán khi heát file.
− Trong quaù trình truyeàn file, neáu coù söï coá, giaû söû khoâng baét tay ñöôïc vì lyù do
naøo ñoù, thì chöôn trình seõ ñôïi, thôøi gian keùo daøi seõ coi nhö vieäc truyeàn file bi
loãi, vaø thoâng baùo loãi seõ xuaát hieän.
− Neáu truyeàn thaønh coâng thì thoâng baùo hoaøn taát coâng vieäc.
− Return: Quay trôû veà chöông trình MainPro.
Trong haøm MainPro(), caàn quan taâm chöông trình con truyeàn file.
Begin
Sai
Thaønh
â
Ñuùn
Return
Hình 15: Löu ñoà chöông trình con coù nhieäm vuï truyeàn file.
Trong phaàn naøy, ta quay laïi coâng vieäc caét file ñaõ giôùi thieäu ôû muïc III cuûa chöông
V.
Chöông trình con caét file laø ñeå taïo ra moät file taïm thôøi coù phaàn môû roäng .tmp.
file naøy seõ laø moät file coù caáu truùc ñôn giaûn hôn file .prn raát nhieàu nhaèm ñeå giuùp
cho vieäc truyeàn file theâm ñôn giaûn.
Tröôùc heát haõy khaûo saùt moät file *.prn, file naøy ñöôïc dòch ra bôûi 1 chöông trình
dòch Assembler.
LUAÂÄN VAÊN TOÁT NGHIEÄP 44
Trong chöông trình, byte leänh ñeàu tieân baét ñaàu ôû ñòa chæ 0000hex. Nhaän xeùt raèng
moãi doøng leänh baét ñaàu bôû moät ñòa chæ boä nhôù, vaø lieàn sau ñòa chæ naøy laø moät daáu
nhaùy ñôn, maø daáu nhaùy ñôn ñaàu tieân chæ xuaát hieän taïi ñòa chæ cuûa doøng leänh ñaàu
tieân.
⇒ ñeå tìm ñòa chæ ñaàu tieân thì coù theå tìm daáu nhaùy ñôn ñaàu tieân.
Coøn ñòa chæ cuoái cuøng laø ñòa chæ cuûa byte cuoái cuøng cuûa doøng leänh cuoái cuøng.
Doøng leänh cuoái cuøng laø doøng leänh naèm gaàn töø “Macros” nhaát. Töø macros naøy
cuõng laø töø macros duy nhaát.
⇒ caùch tìm ñòa chæ cuoái cuøng nhö sau:
− Tìm töø Macros
− Doø ngöôïc trôû veà phíc treân cho ñeán khi gaëp daáu nhaùy ñôn ñaàu tieân
− Tieáp tuïc doø ngöôïc veà tröôùc, neáu trong voøng 10 kyù töï maø gaëp moât kyù töï
xuoáng doøng thì thì daáu nhaùy ñôn vöøa roài naèm ngay sau doøng leänh cuoái cuøng.
− Trong doøng leänh cuoái cuøng, tìm byte cuoái cuøng seõ tính ñöôïc ñòa chæ cuoái cuøng.
Caùch tìm moät doøng leänh:
− Khi gaëp moät daáu nhaùy ñôn, thì tìm moät kyù töï khaùc daáu nhaùy ñôn hoaëc
khoaûng traéng.
− Khi gaëp kyù töï ñaàu tieân, ñoù chính laø kyù töï ñaàu tieân cuûa byte leänh.
− Neáu sau 2 kyù töï cuûa leänh laø moät khoaûng traéng thì 2 kyù töï vöøa roài chính laø
moät maõ leänh.
− Neáu sau 2 lyù töï cuûa moât byte leänh khoâng coù khoaûng traéng naøo, thì 2 kyù töï
vöøa roài chính laø 2 cuûa 4 kyù töï baùo moät ñòa chæ.
− Neáu sau 2 kyù töï tính töø luùc baét ñaàu moät leänh laø 2 khoaûng traéng trôû leân thì 2
byte vöøa roài laø 2 byte cuoái cuøng cuûa moät doøng leänh.
− Baét ñaàu moät chu kyø môùi tìm doøng maõ leänh.
Löu maõ leänh vaøo file *.tmp:
− Ñaàu tieàn löu ñòa chæ ñaàu, ñòa chæ cuoái vaøo file.
− Neáu gaëp maõ leänh (2 kyù töï) thì ghi tieáp vaøo file.
− Neáu gaëp maõ ñòa chæ thì ñoåi choå 2 kyù töï sau vôùi 2 kyù töï tröôùc cuûa ñòa chæ.
− Ñeán khi gaëp ñòa chæ cuoái cuøng thì ghi vaøo 2 kyù töï cuoái cuøng vaø ñoùng file.
Symbols:
No Fatal error(s)
LUAÂÄN VAÊN TOÁT NGHIEÄP 45
Coâng vieäc treân ñöôïc moâ taû baèng löu ñoà sau:
Begin
Môû file
nguoàn
Tìm daáu “ ‘”
Ñ
Khoâng laø Ñoïc 2 kyù töï tieáp
khoaûng theo
S Löu 2 kyù töï
sau
Laø moät Ñ
khoaûng
Löu 2 kyù
t é töï
S
≥2
khoaûng
traéng
Ñ
S
> ñòa chæ
cuoái
Ñ
En
LUAÂÄN VAÊN TOÁT NGHIEÄP 46
Begin
Ñuùn
Xuaát dlieäu ra
b
Strobe=1
Sai
ACK=1 & Error=0
Ñuùn
AF=1
sai
Ñoïc Error=0
Ñuùn
AF=0
sai
Error=1
Ñuùn
Thu nible
th á
Xuaát 00 ra sai
data bus Ktra döõ
li
AF=0 Strobe=0
Chuaån bò döõ
lieäu keá tieáp Heát döõ
sai
Ñuùng
Return
LUAÂÄN VAÊN TOÁT NGHIEÄP 47
Hình 17: Löu ñoà chöông trình con xuaát döõ lieäu.
Sau khi caét file, moät file môùi ñaõ ñöôïc taïo ra. Chöông trình truyeàn file ñeán
böôùc xuaát file. Dó nhieân tröôùc khi xuaát file cuõng caàn coù nhöõng thuû tuïc môû file,
ñaët caùc möùc logic caàn thieát ñeå khôûi ñoäng coång: môû file hôïp leä, cho bit AF=0,
strobe=0.
Giaûi thích löu ñoà chöông trình xuaát file:
− Tröôùc tieân, maùy tính xuaát strobe=0, AF=0 baèng chaùch xuaát ra port
37Ahex soá 03hex (xem laïi thanh ghi ñieàu khieån ôû muïc IV chöông IV);
− Chöông trình xuaát baét ñaàu taïi begin.
− Ñoïc Busy\ cho tôùi khi baèng [1]: ñôïi kit phaùt ra Busy=[0] baùo hieäu ñaõ
saún saøng nhaän döõ lieäu.
− Neáu nhaän ñöôïc Busy\=[1] thì böôùc xuaát döõ lieäu ñöôïc thöïc hieän, töùc laø
luùc ñoù maùy tính ñoïc 2 kyù töï ñaàu tieân cuûa file .tmp vaø xuaát ra port 378
cuûa maùy tính.
− Strobe=[1]: ñeå baùo cho kit bieát döõ lieäu ñaõ ñöôïc göûi ra port ñeå kit bieát
maø ñoïc döõ lieäu vaøo.
− ACK=[1] vaø Error=[0]: khi nhaändl xong kit seõ baùo ACK=[1], Error=0
ñeå baùo cho maùy tính bieát Kit seõ göûi döõ lieäu ñeå kieåm tra ñuùng hay sai.
− AF=[1]: baùo cho Kit bieát maùy tính saún saøng nhaän döõ lieäu.
− Maùy tính ñoïc bit Error cho tôùi khi Error = [0] ñeå bieát Kit ñaõ göûi veà döõ
lieäu ñeå kieåm tra.
− Thu Nible cao: Nhaän döõ lieäu ñeå kieåm tra.
− Cho AF=[0]: ñaõ nhaän xong döõ lieäu.
− Ñoïc Error cho tôùi khi Error=[1] ñeå bieát ñaõ coù döõ lieäu môùi.
− Thu nible thaáp.
− Kieåm tra döõ lieäu: maùy tính seõ phaûi gheùp noái nible cao vôùi nible thaáp laïi
roài so saùnh vôùi döõ lieäu vöøa xuaát ra, neáu 2 döõ lieäu gioáng nhau thì keát quaû
xuaát döõ lieäu seõ laø ñuùng. Maùy tính seõ xuaát ra soá FFhex ôû thanh ghi data
ñeå baùo ñuùng, vaø xuaát AF=0 & strobe=0 ñeå baùo xuaát xong 1 byte döõ lieäu.
Ngöôïc laïi thì xuaát 00hex ra thanh ghi data vaø xuaát AF=0, strobe =0 ñeå
baùo keát quaû sai.
− Neáu keát quaû sai thì quay laïi xuaát laï byte vöøa roài ñaõ xuaát.
− Quay laïi töø ñaàu chöông trình xuaát döõ lieäu cho ñeán khi heát döõ lieäu.
IV.4. Chöông trình nhaän döõ lieäu ôû Kit:
Giaûi thích löu ñoà chöông trình nhaän döõ lieäu:
+ Chöông trình baét ñaàu taïi begin.
+ Tröôùc tieân phaûi khôûi taïo 8255 vôùi caùc cheá ñoä qui ñònh nhö sau:
− Port A: nhaän döõ lieäu töø thanh ghi data theo ket noái phaàn cöùng.
− Port B: xuaát traïng thaùi Kít traû veà maùy tính.
− Port C: nhaän tín hieäu ñieàu khieån töø thanh ghi ñieàu khieån cuûa maùy
tính.
LUAÂÄN VAÊN TOÁT NGHIEÄP 48
+ Sau ñoù baùo cho maùy tính bieát traïng thaùi baän. Muïc ñích cuûa coâng vieäc
naøy laø ñeå ñoàng boä thôøi ñieåm baét ñaàu chöông trình nhaän döõ lieäu vôùi
chöông trình xuaát döõ lieäu töø maùy tính.
+ Reset bieán ñeám ñòa chæ ñaàu vaø cuoái, nôi ñaët vuøng döõ lieäu nhaän ñöôïc töø
maùy tính.
+ Xuaát chöû Ready baùo cho ngöôøi söû duïng bieát traïng thaùi saún saøng nhaän
döõ lieäu cuûa kit. Chôø ngöôøi söû duïng goõ phím Go.
LUAÂÄN VAÊN TOÁT NGHIEÄP 49
Hình 18: Löu ñoà chöông trình nhaän döõ lieäu töø maùy tính gôûi xuoáng thieát bò thöïc
taäp vi xöû lyù 8085 (trang 1):
Begin
Baùo thieát bò
baän
“READY”
Chôø goõ
phím “Go”
Goõ phím
“Go”
“SENDING”
Busy=0
Saún saøng nhaän
döõ li
1
LUAÂÄN VAÊN TOÁT NGHIEÄP 50
S
Strobe=1
Ñ
Busy=1, ACK=0
S
AF=1
Ñ
Xuaát Nible cao
+Error=0
S AF=0
Ñ
Xuaát Nible thaáp
+Error=1
S Strobe=
0
Ñ
Ñoïc döõ lieäu
port A
S
(A)=FF
Ñ
Xöû lyù döõ lieäu
Busy=0
LUAÂÄN VAÊN TOÁT NGHIEÄP 51
Hình 18: Löu ñoà chöông trình nhaän döõ lieäu töø maùy tính gôûi xuoáng thieát bò thöïc
taäp vi xöû lyù 8085 (trang 2).
+ Khi phím Go ñöôïc goõ thì quaù trình nhaän döõ lieäu cuûa kit thöïc söï baét
ñaàu.
+ Kit baùo saún saøng chôø maùy tính göûi döõ lieäu xuoáng.
+ Ñoïc strobe cho tôùi khi baèng 1, ñeå bieát döõ lieäu ñaõ ñöôïc gôûi ra bus döõ
lieäu.
+ Xuaát Busy=1, ACK=0.
+ Ñoïc döõ lieäu vaø cho ACK=1. Luùc naøy kit ñaõ nhaän ñöôïc döõ lieäu nhöng
chöa bieát döõ lieäu coù chaéc chaén ñuùng khoâng. Sau ñoù baét ñaàu kieåm tra.
+ Ñoïc AF cho tôùi khi baèng 1, bieát maùy tính saún saøng nhaän döõ lieäu kieåm
tra.
+ Xuaát nible cao cuûa döõ lieäu kieåm tra (baèng 4 bit cao cuûa port B) vaø bit
Error=0 (bit PB3).
+ Ñoïc AF cho tôùi khi baèng 0, ñeå bieát maùy tính saún saøng nhaän4 bit thaáp
cuûa döõ lieäu kieåm tra.
+ Xuaát 4 bit thaáp vaø Error baèng 1.
+ Luùc naøy, maùy tính ñang nhaän vaø so saùnh döõ lieäu ñaõ gôûi ñi. Vaø keát quaû
so saùnh ñöôïc baùo cho kit ôû thanh ghi döõ lieäu, töùc portA cuûa 8255. Kit
ñoïc strobe cho tôùi khi strobe baèng [0] bieát keát quaû kieåm tra ñaõ saún
saøng.
+ Ñoïc port A laáy keát quaû kieåm tra.
+ Neáu keát quaû kieåm tra laø ñeùng thì thöïc hieän khaâu xöû lyù döõ lieäu (löu döõ
lieäu vaøo nôi caàn thieát) vaø quay laïi nhaän döõ lieäu keá tieáp. Neáu keát quaû laø
sai thì boû qua khaâu xöû lyù döõ lieäu maø quay trôû laïi nhaäp laïi döõ lieäu cuõ.
Quaù trình xaåy ra cho ñeán khi khaâu xöû lyù döõ lieäu nhaän ra ñaõ nhaäp ñeán döõ
lieäu cuoái cuøng thì keát thuùc khaâu xöû lyù seõ thoaùt nhö löu ñoà sau ñaây:
Start
A
1
LUAÂÄN VAÊN TOÁT NGHIEÄP 52
Hình 19: Löu ñoà chöông trình xöû lyù döõ lieäu (trang1).
A
1
End.
Busy = 0
End.
Hình 19: Löu ñoà chöông trình xöû lyù döõ lieäu (trang 2).
Yù töôûng: Nhaäp 2 ñòa chæ ñaàu vaø cuoái vaøo 2 caëp thanh ghi HL vaø DE. Caëp
thanh ghi HL coøn ñöôïc coi laø con troû ñòa chæ troû ñeán oâ seõ chöùa döõ lieäu.
LUAÂÄN VAÊN TOÁT NGHIEÄP 53
Chöông trình seõ so saùnh ñòa chæ maø con troû troû ñeán vôùi ñòa chæ keát thuùc. Neá
chöa baèng thì löu döõ lieäu. neáu baèng thì thoaùt chöông trình.
Giaûi thích löu ñoà:
+ Chöông trình con baét ñaàu ôû start.
+ Boán böôùc so saùnh ñaàu tieân ñeå nhaäp ñòa chæ ñaàu, cuoái vaøo 2 caëp thanh
ghi.
+ Neáu noäi dung thanh ghi C lôùn hôn 3 thì 2 caëp thanh ghi ñaõ nhaän ñaày ñuû
caùc ñòa chæ ñaàu cuoái. Neân chöông trình seõ caát noäi dung vuûa nhaän ñöôïc
vaøo oâ nhôù coù ñòa chæ ghi trong caëp thanh ghi HL.
+ Quay laïi nhaän döõ lieäu keá tieáp.
+ Neáu con troû ñaõ troû ñeán ñòa chæ cuoái, thì chöông trình ñaõ ñöôïc nhaän ñaày
ñuû, luùc naøy seõ xuaát ra töø “End,” ñeå baùo hoaøn taát chöông trình.
+ Chaám döùt chöông trình.
LUAÂÄN VAÊN TOÁT NGHIEÄP 54
Chöông VII:
KEÁT LUAÄN
Qua 7 tuaàn ngaén nguûi, ngöôøi thöïc hieän ñeà taøi ñaõ hoaøn taát coâng trình.
Muïc ñích cuûa ñeà taøi laø hoaøn thaønh moät chöông trình, nhö moät coâng
cuï hoïc taäp, coù khaû naêng ñoïc moät file döõ lieäu ñaõ ñöôïc löu treân maùy tính vaø
sau ñoù, loïc nhöõng noäi dung caàn thieát cho baøi thöïc taäp vi xöû lyù, roài truyeàn
taûi noäi dung ñoù vaøo boä nhôù RAM ôû kit thöïc taäp 8085.
Ñeà taøi ñaõ nhaèm vaøo nhöõng noäi dung chính sau:
Thöù nhaát: giôùi thieäu veà kit thöïc taäp söû duïng. Trong phaàn naøy, caùc linh
kieän quan troïng cuûa kit ñöôïc ñeà caäp ñeàn nhö CPU 8085, ngoaïi vi 8255, IC
hieån thò 8279.
Thöù hai: giôùi thieäu veà keát noái Kit vaø maùy tính: coång keát noái, caùc
thanh ghi. Beân caïnh ñoù laø nhöõng yeâu caàu ñeå vaän duïng phöông phaùp truyeàn
döõ lieäu trong ñeà taøi.
Sau cuøng laø noäi dung chuû yeáu cuûa ñeà taøi: nhöõng daãn luaän ñeå xaây döïng
löu ñ62 chöông trình truyeàn vaø nhaän döõ lieäu, phöông phaùp vaø thöïc hieän
vieát chöông trình.
Toùm laïi, thaønh quaû cuûa coâng trình laø chöông trình truyeàn döõ lieäu coù
nhöõng öu ñieåm veà maët yeâu caàu caáu hình maùy tính söû duïng, caùch söû duïng
ñôn giaûn, vaø quan troïng nhaát laø coù khaû naêng phaùt trieån veà sau. Coù theå ñeå
laøm taøi lieäu tham khaûo cho sinh vieân ñieän töû - tin hoïc vaø nhöõng ai quan taâm
ñeán daïng ñeà taøi naøy.
Tuy nhieân, ñeà taøi coøn coù moät soá haïn cheá: caàn phaûi coù maùy tính ñeå coù
theå söû duïng chöông trình; phaûi nhaäp chöông trình vaøo maùy tính tröôùc tieân
ôû daïng ngoân ngöõ Assembly.
Veà phía ngöôøi thöïc hieän ñeà taøi, trong thôøi gian ngaén nguûi vôùi söï noå
löïc cuûa baûn thaân vaø vôùi bao taâm huyeát ñaõ ñoå ra cuûa ngöôøi giaùo vieân trong
söï giuùp ñôõ taän tình, ñaõ hoaøn thaønh coâng trình nghieân cöùu vôùi keát quaû khaû
quan. Ñaây thaät söï laø moät vinh döï, moät nieàm töï vui lôùn cho sinh vieân ñoái vôùi
moâi tröôøng sö phaïm, ñoái vôùi thaày coâ vaø caû ñoái vôùi baûn thaân.
LUAÂÄN VAÊN TOÁT NGHIEÄP 56
A.Chöông trình nhaän döõ lieäu ôû Kit thöïc taäp vi xöû lyù 8085.
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;Chuo
ng trinh nhan du lieu tu may tinh goi xuong Thiet bi thuc tap
;vi xu li 8085.
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Org
2500h
MVI A,99h ;khoi tao 8255, Mode 0: PortA nhap du lieu, PortB xuat
OUT RegCNT ;trang thai, PortC nhan lenh dieu khien.
MVI A,80h ;bao cho may tinh biet thiet bi dang ban.
OUT PortB
MVI C,00h ;reset bien dem dia chi.
CALL READY ;xuat chu "READY" ra hien thi tren 5 LED 7 doan.
WaitGO: CALL KEYBRD ;doi nhan phim.
CPI KeyGO ;chuong trinh chi thuc hien tiep khi nhan dung
JNZ WaitGO ;phim "GO".
CALL SENDING ;nhan dung phim "GO" se xuat hien "SENDING" tren 8 LED.
MVI A,00h ;bao cho may tinh biet thiet bi da san sang tiep ;nhan
OUT PortB ;du lieu.
CkSTB1:IN PortC ;doc lenh dieu khien STROBE tai PortC.
ANI 01h
CPI 01h
JNZ CkSTB1 ;neu STROBE # 1 thi doi tiep.
MVI A,80h ;bao BUSY\ = 0, ACK = 0.
OUT PortB
IN PortA ;doc du lieu vao.
MOV B,A ;tam cat du lieu vao thanh ghi B.
MVI A,0C0h ;bao ACK = 1.
OUT PortB
ChkAF1: IN PortC ;doc lenh dieu khien AF.
ANI 02h
CPI 02h
JNZ ChkAF1 ;neu AF # 1 thi doi tiep.
MOV A,B ;hoan tra B lai cho A.
ANI 0F0h ;che nibble thap va reset bit ERROR = 0.
OUT PortB ;xuat nibble cao va bao ERROR = 0.
ChkAF0: IN PortC ;doc lenh dieu khien AF.
ANI 02h
CPI 00h
JNZ ChkAF0 ;neu AF # 0 thi doi tiep.
MOV A,B ;hoan tra B lai cho A.
RLC ;dich 4 bit thap thanh 4 bit cao tuong ung.
RLC
RLC
RLC
ANI 0F0h ;che nua byte thap thap.
ORI 08h ;set bit ERROR = 1.
OUT PortB ;xuat nibble thap va bao ERROR = 1.
ChkSTB0:IN PortC ;doc lenh dieu khien STROBE.
ANI 01h
CPI 00h
LUAÂÄN VAÊN TOÁT NGHIEÄP 58
STA DataI79
MVI A,5Eh ;cho hien thi "D".
STA DataI79
MVI A,06h ;cho hien thi "I".
STA DataI79
MVI A,37h ;cho hien thi "N".
STA DataI79
MVI A,6Fh ;cho hien thi "G".
STA DataI79
POP PSW
RET
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;Chuo
ng trinh con xu li du lieu: Chuong trinh nay se nhan dia chi bat
;dau va dia chi cham dut cua vung du lieu, cac ma may cua chuong trinh
;tren may tinh do xuong se duoc dat trong pham vi vung nay.
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
PROCESS:MOV A,C ;kiem tra xem co phai day la byte thu nhat
;khong ?
CPI 00h
JNZ A1
MOV H,B ;neu dung thi cat byte thu nhat vao thanh ghi H.
INR C ;tang bien dem byte dia chi len 1 don vi.
RET
A1: MOV A,C ;kiem tra xem co phai day la byte thu hai khong ?
CPI 01h
JNZ A2
MOV L,B ;neu dung thi cat byte thu hai vao thanh ghi L.
INR C ;tang bien dem byte dia chi len 1 don vi.
RET
A2: MOV A,C ;kiem tra xem co phai day la byte thu ba khong ?
CPI 02h
JNZ A3
MOV D,B ;neu dung thi cat byte thu ba vao thanh ghi D.
INR C ;tang bien dem byte dia chi len 1 don vi.
RET
A3: MOV A,C ;kiem tra xem day co phai la byte thu tu khong ?
CPI 03h
JNZ A4
MOV E,B ;neu dung thi cat byte thu tu vao thanh ghi E.
INR C ;tang bien dem byte dia chi len 1 don vi.
RET
A4: MOV M,B ;ke tu byte thu nam tro di se duoc cat vao o nho co
INX H ;dia chi do cap thanh ghi HL quan li.
MOV A,D
CPI H
RNZ
MOV A,E
CMP L
RNZ ;thoat neu HL tro den dia chi cham dut nam trong DE.
CALL END ;cho hien thi "END." tren ba LED 7 doan.
MVI A,40h ;bao BUSY\ = 1.
OUT PortB
HLT
LUAÂÄN VAÊN TOÁT NGHIEÄP 60
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;Chuo
ng trinh con hien thi "END." tren ba LED 7 doan.
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
END: PUSH PSW
MVI A,10h ;khoi tao 8279: hien thi 8 ki tu,loi vao phai,
STA CntI79 ;quet ban phim co lap ma, khoa ngoai 2 phim.
MVI A,3Eh ;lap trinh xung Clock = 100 KHz.
STA CntI79
MVI A,0C3h ;xoa hien thi va xoa FIFO.
STA CntI79
MVI A,01h ;tri hoan 0.1 ms > 160 us.
CALL DELAY
MVI A,90h ;bat dau ghi vao tai LED dau tien ben phai, co
STA CntI79 ;tang dia chi tu dong.
MVI A,79h ;cho hien thi "E".
STA DataI79
MVI A,54h ;cho hien thi "N".
STA DataI79
MVI A,0DEh ;cho hien thi "D.".
STA DataI79
POP PSW
RET
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;Hai
chuong trinh con sau day da co san trong thiet bi thuc tap Vi xu ;li 8085
;nen nguoi thuc hien de tai nay thay khong can thiet phai viet lai va ;trinh bay
;ra. Do la 2 chuong trinh:
;KeyKRB : Chuong trinh con quet ban phim. Ma cua phim an duoc cat ;trong thanh
; ghi A.
;DELAY : Chuong trinh con tri hoan theo thoi hang 0.1 ms. He so tri ;hoan duoc
; nap vao thanh ghi A.
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++
;#####################################################################;Khai bao cac
nhan duoc su dung.
;##################################################################### RegCNT
equ 03h
PortA equ 00h
PortB equ 01h
PortC equ 02h
CntI79 equ 0A001h
DataI79 equ 0A000h
KEYBRD equ 0216h
DELAYequ 0310h
KeyGO equ 17h
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ End
LUAÂÄN VAÊN TOÁT NGHIEÄP 61
B.Module Demo.cpp
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <graphics.h>
#include <string.h>
#include <dos.h>
#include <math.h>
#include <complex.h>
#include <time.h>
#include <dir.h>
#include <ctype.h>
#include "screen.h"
#include "mouse.h"
#include "button.hpp"
#include "textbox.hpp"
#include "list.hpp"
#include "disklist.hpp"
#include "send.hpp"
#define NumBox 2
#define NumBut 2
BUTTON But[NumBut],NutKiem;
TEXTBOX Box[NumBox],Port;
char DiskName[27],DName;
char ftype[15]="*.prn";
char inter_Path[100]="";
char RequF[100];
unsigned int St_address,End_address=0;
char Sta_hex[5],End_hex[5];
//---------------------------------------------------------
int TestPressedButton(int x,LPEVENT lpEvent);
int TestPressTexbox(int x,LPEVENT lpEvent,char layra[],unsigned *attribp);
void MainProgram();
int TestPressList(LIST L,LPEVENT lpEvent,char s[],unsigned *attrib,char *typ);//nhap bang
liet ke
int SendFile();
//---------------------------------------------------------
void main(void)
{
InitGraphics();
InitValues("Download Program.");
InitScreen();
if (!InitMouse(&MainWindow.rViewPort))
{
OutMessage("Mouse driver not found. Init mouse and return");
getch();
LUAÂÄN VAÊN TOÁT NGHIEÄP 62
closegraph();
exit(1);
}
ShowMouse();
MainProgram();
closegraph();
}
//---------------------------------------------------------
void MainProgram()
{
char Name[20],buffer[MAXPATH];
unsigned attrib,Attribp;
SEND Send;
LIST L;
But[0].InitButton(200,380,250,400,LIGHTGRAY,"Send");
But[1].InitButton(400,380,450,400,LIGHTGRAY,"Exit");
Box[0].InitTextBox(50,70,477,90,GREEN,LIGHTGREEN,"Open File");
Port.InitTextBox(50,270,250,290,GREEN,LIGHTGREEN,"Out port");
Port.GetS_in("LPT1");
L.InitList(480,70,500,90,LIGHTGRAY);
char RequestFile[15]="";
InName[strlen(InName)-1]='\0';
_dos_getfileattr(InName,&attrib);
if(attrib==16)
{
OutMessage("");
OutError("Please enter a file name");
OutMessage("Click mouse to chose action");
}
else//la file
{
if(End_address!=0)
{
if(OutError("Are you sure ?"))
{
OutMessage("Sending... Press Esc to stop if time is over.");
Send.CatFile(Sta_hex,End_hex,inter_Path);
Send.Out();
HideMouse();
if(Send.Out()!=-1)
{
HideMouse();
OutMessage("");
OutError("Task is complete.");
OutMessage("Click mouse to choose action");
}
else
{
HideMouse();
OutMessage("Click mouse to choose action");
}
}
}
}
}//if(TestPressedButton
if(TestPressList(L,lpEvent,Name,&attrib,ftype)==1)
//chon OK
{
switch (attrib)
{
case 16:chdir(Name);
getcwd(buffer, MAXPATH);//lay duong dan hien thoi vao buffer
strcpy(inter_Path,buffer);
Box[0].GetS_in(inter_Path);
Box[0].OutTextBox();
break;
default:
getcwd(buffer, MAXPATH);//lay duong dan hien thoi vao buffer
strcpy(inter_Path,buffer);
if(inter_Path[strlen(inter_Path)-1]!='\\')
strcat(inter_Path,"\\");
strcat(inter_Path,Name);
Box[0].GetS_in(inter_Path);
Box[0].DuongDan(inter_Path);
LUAÂÄN VAÊN TOÁT NGHIEÄP 64
Box[0].OutTextBox();
break;
}//end switch
}//if(TestPressList(
//chon Cancel
TestPressTexbox(NumBox,lpEvent,inter_Path,&Attribp);//Path lay ra duong dan cho file
nhap vao
//ShowMouse();
if(kbhit())
{
kkkk=getch();
if(kkkk==0)kkkk=getch();
}
Box[0].GetS(RequF);
{
int n=strlen(RequF);
if(n>5)//?.???
if(RequF[n-1]!='\\')
{
while(n>0&&RequF[n-1]!='\\')
{
n--;
}
char *strtemp=RequF;
for(int m=0;m<n;m++)
strtemp++;
if(strcmp(RequestFile,strtemp))//neu file chon co thay doi
{
setfillstyle(SOLID_FILL,CYAN);
bar(155,155,245,210);
strcpy(RequestFile,strtemp);
strtemp+=strlen(strtemp)-4;
if(!strcmp(strtemp,".prn"))//neu dung file prn
{
FILE *f;
if ((f = fopen(RequF,"rb")) == NULL)
{
fprintf(stderr, "Cannot open input file.\n");
return ;
}
else//neu mo duoc file
{
clock_t start, end;
int period=0;
char c,address[7],buf[8];
int thoat;
int dem;
char
KyTu_Hex[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','a','b','c','d','e','f'};
int Gtri_Dec[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,10,11,12,13,14,15};
double Value1=0,Value2=0;
LUAÂÄN VAÊN TOÁT NGHIEÄP 65
char Total[10];
int FindPos,FindValue;
start = clock();
do
{
fread(&c,1,1,f);
end = clock();
}while(c!='\''&&(period=(end - start) / CLK_TCK)<10);
if(period>=2) goto Error;
fseek(f,-5,SEEK_CUR);
fread(address,10,1,f);
address[4]='\0';
strcpy(Sta_hex,address);
HideMouse();
strcat(address," Hex");
outtextxy(170,158,address);
for (FindPos=3;FindPos>=0;FindPos--)
for(FindValue=0;FindValue<22;FindValue++)
if(address[FindPos]==KyTu_Hex[FindValue])
Value1+=pow(16,(3-FindPos))*Gtri_Dec[FindValue];
St_address=(unsigned int)Value1;
ShowMouse();
thoat=1;
start = clock();
do
{
do
{
fread(&c,1,1,f);
end = clock();
}while(c!='m'&&c!='M'&&(period=(end - start) / CLK_TCK)<10);
if(period>=10) goto Error;
fseek(f,-1,SEEK_CUR);
fread(buf,7,1,f);
buf[7]='\0';
end = clock();
if(!strcmp(buf,"Macros:")||!strcmp(buf,"MACROS:")||!strcmp(buf,"macros:"))
thoat=0;
}while(thoat&&(period=(end - start) / CLK_TCK)<15);
if(period>=15) goto Error;
fseek(f,-1,SEEK_CUR);
start = clock();
do
{
dem=0;
do
{
LUAÂÄN VAÊN TOÁT NGHIEÄP 66
fread(&c,1,1,f);
if(c=='\n')
fseek(f,-3,SEEK_CUR);
else
fseek(f,-2,SEEK_CUR);
end = clock();
}while(c!='\''&&(period=(end - start) / CLK_TCK)<10);
if(period>=10) goto Error;
do
{
dem++;
fread(&c,1,1,f);
if(c=='\n')
dem=20;
fseek(f,-2,SEEK_CUR);
end = clock();
}while(dem<10&&(period=(end - start) / CLK_TCK)<15);
if(period>=15) goto Error;
end = clock();
}while(dem!=20&&(period=(end - start) / CLK_TCK)<15);
if(period>=15) goto Error;
fseek(f,2,SEEK_CUR);
start = clock();
do
{
fread(&c,1,1,f);
end = clock();
}while(c!='\''&&(period=(end - start) / CLK_TCK)<10);
if(period>=10) goto Error;
fseek(f,-5,SEEK_CUR);
fread(buf,4,1,f);
buf[4]='\0';
HideMouse();
strcpy(End_hex,buf);
strcat(buf," Hex");
outtextxy(170,178,buf);
for (FindPos=3;FindPos>=0;FindPos--)
for(FindValue=0;FindValue<22;FindValue++)
if(buf[FindPos]==KyTu_Hex[FindValue])
Value2+=pow(16,(3-FindPos))*Gtri_Dec[FindValue];
End_address=(unsigned int)Value2;
Value1=Value2-Value1+1;
sprintf(Total,"%0.0f bytes",Value1);
outtextxy(160,198,Total);
outtextxy(260,250,buf);
ShowMouse();
while(0)
{
Error:
strcpy(buf,"error");
setfillstyle(SOLID_FILL,CYAN);
LUAÂÄN VAÊN TOÁT NGHIEÄP 67
HideMouse();
bar(155,155,245,210);
outtextxy(200,158,buf);
outtextxy(200,178,buf);
outtextxy(200,198,buf);
ShowMouse();
}
fcloseall();
}
}
else
{
OutMessage("");
}
}
}
}
if(kkkk==27)
{
HideMouse();
if(!OutError("Do you want to quit ?"))
kkkk=0;
ShowMouse();
}
}while(kkkk!=27);
}
//---------------------------------------------------------
int TestPressedButton(int x,LPEVENT lpEvent)//kiem tra cac nut
{
if(lpEvent->Msg==1)
{
for(int i=0;i<x;i++)
if(But[i].Left()<= lpEvent->Posx&&But[i].Top()<=lpEvent-
>Posy&&But[i].Right()>=lpEvent->Posx&&But[i].Bottom()>=lpEvent->Posy)
{
HideMouse();
But[i].PressButton();
delay(100);
But[i].OutButton();
if(i==1)
{
if(OutError("Do you want to quit ?")==0)
return -1;
closegraph();
exit(1);
}
ShowMouse();
return i;
}
}
return -1;
}
//---------------------------------------------------------
LUAÂÄN VAÊN TOÁT NGHIEÄP 68
int m=strlen(layra)-1;
while(layra[m]!='\\')//dem so ky tu thuoc ve phan Path
m--;
for(int n=0;n<m;n++)//doi thanh chu hoa duong dan
if(layra[n]>='a'&&layra[n]<='z')
layra[n]=toupper(layra[n]);
Box[i].GetS_in(layra);
if(layra[1]==':'&&layra[0]!=LastName[0])
LUAÂÄN VAÊN TOÁT NGHIEÄP 69
setdisk(toupper(layra[0])-'A');
chdir(layra);//vao them mot cap thu muc
if(layra[strlen(layra)-1]!='\\')
strcat(layra,"\\");
Box[0].GetS_in(layra);
Box[0].OutTextBox();
OutMessage("Click mouse to chose action");
return 0;
}
if (NotExist == 0)
{
return 0;
}
else
{
OutMessage("File does not exist.");
Box[0].GetS_in(LastName);
Box[0].OutTextBox();
return 1;
}
}//end if Open
}
}
return -1;
}
//---------------------------------------------------------
int TestPressList(LIST L,LPEVENT lpEvent,char s[],unsigned *attrib,char *typ)
{
int k=0;
if(lpEvent->Msg==1)
if(L.Left()<= lpEvent->Posx&&L.Top()<=lpEvent->Posy&&L.Right()>=lpEvent-
>Posx&&L.Bottom()>=lpEvent->Posy)
{
OutMessage("Open File Name");
delay(100);//neu khong thi khong the putimage, khong thoat khoi bang list duoc
k=L.Press(s,&Box[0],attrib,DiskName,&DName,typ);
}
return k;
}
//---------------------------------------------------------
II.CLASS BUTTON.HPP
#if !defined __BUTTON__
#define __BUTTON__
class BUTTON
{
private:
int l,t,r,b;//toa do box
int Color;
char S[100];
public:
void InitButton(int x1,int y1,int x2,int y2,int color,char s[]);
void OutButton();
LUAÂÄN VAÊN TOÁT NGHIEÄP 70
void PressButton();
int Left() {return l;}
int Right() {return r;}
int Top() {return t;}
int Bottom() {return b;}
};
#endif
III.MODULE BUTTON.CPP
#include <graphics.h>
#include <string.h>
#include "button.hpp"
//---------------------------------------------------------
void BUTTON::InitButton(int x1,int y1,int x2,int y2,int color,char s[])
{
l=x1;
t=y1;
r=x2;
b=y2;
Color=color;
strcpy(S,s);
}
//---------------------------------------------------------
void BUTTON::OutButton()
{
setfillstyle(SOLID_FILL,Color);
bar(l,t,r,b);
setcolor(WHITE);
line(l,t,r,t);
line(l,t,l,b);
setcolor(BLACK);
line(r,t,r,b);
line(l,b,r,b);
setcolor(BLUE);
int x=l+(r-l-textwidth(S))/2,y=t+(b-t-textheight(S))/2;
outtextxy(x,y,S);
}
//---------------------------------------------------------
void BUTTON::PressButton()
{
setcolor(BLACK);
line(l,t,r,t);
line(l,t,l,b);
setcolor(WHITE);
line(r,t,r,b);
line(l,b,r,b);
}
//---------------------------------------------------------
IV. CLASS DISKLIST.HPP
#include "textbox.hpp"
#include "mouse.h"
#if !defined __DISKLIST__
#define __DISLIST__
LUAÂÄN VAÊN TOÁT NGHIEÄP 71
#endif
V.MODULE DISKLIST.CPP
#include <dir.h>
#include <alloc.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <graphics.h>
#include <bios.h>
#include <PROCESS.H>
// <PROCESS.H, STDLIB.H>
#include "disklist.hpp"
char Disk(char *s)//kiem tra co bao nhieu o dia trong may, luu ten cac o dia vao chuoi s, tra ve
ten o dia hien hanh
{
int save,disk, disks;
int equip_check;
char c[4];
s[0]='\0';
save = getdisk();
equip_check = biosequip();
equip_check >>= 6;
equip_check = (equip_check & 3) + 1;//dem so o dia mem
for (disk = 0;disk < 26;++disk)
{
setdisk(disk);
if (disk == getdisk())
{
sprintf(c,"%c",disk +'A');
strcat(s,c);
}
}
setdisk(save);
if(equip_check==1&&s[1]=='B')//neu chi co ot o dia mem
for(int i=1;i<strlen(s);i++)//thi khong co ten o dia B
s[i]=s[i+1];//loai ky tu B ra khoi chuoi luu ten o dia
}
//---------------------------------------------------------
int ChosenDisk(char *s,/*TEXTBOX *Box,*/char PreDisk,char CurDisk)
//tra ve ten o dia
{
int i;
if(PreDisk!=CurDisk)
{
LUAÂÄN VAÊN TOÁT NGHIEÄP 72
for(i=0;i<strlen(s);i++)
if((CurDisk)==s[i])//hien thi cho dia moi
{
setdisk(s[i]-'A');
char buffer[MAXPATH],*iem;
if((iem=getcwd(buffer, MAXPATH))==NULL)
{
OutMessage("Driver is not ready.");
i=0;
ShowMouse();
return s[i];
}
}
return s[i];
}
//---------------------------------------------------------
LPEVENT CheckChooseDisk(char *DiskName,char *DName,LPEVENT lpEvent,int x,int y)
{
int NumDisk=strlen(DiskName);
int x1=x-30,y1=y+NumDisk*14+12;
void far *buf;//con tro chi vung luu tru man hinh
unsigned int size = imagesize(x1,y,x,y1);
if ((buf = farmalloc(size)) == NULL)
{
OutMessage("Error: not enough heap space in save_screen().");
getch();
closegraph();
exit(1);
}
else
{
getimage(x1,y,x,y1,buf);
OutMessage("Click a drive name in the list");
}
setfillstyle(SOLID_FILL,WHITE);
bar(x1,y,x,y1);
setcolor(BLACK);
rectangle(x,y,x1,y1);
setcolor(LIGHTGRAY);
line(x-1,y+1,x-1,y1-1);
line(x1+1,y1-1,x-1,y1-1);
setcolor(BLACK);
char Temp[3];
for(int i=0;i<NumDisk;i++)
{
sprintf(Temp,"%c:",DiskName[i]);
outtextxy(x1+10,y+10+i*14,Temp);
}
for(i=0;i<NumDisk;i++)
LUAÂÄN VAÊN TOÁT NGHIEÄP 73
if(*DName==DiskName[i])
break;
setfillstyle(SOLID_FILL,BLUE);
bar(x1+1,y+7+14*i,x-1,y+7+14+14*i);
setcolor(YELLOW);
sprintf(Temp,"%c:",DiskName[i]);
outtextxy(x1+10,y+10+i*14,Temp);
LPEVENT LpEvent;
do
{
ShowMouse();
delay(50);
LpEvent=GetEvent();
HideMouse();
if(LpEvent->Msg==1)
for(i=0;i<NumDisk;i++)
if(LpEvent->Posx>=x1+1&&LpEvent->Posx<=x-1&&LpEvent-
>Posy>=y+7+i*14&&LpEvent->Posy<=y+7+14+i*14)
{
bar(x1+1,y+7+14*i,x-1,y+7+14+14*i);
*DName=DiskName[i];
setdisk((int)*DName-65);
}
}while(LpEvent->Msg!=1);
putimage(x1,y,buf,COPY_PUT);
farfree(buf);
return LpEvent;
}
//---------------------------------------------------------
char *FileType(TEXTBOX *b)
{
char s[15];
b->Path();
b->OutTextBox();
b->GetS(s);
return s;
}
VI.CLASS LIST.HPP
#include "textbox.hpp"
#include "disklist.hpp"
#if !defined __LIST__
#define __LIST__
class LIST
{
private:
int l,t,r,b;
int Color;
public:
void InitList(int x1,int y1,int x2,int y2,int Color);
void Show();
LUAÂÄN VAÊN TOÁT NGHIEÄP 74
VII.MODULE LIST.CPP
#include <graphics.h>
#include <dir.h>
#include <dos.h>
#include <stdlib.h>
#include <string.h>
#include <alloc.h>
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include "mouse.h"
#include "list.hpp"
//---------------------------------------------------------
void LIST::InitList(int x1,int y1,int x2,int y2,int col)
{
Color=col;
l=x1;t=y1;r=x2;b=y2;
}
//---------------------------------------------------------
void LIST::Show()
{
setfillstyle(SOLID_FILL,Color);
bar(l,t,r,b);
int hor=(r-l)/3,ver=(b-t)/3;
int x1=l+hor,x2=r-hor,x3=l+(r-l)/2,y1=t+ver,y2=t+ver,y3=b-ver;
setcolor(WHITE);
line(x1,y1,x2,y2);
line(x2,y2,x3,y3);
line(x1,y1,x3,y3);
setfillstyle(SOLID_FILL,WHITE);
floodfill(x1+(x2-x1)/2,y1+(y3-y2)/2,WHITE);
setfillstyle(SOLID_FILL,Color);
setcolor(BLACK);
line(l,b,r,b);
line(r,t,r,b);
setcolor(WHITE);
line(l,t,r,t);
line(l,t,l,b);
}
LUAÂÄN VAÊN TOÁT NGHIEÄP 75
//---------------------------------------------------------
int LIST::Press(char s[],TEXTBOX *Box,unsigned *attrib,char *DiskName,char *DName,char
*ftype)
//tra ve 0:nhan Cancel
//tra ve 1:nhan OK
{
TEXTBOX Box2;
HideMouse();
int hor=(r-l)/3,ver=(b-t)/3;
int x1=l+hor,x2=r-hor,x3=l+(r-l)/2,y1=t+ver,y2=t+ver,y3=b-ver;
setcolor(BLACK);
line(x1,y1,x2,y2);
line(x2,y2,x3,y3);
line(x1,y1,x3,y3);
setfillstyle(SOLID_FILL,BLACK);
floodfill(x1+(x2-x1)/2,y1+(y3-y2)/2,BLACK);
setfillstyle(SOLID_FILL,Color);
int k=0;
*DName=Disk(DiskName);
do
{
char buffer[MAXPATH];
k=GetList(s,Box,attrib,DiskName,DName,&Box2,ftype);
getcwd(buffer, MAXPATH);
Box->GetS_in(buffer);
Box->OutTextBox();
}while(k==2);
ShowMouse();
return k;//k=0: nhan Cancel, k=1:nhan OK
}
//---------------------------------------------------------
int LIST::GetList(char s[],TEXTBOX *Box,unsigned *attrib,char *DiskName,char
*DName,TEXTBOX *Box2,char *ftype)
{
int x11=l-300,y11=b,x12=r+100,y12=b+300;//toa do bang ngoai
//600 x 300 la kich thuoc bang ngoai
int Kiemtra=0;//bien de kiem tra truong hop chon OK truoc khi chon file
LPEVENT lpEvent;//kiem tra bang thu muc
void far *buf;//con tro chi vung luu tru man hinh
LUAÂÄN VAÊN TOÁT NGHIEÄP 76
setfillstyle(SOLID_FILL,LIGHTGRAY);//GREEN);
bar(x11,y11,x12,y12);//ve bang ngoai
int x41=x31,y41=y31+100,x42=x32,y42=y32+100;
setcolor(WHITE);
line(x11,y11,x12,y11);
line(x11,y11,x11,y12);
setcolor(BLACK);
line(x12,y11,x12,y12);
line(x11,y12,x12,y12);
setcolor(DARKGRAY);
line(x21-1,y21-1,x22+1,y21-1);//vien cho bang liet ke
line(x21-1,y21-1,x21-1,y22+1);//vien cho bang liet ke
setcolor(BLUE);
char S3[]="OK",S4[]="Cancel";
int x33=x31+(x32-x31-textwidth(S3))/2;
int y33=y31+(y32-y31-textheight(S3))/2;
outtextxy(x33,y33,S3);
int x44=x41+(x42-x41-textwidth(S4))/2;
int y44=y41+(y42-y41-textheight(S4))/2;
outtextxy(x44,y44,S4);
char path[100];
getcurdir(0, path);
int done;
int x51=x21,x52=x51+130,y51=y22+28,y52=y51+20;
int x61=x21,x62=x12-5,y61=y12-25,y62=y12-5;
Box2->InitTextBox(x51,y51,x52,y52,WHITE,LIGHTBLUE,"Type of file");
Box2->GetS_in(ftype);
Box2->OutTextBox();
setcolor(BLACK);
line(x51+1,y51+1,x52-1,y51+1);
line(x51+1,y51+1,x51+1,y52-1);
setcolor(LIGHTGRAY);
line(x51+1,y52-1,x52-1,y52-1);
line(x52-1,y51+1,x52-1,y52-1);
setfillstyle(SOLID_FILL,WHITE);
bar(x61,y61,x62,y62);
setcolor(BLACK);
line(x61,y61,x62,y61);
line(x61,y61,x61,y62);
line(x61+1,y61+1,x62-1,y61+1);
line(x61+1,y61+1,x61+1,y62-1);
setcolor(LIGHTGRAY);
line(x62-1,y61+1,x62-1,y62-1);
line(x61+1,y62-1,x62-1,y62-1);
//DiskBox
int x71=x52+30,x72=x22,y71=y51,y72=y52;//toa do DiskBox
char DNameTemp[4];
sprintf(DNameTemp,"%c:",*DName);
TEXTBOX DiskBox;
LUAÂÄN VAÊN TOÁT NGHIEÄP 78
DiskBox.InitTextBox(x71,y71,x72,y72,WHITE,LIGHTBLUE,"Driver name");
DiskBox.GetS_in(DNameTemp);
DiskBox.OutTextBox();
setcolor(BLACK);
line(x71+1,y71+1,x72-1,y71+1);
line(x71+1,y71+1,x71+1,y72-1);
setcolor(LIGHTGRAY);
line(x71+1,y72-1,x72-1,y72-1);
line(x72-1,y71+1,x72-1,y72-1);
done=findfirst("*",&FF,FA_DIREC);
Lis[0]=FF;
int dem=0;//cho vong while tim file, la so files + thu muc tim duoc
if((int)Lis[0].ff_attrib!=16) dem-=1;
while (!done)//nhap ten file vao mang cau truc FF
{
dem++;
done = findnext(&FF);
if(!done)
Lis[dem]=FF;
if((int)Lis[dem].ff_attrib!=16) dem-=1;
}
dem+=1;
int NumDir=dem;
done=findfirst(ftype,&FF,FA_RDONLY|FA_HIDDEN|FA_SYSTEM|FA_ARCH);
for(int j=0;j<strlen(FF.ff_name)+1;j++)
Lis[dem].ff_name[j]=tolower(FF.ff_name[j]);
int NumFile=dem-NumDir;
char Note[50];//[30];
setcolor(BLACK);
sprintf(Note,"%d files and %d directories found",NumFile,NumDir);
outtextxy(x61+5,y61+(y62-y61-textheight(Note))/2,Note);
int temp=y11,Dem=0,i;
if(dem==0)//truong hop dia hoan toan trong, neu la mot thu muc rong thi khong thuoc truong
hop nay
strcpy(Lis[0].ff_name,"");
LUAÂÄN VAÊN TOÁT NGHIEÄP 79
int tempx1=x21+1,tempx2=x22,tempy1=y11+14-3,tempy2=y11+14+8+3;
setcolor(BLACK);//LIGHTGREEN);
for(i=0;i<15&&i<dem;i++)//hien thi ten file
outtextxy(x21+8,temp+=14,Lis[i].ff_name);
setfillstyle(SOLID_FILL,BLUE);
bar(tempx1,tempy1,tempx2,tempy2);
setcolor(YELLOW);
outtextxy(x21+8,y11+14,Lis[0].ff_name);//vach sang tai vi tri dau tien
int oldx1=tempx1,oldy1=tempy1,oldx2=tempx2,oldy2=tempy2;
int over=0;
int ppp=0;
do//while(1);
{
ShowMouse();
lpEvent = GetEvent();//lay bien co chuot
int j,nhanphim;
if(kbhit())//kiem tra co nhan phim
{ nhanphim=getch();
if(nhanphim==0)
nhanphim=getch();
}
{
switch(nhanphim)
{
case 81://page down
if(ppp++ >12)//17)
ppp=0;
else goto MouseDown;
case 80: // mui ten xuong
nhanphim=1;
MouseDown:
HideMouse();
if(Dem<14/*9*/&&Dem<dem-1)j=Dem+1;//&&Dem<dem-1
else
{
over++;
if((over)>=(dem-14))//9))
{
over--;
goto End;
}
j=Dem;
setcolor(WHITE);//MAGENTA);
temp=y11;
for(i=over-1;(i<15+over-1)&&i<dem;i++)//xoa ten file
outtextxy(x21+8,temp+=14,Lis[i].ff_name);
setcolor(BLACK);//LIGHTGREEN);
temp=y11;
for(i=over;(i<14+over)&&i<dem;i++)
outtextxy(x21+8,temp+=14,Lis[i].ff_name);
LUAÂÄN VAÊN TOÁT NGHIEÄP 80
}
goto Arrowkey;//break;
case 73://page up
if(ppp++ >12)
ppp=0;
else goto MouseUp;
case 72: // len
nhanphim=1;
MouseUp:
HideMouse();
if(Dem>0)
j=Dem-1;
else
{
over--;
if((over)<=-1)
{
over++;
goto End;
}
j=Dem;
setcolor(WHITE);//MAGENTA);
temp=y11;
for(i=over+1;i<15+over+1;i++)//xoa ten file
outtextxy(x21+8,temp+=14,Lis[i].ff_name);
setcolor(BLACK);//LIGHTGREEN);
temp=y11;
for(i=over;i<15+over;i++)
outtextxy(x21+8,temp+=14,Lis[i].ff_name);
}
goto Arrowkey;//break;
case 13://Enter
nhanphim=1;
goto nutOK;
case 27://Esc
nhanphim=1;
goto nutCancel;
}
}//if(kbhit())
/////////////////////////////////// xet mouse
if(lpEvent->Msg==1)//neu nhan phim trai chuot
{
if(lpEvent->Posx>=x51&&lpEvent->Posx<=x52&&lpEvent->Posy>=y51&&lpEvent-
>Posy<=y52)
{//get type of file
HideMouse();
OutMessage("Enter type of file then press Enter to accept or Esc to ignore.");
Box2->Path();//lay Path vao bien S cua TEXTBOX
Box2->GetS(ftype);
putimage(x11,y11,buf,COPY_PUT);
farfree(buf);
ShowMouse();
LUAÂÄN VAÊN TOÁT NGHIEÄP 81
return 2;
}
if(lpEvent->Posx>=x71&&lpEvent->Posx<=x72-20&&lpEvent->Posy>=y71&&lpEvent-
>Posy<=y72)
{//change disk trong diskbox
int ExistDisk;
char OldDisk=toupper(*DName);
OutMessage("Enter name of drive");
do
{
HideMouse();
DiskBox.Path();//lay Path vao bien S cua TEXTBOX
DiskBox.GetS(DNameTemp);
DNameTemp[0]=toupper(DNameTemp[0]);
*DName=DNameTemp[0];
ExistDisk=0;
for(int k=0;k<strlen(DiskName);k++)
if(*DName==DiskName[k])
ExistDisk=1;
if(ExistDisk!=1)
{
OutMessage("Press Enter to do the action again or Esc to ignore");
if(OutError("Disk not exist")==0)
{
*DName=OldDisk;
break;
}
}
ShowMouse();
}while(!ExistDisk);
if(OldDisk!=*DName) //truong hop chon dia bang nut pulldown nhung lai chon kieu
go ky tu vao textbox
setdisk(*DName-'A');
HideMouse();
putimage(x11,y11,buf,COPY_PUT);
farfree(buf);
ShowMouse();
return 2;
}
if(lpEvent->Posx>=x81&&lpEvent->Posx<=x82&&lpEvent->Posy>=y81&&lpEvent-
>Posy<=y82)
{//choose disk
HideMouse();
setcolor(BLACK);
line(x81,y81,x82,y81);
line(x81,y81,x81,y82);
line(x81+1,y81-1,x81+1,y82-1);
char OldDName=*DName;
CheckChooseDisk(DiskName,DName,lpEvent,x82,y82);
if(OldDName!=*DName)
LUAÂÄN VAÊN TOÁT NGHIEÄP 82
{
putimage(x11,y11,buf,COPY_PUT);
farfree(buf);
return 2;
}
setcolor(WHITE);
line(x81,y81,x82,y81);
line(x81,y81,x81,y82);
line(x81+1,y81-1,x81+1,y82-1);
ShowMouse();
}
_dos_getfileattr(Lis[j+over].ff_name,attrib);
strcpy(s,Lis[j+over].ff_name);
if(strcmp(s,".")==0) strcpy(s,"\\");
Dem=j;
End:
Kiemtra=1;//bao hieu co nhan vao list
}
if(lpEvent->Msg==1&&(j==15)&&tempx1<= lpEvent->Posx&&tempx2>=lpEvent-
>Posx&&(tempy1+j*14)<=lpEvent->Posy&&(tempy2+j*14)>=lpEvent->Posy)
//truong hop vet tro file o cuoi bang list va nhap chuot ngay ben duoi vet tro
{
lpEvent->Posx=x11;
lpEvent->Posy=y11;
delay(50);
goto MouseDown;
}
if(lpEvent->Msg==1&&(j==15)&&tempx1<= lpEvent->Posx&&tempx2>=lpEvent-
>Posx&&(tempy1-14)<=lpEvent->Posy&&(tempy2-14)>=lpEvent->Posy)
//truong hop vet tro file o dau bang list va nhap chuot ngay ben tren vet tro
{
lpEvent->Posx=x11;
lpEvent->Posy=y11;
delay(50);
goto MouseUp;
LUAÂÄN VAÊN TOÁT NGHIEÄP 83
}
if(lpEvent->Msg==1&&x31<= lpEvent->Posx&&y31<=lpEvent-
>Posy&&x32>=lpEvent->Posx&&y32>=lpEvent->Posy)
nutOK:
{
HideMouse();
putimage(x11,y11,buf,COPY_PUT);
farfree(buf);
if(Kiemtra!=1)
strcpy(s,Lis[0].ff_name);
if(strcmp(s,".")==0)
{
strcpy(s,"\\");
*attrib=16;
}
if(*attrib==16)
{
chdir(s);
return 2;
}
Show();
ShowMouse();
OutMessage("Click OK to send file.");
return 1 ;//bao da co chon file
}
if(lpEvent->Msg==1&&x41<= lpEvent->Posx&&y41<=lpEvent-
>Posy&&x42>=lpEvent->Posx&&y42>=lpEvent->Posy)
nutCancel:
{
HideMouse();
putimage(x11,y11,buf,COPY_PUT);
farfree(buf);
Cancel:
Show();
ShowMouse();
OutMessage("Click mouse to chose action");
return 0;
}
}
if(lpEvent->Msg==2)
{
delay(100);
goto nutOK;
}
}while(1);
}
//---------------------------------------------------------
#if !defined(__MOUSE_H__)
LUAÂÄN VAÊN TOÁT NGHIEÄP 84
#define __MOUSE_H__
#include <dos.h>
#include "screen.h"
/* -- Function's keys -- */
#define F1 0xBB
#define F2 0xBC
#define F3 0xBD
#define F4 0xBE
#define F5 0xBF
#define F6 0xC0
#define F7 0xC1
#define F8 0xC2
#define F9 0xC3
#define F10 0xC4
//struct time;
typedef struct tagEVENT{
int Msg;
int Posx, Posy; // toa do xay ra bien co chuot
struct time *t;
} EVENT;
typedef EVENT far *LPEVENT;
// Khai bao cac ham toan cuc
LUAÂÄN VAÊN TOÁT NGHIEÄP 85
IX.MODULE MOUSE.CPP
#include <conio.h>
#include <graphics.h>
//#include <STDLIB.H>
#include <COMPLEX.H>
#include "mouse.h"
_AX = 0;
geninterrupt(INT_MOUSE);
ax = _AX;
if (ax == 0)
return FALSE;
SetMouseRange(lpRect);
return TRUE;
LUAÂÄN VAÊN TOÁT NGHIEÄP 86
}
//---------------------------------------------------------
void ShowMouse(void)
// Hien thi chuot
{
_AX = 1;
geninterrupt(INT_MOUSE);
}
//---------------------------------------------------------
void HideMouse(void)
// Dau chuot
{
_AX = 2;
geninterrupt(INT_MOUSE);
}
//---------------------------------------------------------
#include <CONIO.H>
#include <STDIO.H>
void MouseRead(LPEVENT lpEvent)
// Tra ve bien co nhan duoc tu chuot : Nut trai hay phai duoc an
{
int bx;
_AX = 3;
geninterrupt(INT_MOUSE);
bx = _BX;
//cx = _CX;
//dx = _DX;
lpEvent->Msg = bx;
lpEvent->Posx = _CX;
lpEvent->Posy = _DX;
gettime(lpEvent->t);
}
//---------------------------------------------------------
void ResetEvent(LPEVENT lpEvent)
{
lpEvent->Msg = 0;
lpEvent->Posx = lpEvent->Posy = 0;
}
//---------------------------------------------------------
EVENT PrevEvent, CurEvent;
//---------------------------------------------------------
LPEVENT GetEvent(void)
{
ResetEvent(&CurEvent);
MouseRead(&CurEvent);
// chuyen sang toa do ViewPort
CurEvent.Posx = CurEvent.Posx-MainWindow.rViewPort.left;
CurEvent.Posy = CurEvent.Posy-MainWindow.rViewPort.top;
// xet trang thai chuot co thay doi hay khong
if((CurEvent.Posx!=PrevEvent.Posx)&&(CurEvent.Posy!=PrevEvent.Posy))
CurEvent.Msg |= M_CHANGE;
PrevEvent = CurEvent;
LUAÂÄN VAÊN TOÁT NGHIEÄP 87
// delay(50);
return (&CurEvent);
}
//---------------------------------------------------------
void DeviceRelease(int Msg)
{
while(GetEvent()->Msg&Msg);
}
//---------------------------------------------------------
int Double(LPEVENT lpEvent)
{
if(lpEvent->Msg==1)
{
delay(100);
ResetEvent(lpEvent);
lpEvent=GetEvent();
if(lpEvent->Msg==1)
//if((abs(CurEvent.Posx-oldEvent.Posx))<=10&&abs(CurEvent.Posy-oldEvent.Posy)<=10)
{
{
return 1;
}
}
else
return 0;
}
else return 0;
}
//---------------------------------------------------------
void MouseText(int x,int y,int color1,int color2)//,char s[])//gia dau nhay con tro
{
HideMouse();
// int h=textheight(s);
int w=5;
int color=getcolor();
do
{
for(int i=0;i<10&&(!kbhit());i++)
{
setcolor(color2);//WHITE);
line(x,y,x+w,y);
line(x,y+1,x+w,y+1);
delay(10);
setcolor(color);
}
setcolor(color1);//GREEN);
line(x,y,x+w,y);
line(x,y+1,x+w,y+1);
setcolor(color);
for(i=0;i<10&&(!kbhit());i++)
{
setcolor(color1);//GREEN);
line(x,y,x+w,y);
LUAÂÄN VAÊN TOÁT NGHIEÄP 88
line(x,y+1,x+w,y+1);
delay(10);
setcolor(color);
}
}while(!kbhit());
}
//---------------------------------------------------------
int GetMtx()
{
return getx();
}
//---------------------------------------------------------
int GetMty()
{
return gety();
}
//---------------------------------------------------------
// End of MOUSE.CPP
X.CLASS SCREEN.H
#if !defined(__SCREEN_H__)
#define __SCREEN_H__
#define BORDERSIZE 3
#define TRUE 1
#define FALSE 0
#define DEMODELAY 0
XI.MODULE SCREEN.CPP
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <graphics.h>
#include "screen.h"
#include "mouse.h"
WINDOWS MainWindow;
//int Xc, Yc; // Goc toa do
//int LineColor = MAGENTA; // Mau cua duong thang can ve - Dung trong thu tuc SetPixel
//---------------------------------------------------------
void InitGraphics(void)
// Khoi tao che do do hoa
{
int grDrv=DETECT, grMode;
int ErrCode;
COLOR_WINDOW = CYAN;
COLOR_BUTTON = LIGHTGRAY;
COLOR_BORDER = LIGHTGRAY;
COLOR_CAPTION = BLUE;
COLOR_TEXT = BLUE;
strcpy(MainWindow.sCaption, lpCaption);
WinWidth = MainWindow.rWinRect.right-MainWindow.rWinRect.left+1;
WinHeight= MainWindow.rWinRect.bottom-MainWindow.rWinRect.top+1;
// Gan gia tri cho rTitleBar - H.C.nhat chua thong tin thanh tieu de
MainWindow.rTitleBar.left = BORDERSIZE+1;//MainWindow.rSys.right+1;
MainWindow.rTitleBar.top = BORDERSIZE+1;
MainWindow.rTitleBar.right = WinWidth-BORDERSIZE-1;
MainWindow.rTitleBar.bottom= MainWindow.rSys.top+T_SIZE;
// Gan gia tri cho rMenuBar - H.C.nhat chua thong tin menu
// Gan gia tri cho rMessage - H.C.nhat chua thong tin cua cac //thong bao
MainWindow.rMessage.left = BORDERSIZE+1;
MainWindow.rMessage.right = WinWidth-BORDERSIZE-2;
MainWindow.rMessage.top = WinHeight-(BORDERSIZE+2)-MSG_SIZE;
MainWindow.rMessage.bottom= MainWindow.rMessage.top+MSG_SIZE;
// Gan gia tri cho rViewPort - H.C.nhat chua thong tin ve vung lam viec
// thuc su cua cua so
MainWindow.rViewPort.left = BORDERSIZE+1;
MainWindow.rViewPort.top =
MainWindow.rTitleBar.bottom+2;//MainWindow.rMenuBar.bottom+2;
MainWindow.rViewPort.right = WinWidth-BORDERSIZE-2;
MainWindow.rViewPort.bottom= MainWindow.rMessage.top-2;
VP_WIDTH = MainWindow.rViewPort.right-MainWindow.rViewPort.left;
VP_HEIGHT = MainWindow.rViewPort.bottom-MainWindow.rViewPort.top;
}
//---------------------------------------------------------
void OutMessage(char *Msg)
LUAÂÄN VAÊN TOÁT NGHIEÄP 91
getviewsettings(&vp);
setviewport(MainWindow.rWinRect.left, MainWindow.rWinRect.top,
MainWindow.rWinRect.right, MainWindow.rWinRect.bottom, 1);
WinWidth = MainWindow.rWinRect.right-MainWindow.rWinRect.left+1;
WinHeight= MainWindow.rWinRect.bottom-MainWindow.rWinRect.top+1;
LUAÂÄN VAÊN TOÁT NGHIEÄP 92
x = (WinWidth-W_CHAR*strlen(MainWindow.sCaption))/2+1;
y = BORDERSIZE+(T_SIZE-H_CHAR)/2+1;
setcolor(COLOR_TEXT);
// ve hai truc toa do
line(0, Yc, VP_WIDTH, Yc);
line(Xc, 0, Xc, VP_HEIGHT);
// ve hai mui ten
line(Xc, 0, Xc-5, 5);
line(Xc, 0, Xc+5, 5);
line(VP_WIDTH, Yc, VP_WIDTH-5, Yc-5);
line(VP_WIDTH, Yc, VP_WIDTH-5, Yc+5);
// Ve goc toa do
outtextxy(Xc-8, Yc+8, "O");
}
//---------------------------------------------------------
void SetLineColor(int C)
{
LineColor = C;
}
//---------------------------------------------------------
void SetPixel(int x, int y)
{
putpixel(Xc+x, Yc-y, LineColor);
}
//---------------------------------------------------------
void Set2Pixel(int Ox, int Oy, int x, int y)
{
putpixel(Ox+x, Oy-y, LineColor);
putpixel(Ox-x, Oy-y, LineColor);
}
//---------------------------------------------------------
void Set2PixelHor(int Ox, int Oy, int x, int y)
{
putpixel(Ox+x, Oy-y, LineColor);
putpixel(Ox+x, Oy+y, LineColor);
}
//---------------------------------------------------------
void ClearViewPort(void)
{
struct fillsettingstype FillInfo;
LPEVENT lpEvent;
int Cx1=280,Cy1=203,Cx2=337,Cy2=223;
int Ox1=350,Oy1=203,Ox2=405,Oy2=223;
if ((buf = farmalloc(size)) == NULL)
{
return -1;
}
else
{
getimage(200,150,470,240,buf);
}
setfillstyle(SOLID_FILL,BLUE);
HideMouse();
bar(200,150,470,240);
setcolor(WHITE);
rectangle(200,150,470,240);
outtextxy(200+(270-8*strlen(s))/2,170,s);
setfillstyle(SOLID_FILL,LIGHTBLUE);
bar(Cx1,Cy1,Cx2,Cy2);//280,203,337,223);
int OK=0;
outtextxy(285,210,"Cancel");
outtextxy(365,210,"OK");
int event;
do
{
lpEvent=GetEvent();
if(kbhit())
{
if((event=getch())==13)
{
CompleteOk:
HideMouse();
putimage(200,150,buf,COPY_PUT);
ShowMouse();
farfree(buf);
return OK;
}
if(event==27)
{
CompleteCancel:
HideMouse();
putimage(200,150,buf,COPY_PUT);
ShowMouse();
farfree(buf);
return 0;
}
if(event==9)
{
OK=!OK;
Cancel:
if(OK==0)
{
HideMouse();
LUAÂÄN VAÊN TOÁT NGHIEÄP 95
setfillstyle(SOLID_FILL,BLUE);
bar(Ox1,Oy1,Ox2,Oy2);//350,203,405,223);
outtextxy(365,210,"OK");
setfillstyle(SOLID_FILL,LIGHTBLUE);
bar(Cx1,Cy1,Cx2,Cy2);//280,203,337,223);
outtextxy(285,210,"Cancel");
ShowMouse();
}
Ok:
if(OK==1)
{
HideMouse();
setfillstyle(SOLID_FILL,BLUE);
bar(Cx1,Cy1,Cx2,Cy2);//280,203,337,223);
outtextxy(285,210,"Cancel");
setfillstyle(SOLID_FILL,LIGHTBLUE);
bar(Ox1,Oy1,Ox2,Oy2);//350,203,405,223);
outtextxy(365,210,"OK");
ShowMouse();
}
}
if(event==0)
{
event=getch();
if(event==75)
{
OK=0;
goto Cancel;
}
if(event==77)
{
OK=1;
goto Ok;
}
}
else
flushall();
}
if(lpEvent->Msg==1)
{
if(lpEvent->Posx>=Cx1&&lpEvent->Posx<=Cx2&&lpEvent->Posy>=Cy1&&lpEvent-
>Posy<=Cy2)
{
OK=0;
goto CompleteCancel;
}
if(lpEvent->Posx>=Ox1&&lpEvent->Posx<=Ox2&&lpEvent->Posy>=Oy1&&lpEvent-
>Posy<=Oy2)
{
OK=1;
goto CompleteOk;
}
}
LUAÂÄN VAÊN TOÁT NGHIEÄP 96
ShowMouse();
}while(1);
}
char FindPos,FindValue;
int Thoigian=0;
FILE *f,*f1;
char t,t1,t2,t3,t4;
// char St_add[]="0000 Hex",End_add[]="000F Hex";
int end_line;
strcpy(OutFile,InFile);
i=strlen(OutFile);
LUAÂÄN VAÊN TOÁT NGHIEÄP 97
do
{
OutFile[i]='\0';
}while(OutFile[--i]!='.');
strcat(OutFile,"tmp");//dat ten cho file se tao ra
for (FindPos=3;FindPos>=0;FindPos--)
for(FindValue=0;FindValue<22;FindValue++)
if(St_add[FindPos]==KyTu_Hex[FindValue])
Value1+=pow(16,(3-FindPos))*Gtri_Dec[FindValue];
for (FindPos=3;FindPos>=0;FindPos--)
for(FindValue=0;FindValue<22;FindValue++)
if(End_add[FindPos]==KyTu_Hex[FindValue])
Value2+=pow(16,(3-FindPos))*Gtri_Dec[FindValue];
f=fopen(InFile,"rt");
f1=fopen(OutFile,"w+t");
fwrite(St_add,4,1,f1);
fwrite(End_add,4,1,f1);
do
{
do
{
fread(&t1,1,1,f);
}while(t1!='\'');//ngay sau dia chi cua lenh
do
{
fread(&t1,1,1,f);
}while(t1==' ');//den lenh
end_line=0;
do
{
fread(&t2,1,1,f);
Value1++;
DemSpace=0;
do
{
fread(&t,1,1,f);
DemSpace++;
}while(t==' '&&DemSpace<3);//con la lenh hoac dia chi hay da cham dut mot lenh
{
t3=t;
fread(&t4,1,1,f);
Value1++;
fwrite(&t3,1,1,f1);
fwrite(&t4,1,1,f1);
fwrite(&t1,1,1,f1);
fwrite(&t2,1,1,f1);
DemSpace=0;
do
{
fread(&t,1,1,f);
if(t==' ')
DemSpace++;
}while((t=='\''||t==' ')&&DemSpace<3);//con la lenh hoac dia chi hay da cham dut mot
lenh
if(DemSpace==2)
t1=t;
}
if(DemSpace>2)
{
end_line=1;
}
}while(end_line==0);
}while(Value1<=Value2);
fcloseall();
return OutFile;
}
//---------------------------------------------------------
int SEND::Out()
{
int result,Temp;
FILE *f;
char value;
int n,dem=0;
int Stop=0;
char KyTu_Hex[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','a','b','c','d','e','f'};
int Gtri_Dec[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,10,11,12,13,14,15};
if ( (f = fopen(OutFile,"rt")) == NULL)
{
OutError("Cannot open input file.");
return dem;
}
while(!feof(f))
{
do
{
result=inportb(sta);
result=result & 0x80;
Stop=Esc();
LUAÂÄN VAÊN TOÁT NGHIEÄP 99
do
{
result=inportb(sta);
result=result & 0xC0;
Stop=Esc();
}while(result!=0x40&&Stop!=1);//doc ack cho den khi ack = 1
if(Stop==1)
return -1;
outportb(ctr,0x01);// cho strobe = 0 de bao cho phan thu biet da goi xong mot byte du lieu ra
thanh ghi du lieu
}
return 0;
}
//---------------------------------------------------------
int SEND::DeleteFile()
{
return remove(OutFile);
}
//---------------------------------------------------------
int Esc()
{
if(kbhit())//nhan Esc de thoat
{
if(getch()==27)
{
OutError("Task is not complete !!!");
}
else
flushall();
LUAÂÄN VAÊN TOÁT NGHIEÄP 100
return 1;
}
return 0;
}
XIV.CLASS TEXTBOX.HPP
#include <string.h>
#if !defined __TEXTBOX__
#define __TEXTBOX__
class TEXTBOX
{
private:
int l,t,r,b;
int Color,Color1;
char S[100],S1[100];
char Dri[100],Path_var[100],Name[100],TenFile[100],SubFile[100];
int chiso;
public:
TEXTBOX() {S[0]='\0';}//S1="Duong dan";}
void InitTextBox(int x1,int y1,int x2,int y2,int color,int color1,char s[]);
void Path();
void PressTextBox();
void OutTextBox();
int Left(){return l;}
int Top(){return t;}
int Right(){return r;}
int Bottom(){return b;}
void DelChar(int length);//,int xoa);//de xoa ky tu khi gap phim del tai texbox
void InsertChar(char c);
void GetS(char s[]){strcpy(s,S);};
void GetS_in(char s[]){strcpy(S,s);}
int DuongDan(char s[]);
void Get_path(char s[]){strcpy(s,Path_var);};
void Get_name();
};
#endif
XV.MODULE TEXTBOX.CPP
#include <dir.h>
#include <stdio.h>
#include <conio.h>
#include <graphics.h>
#include <string.h>
#include <dos.h>
#include <ctype.h>
#include "textbox.hpp"
#include "mouse.h"
//---------------------------------------------------------
void TEXTBOX::InitTextBox(int x1,int y1,int x2,int y2,int color,int color1,char s[])
{
char buffer[MAXPATH];
l=x1;t=y1;r=x2;b=y2;
Color=color;
LUAÂÄN VAÊN TOÁT NGHIEÄP 101
Color1=color1;
strcpy(S1,s);
getcwd(buffer, MAXPATH);
strcpy(S,buffer);
strcat(S,"\\");
}
//---------------------------------------------------------
void TEXTBOX::OutTextBox()
{
setfillstyle(SOLID_FILL,Color);
bar(l,t,r,b);
setcolor(WHITE);
line(l,b,r,b);
line(r,t,r,b);
setcolor(BLACK);
line(l,t,r,t);
line(l,t,l,b);
setcolor(WHITE);
if(Color==WHITE)
setcolor(BLACK);
outtextxy(l,t+(b-t-textheight(S))/2-b+t-3,S1);
outtextxy(l+5,t+(b-t-textheight(S))/2,S);
}
//---------------------------------------------------------
/*
void TEXTBOX::PressTextBox()
{
setcolor(BLACK);
line(l,t,r,t);
line(l,t,l,b);
setcolor(WHITE);
line(l,b,r,b);
line(r,t,r,b);
}
*/
//---------------------------------------------------------
void TEXTBOX::Path()//lay duong dan nhap vao vao bien S cua TEXTBOX
{
char a;
int C1=Color1;//C1 la mau cua text trong textbox o che do nhap ten file
setcolor(C1);
outtextxy(l+5,t+(b-t-textheight(S))/2,S);
chiso=0;
MouseText(l+textwidth(S)+4,t+(b-t+textheight(S))/2,Color,C1);//,S);//gia dau nhac chuot
char stemp[128];
strcpy(stemp,S);
while((a=getch())!=13)//&&a!=27)//kiem tra phim Enter
{
switch(a)//kiem tra ky tu nhap vao
{
LUAÂÄN VAÊN TOÁT NGHIEÄP 102
case 0:switch(a=getch())
{
case 71://home
MouseText(l+6,t+(b-t+textheight(S))/2,Color,C1);//,S);
chiso=-strlen(S);
break;
case 72:break;
case 73:break;
case 75://left arrow
int f=textwidth(S);
int xt=l+6+f+(--chiso)*8;
int yt=t+(b-t+textheight(S))/2;
if(xt<l+6)
xt=l+6+f+((++chiso))*8;
MouseText(xt,yt,Color,C1);//,S);//so 8 la be ngang 1 ky tu
break;
case 77://right arrow
if(chiso==0)break;
f=textwidth(S);
MouseText(l+f+6+((++chiso))*8,t+(b-t+textheight(S))/2,Color,C1);//,S);//so 8 la
be ngang 1 ky tu
break;
case 79://end
f=textwidth(S);
MouseText(l+f+6,t+(b-t+textheight(S))/2,Color,C1);//,S);
chiso=0;
break;
case 80:
case 81:
case 82:break;
case 83://del
setcolor(GREEN);
outtextxy(l+5,t+(b-t-textheight(S))/2,S);
DelChar(strlen(S));//,chiso);
f=textwidth(S);
setcolor(YELLOW);
outtextxy(l+5,t+(b-t-textheight(S))/2,S);
MouseText(l+f+6+chiso*8,t+(b-t+textheight(S))/2,Color,C1);//,S);//so 8 la be
ngang 1 ky tu
break;
}break;
case 8://backspace
setcolor(Color);
outtextxy(l+5,t+(b-t-textheight(S))/2,S);
chiso--;
DelChar(strlen(S));
setcolor(C1);
outtextxy(l+5,t+(b-t-textheight(S))/2,S);
MouseText(l+textwidth(S)+6+chiso*8,t+(b-t+textheight(S))/2,Color,C1);//,S);
break;
case 27://Esc
strcpy(S,stemp);return;
default:
LUAÂÄN VAÊN TOÁT NGHIEÄP 103
if(a>=32&&a<=126)
{
if((strlen(S)+2)*8>(r-l))break;
setcolor(GREEN);
outtextxy(l+5,t+(b-t-textheight(S))/2,S);
InsertChar(a);
setcolor(C1);
outtextxy(l+5,t+(b-t-textheight(S))/2,S);
MouseText(l+textwidth(S)+6+chiso*8,t+(b-t+textheight(S))/2,Color,C1);//,S);//so 8 la
be ngang 1 ky tu
}
}
MouseText(l+textwidth(S)+6,t+(b-t+textheight(S))/2,Color,C1);//,S);//truong hop phim khong
co nhiem vu nao dac biet
};
if (S[0]=='\0')
strcpy(S,stemp);
}
//---------------------------------------------------------
void TEXTBOX::DelChar(int length)//xoa ky tu tai vi tri con tro
{
int vitri=length+chiso;
for(int i=vitri;i<length-1;i++)
S[i]=S[i+1];
if(chiso<0)
{
S[length-1]='\0';
chiso++;
}
}
//---------------------------------------------------------
void TEXTBOX::InsertChar(char c)
{
int length=strlen(S);
for(int i=length;i>length+chiso;i--)
S[i]=S[i-1];
S[length+1]='\0';
S[i]=c;
}
//---------------------------------------------------------
int TEXTBOX::DuongDan(char s[])
{
int l=strlen(s),dem,dr;
char s1[200]="",s2[200]="";
dem=l-1;
if(s[1]==':')
switch(toupper(s[0]))
{
case 'A':dr=1;break;
case 'B':dr=2;break;
case 'C':dr=3;break;
case 'D':dr=4;break;
case 'E':dr=5;break;
LUAÂÄN VAÊN TOÁT NGHIEÄP 104
}
else dr=_getdrive();
for(int i=l-1;i>0;i--)
{
if(s[i]=='\\')
{
dem=i+1;
i=0;
}
else
dem=0;
}
strcat(s2,&s[dem]);
if(dem!=0) dem-=1;
strncpy(s1,s,dem);
strcpy(Path_var,s1);
strcpy(Name,s2);
return dr;
}
//---------------------------------------------------------
void TEXTBOX::Get_name()
{
int n=strlen(Name);
int phan_ten=1;
for(int i=0;i<=n&&phan_ten;i++)
{
if(Name[i]=='.'&&i<n)
{
for(int j=n;j>i;j--)
Name[j]=Name[j-1];
Name[j]='1';
Name[n+1]='\0';
phan_ten=0;
}
if(i==n)
{
Name[i]='1';
Name[i+1]='\0';
}
}
S[0]='\0';
strcat(S,Path_var);
strcat(S,"\\");
strcat(S,Name);
}
C. SÖÛ DUÏNG CHÖÔNG TRÌNH DOWNLOAD.
Ñeå söû duïng chöông trình DowLoad, tröôùc tieân phaûi veà maøn hình Dos (vì
chöông trình ñöôïc vieát trong moâi tröông Dos, khoâng quaûn lyù ñöôïc caùc chöông
trình ñieàu khieån thieát bò saún coù trong maùy, thoaùt veà Dos ñeå traùnh nhöõng xung
ñoät chöông trình).
LUAÂÄN VAÊN TOÁT NGHIEÄP 105
Goïi teân Demo.exe, luùc ñoù maøn hình seõ hieän leân nhö sau:
Ñeå choïn file baèng caùch goõ phím, click chuoät vaøo oâ Open File.
Nuùt pulldown
OÂ nhaäp text
Neáu nhaép nuùt pulldown thì seõ choïn file theo kieåu click chuoät. (hình sau). Choïn oå
ñóa, choïn loaïi file, choïn teân file vaø click OK ñeå choïn file.
LUAÂÄN VAÊN TOÁT NGHIEÄP 106
Sau khi choïn xong file thì trong baûng “Free memory request” xuaát hieän caùc ñòa
chæ ñaàu cuoái, vaø dung löôïng boä nhôù seõ söû duïng.
Sau ñoù click Send ñeå gôûi döõ lieäu ñi.
Khi quaù trình truyeàn file keát thuùc thì xuaát hieän thoâng baùo “Task is complete.”