You are on page 1of 100

LUAN VAN TOT NGHIEP

1






Chng I:

CHNG DAN NHAP
LUAN VAN TOT NGHIEP

2
I. AT VAN E:
Khi nhu cau hoc tap ngay cang cao th thiet b, phng tien day hoc cang ong
vai tro quan trong, no giup ngi thay d vat va trong viec truyen thu kien thc, giu p
ngi hoc nhanh chong tiep thu, ngoai ra con e minh hoa, ch ng thc mo t cach cu
the nhng bai hoc m ho tru tng.
Trong bai nay, ngi thc hien muon e cap en mo n hoc vi x ly, lap trnh vi
x ly, mo t mon hoc mang y ngha thiet thc trong xa hoi ma qua trnh cong nghiep
hoa, hien ai hoa dien ra tng ngay. Khi hoc mo n nay, ngi hoc khong ch c hoc
ve cau truc vi x ly ca pha n cng la n pha n me m, cach ket noi vi cac IC ngoai vi
8255, 8279, ma con phai s dung tha nh thao Kit vi x ly 8085,
Khi viet mot chng trnh tren Kit vxl 8085 va e kiem nghiem chng trnh o
th ngoi hoc phai qua ca c bc :
Bc 1: Xac nh muc ch yeu cau cua chng trnh.
Muc ch, yeu cau c xac nh t e bai, hoac mot nhu cau thc te, ay la
mu c ch chung cua chng trnh. e thc hie n mu c ch chung nay, co the
se phai qua nhieu bc, ma moi bc la mo t muc ch cu the mi, c giai
quyet bang mot chng trnh nho hn, phat sinh trong giai oan viet lu o.
Bc 2: Ve lu o
Lu o dung e trnh bay cach giai quyet va n e, thng th ngon ng dung
trong lu o kho ng phai la mot ngo n ng may xa c nh nao, lu o thc chat
e giup ngi thao chng chia nho mot chng trnh ln. T lu o tong
quat, co the ve ra lu o chi tiet.
Bc 3: Viet chng trnh bang ngon ng gi nh(ngon ng Assembler).
Bc 4: Chuyen sang ma may.
Bc 5: Nha p ma may vao Kit bang phm.
Bc 6: Chay th chng trnh va kiem tra ket qua.
Mot chng trnh c viet phai c chay th va kiem tra ket qua, ket qua
phai ung trong moi trng h p cho phep (ieu kien at ra trc) cua chng trnh,
va t ket qua kiem tra ma phan oan, nhan nh loi e sa chng trnh t au, co
khi phai sa lai ca lu o.
Trong cach lam tren, ta nhan thay co nh ng kho kha n rieng sau:
Qua trnh dch t ngo n ng gi nh sang ma ma y (bc 4), oi hoi s
quen thuoc ba ng tra ma, neu kho ng viec nay chiem nhieu thi gian, va viec kiem
tra lai cung chiem khong t thi gian. Tai nh ng lenh jump, nhng le nh call, ca n
phai xac nh a ch cu the, chnh xac cua o nh roi m i xac nh c lenh
jump. Viec nay ch hoa n tat khi chng trnh c dch sang ma may ga n nh ay
u.
giai oan nha p ma ma y (bc 5), e nhap nhanh th phai nh v tr
phm, phai nha p chnh xac e tranh thi gian do e sa mot chng trnh nha p sai.
e nha p mot byte can go 3 phm va phai oi chieuqua lai gia ba n dch chng
trnh, noi dung hie n th tren cac led 7 oan cung vi a ch o nh va ba n phm.
oi vi nh ng ai trong giai oan khi au hoc lap trnh vi x ly, th 2
viec tren luon xay ra nham lan gay mat nhieu thi gian vo ch.
Khi ca n them hoa c xoa, hoac sa chng trnh th ma t nhieu thi gian e do
lai chng trnh, nhap lai kho kha n, tham ch pha i nha p lai pha n ln chng tnh.
LUAN VAN TOT NGHIEP

3
Sau khi b mat ien th d lieu lu trong RAM khong co nguon d tr se b
mat het, phai nha p lai toa n bo chng trnh. oi vi nhng chng trnh nho th thi
gian nha p khong a ng ke, nhng oi vi nhng chng trnh ln th ay la cong viec
mat nhieu thi gian, va gay phie n ha cho ngi hoc cu ng nh ngi lap trnh vi x
ly.
Ben ca nh o, thc te a co nhng thiet b na p EPROM rat tien li, ma co the
em y tng o vao viec hoc la p trnh vi x ly nhat la viec giao tiep vi thiet b kha c
t vi x ly la mot ieu kha de dang.
Ngoai ra, chng trnh ai hoc rat bao quat, thi gian va ieu kien ch cho phe p
sinh vien i het be noi cua chng trnh ma cha co hoac t co dp tm hieu ve chieu
sau. Do o, o an tot nghiep la mot c hoi tot cho sinh vien ao sau vao chng trnh
hoc, ng dung bai hoc vao thc te, chng minh c s hu ch cua nh ng kie n thc
a hoc c trong moi trng s pham.
T nh ng ly do tren, ngi viet quyet nh chon e tai GIAO TIEP MAY
TNH VI VI X LY 8085.
e tai a ra mo t chng trnh nh mot cong cu ho tr viec hoc lap trnh vi x
ly tren Kit8085 vi mot th t sau:
1) Xac nh muc ch yeu cau cua chng trnh ca n viet.
2) Ve lu o.
3) Viet chng trnh ba ng ngon ng Assembly (ngon ng gi nh).
4) Nha p chng trnh ba ng ngon ng Assembly vao may (dung Norton).
5) Goi chng trnh dch Assembler e dch t ngon ng Assembly sang mo t
file co pha n m rong prn cha ma may.
6) Trong chng trnh Giao tiep, goi file dch e na p vao RAM.
7) Chay th va kiem tra ket qua.
Cach lam nay co nhng u iem sau:
Dch t ngo n ng Assembly (ngo n ng gi nh) ton rat t thi gian v viec nay do
may tnh am trach, vi o chnh xac tuyet oi.
Cung vay, viec na p d lieu vao RAM cu ng ch trong vai giay, va c kiem tra
trong khi nap nen o chnh xac cu ng tuyet oi.
Ngoai ra, chng trnh c lu tr, quan ly de dang, de xem lai, de kiem tra. Khi
ca n them, hoac xoa hoac sa hoac chep lai mot oan chng trnh, ngay ca thay
oi a ch bat au, cung rat n gia n.
Ve o chnh xac va thi gian ca n thiet th oi vi chng trnh cac ln ca ng co li,
ca ng phai na p chng trnh nhieu th cang co li.
II. TAM QUAN TRONG CUA VAN E.
Trong xa hoi ngay ca ng phat trien, lng kien thc ca n truyen tai trong nha
trng ngay ca ng ta ng, ma thi gian cho phe p ngay ca ng b giam i, th s no lc cua
ca ngi day la n ngi hoc eu rat can thiet. Ben ca nh o, phng tien t nhieu se
gop pha n quan trong trong qua trnh hoc tap.
Trc ay, viec hoc la p trnh vi x ly a dien ra mot cach t nhien, co the coi
nh a ay u ve phng tien hoc tap. Nhng nay, neu co them mo t chng trnh mo
phong cac ho vi ieu khie n, hay vi x ly, giao tiep may tnh vi vi x ly e truyen
file th tat nhien se co mat tch cc, mang them nhieu li ch cho viec hoc.
LUAN VAN TOT NGHIEP

4
Giao tiep may tnh vi vi x ly co n la mot ch ng thc ve giao tiep _ nhng g
a c hoc _ tren chnh kit thc ta p, ieu o se kch hoat s tm toi, s ham thch
hieu biet cua sinh vien.
III. GII HAN VAN E
ay la mo t chuyen e thu v, co nhieu va n e ang quan tam, nhng do nhng
gii ha n ve thi gian va kie n thc, nen trong o an nay, ngi viet ch co the trnh
bay nh ng phan sau:
Khai quat Kit 8085 s dung, cac linh kien co lien quan trc tiep en
giao tiep.
Cach thc s du ng kit, nhng hoat ong ben trong kit ve le nh, d lieu
ma sau o se c thay the ba ng ca ch na p t ma y tnh.
Giao tiep may tnh.
Mot so iem can lu y khi viet mo t chng trnh bang ngo n ng gi
nh cho chng trnh dch Assembler e tao ra mot file co pha n m rong .prn.
Cau truc mot file .prn, nhng so lieu nao can xua t.
oi net ve ngo n ng C, chng trnh Download
Chng trnh nhan d lieu.
IV. MUC CH NGHIEN CU
Trc mat: ay la mo t va n e hay, a thu hut ngi viet t lau ma nay m i co
dp thc hien, va cu ng la nhu cau can thiet trong thc te.
Lau dai: tuy ch la mot thiet ke n gia n, nhng la mo t c s ban au co the
phat trien them ra hng tong quat.
V. XAC NH THUAT NG
Ta e tai la Giao tie p may tnh vi kit vi x ly 8085. Thc chat, va n e giao
tiep ch la mot c s, phng tien chu yeu. Con san pham cua e tai la mot giao die n
tren man hnh vi tnh ma trong o, ngi dung cho the chon fie ca n truyen, va truyen
xuong kit qua mot port nao o e nap d lieu vao RAM.
e tai nay ch thc hien viec na p d lieu vao RAM ma sau o se co nh ng phat
trien khac. Thc te e ra la viec thc ha nh la p trnh vi x ly tren kit, chng trnh ch
la e thc tap, chu yeu ch na p vao RAM, ma viec nap d lieu vao Kit mat nhieu
thi gian, va mu c ch cua e tai trc tien la e giai quyet van e o, sau o co the
phat trien len e oc cac vung RAM, EPROM.












LUAN VAN TOT NGHIEP

5





Chng II:

C S LY LUAN


























LUAN VAN TOT NGHIEP

6
T va n e at ra nh chng 1 a trnh bay, ngi thc hien e tai a tien
ha nh giai quyet theo hng sau:
Xac nh thiet b giao tiep: Kit vi x ly 8085 a co san cac IC ngoai vi 8255 la m
nhiem vu giao tiep, ch ca n cho n IC, xa c nh a ch cua IC o, a ch cua cac
port vao ra, mode hoat ong cua cac port, xac nh cac iem noi ket pha n cng
vi may tnh va viet chng trnh nha n, phat d lieu.
Xac nh cong giao tiep: oi vi may tnh: chon cong LPT1 (ma sau nay co the
phat trien e co the s dung ca LPT2, COM1, COM2) vi phng pha p giao tiep
song song bat ong bo.
Xay dng giao dien tren ma n hnh ma y tnh:Yeu cau can co va phu h p vi
ngi s dung. Sau o tien hanh viet giai thuat, va bat tay vao viet chng trnh.
ay, ngi thc hie n a viet chng trnh truyen d lieu trong moi trng
Borland C 3.1. Trong qua trnh viet, phai giai quyet nh ng kho khan phat sinh mot
cach cu the.
Viet chng trnh truyen, nha n d lieu vi Kit.
Ghe p noi cac pha n lai.
Th nghiem.
Sa loi.
Phng pha p chu yeu la tham khao tai lieu va thc nghiem
























LUAN VAN TOT NGHIEP

7





Chng III:

KIT THC TAP
VI X LY 8085








LUAN VAN TOT NGHIEP

8
I. KIT THC TA P VI X LY 8085:
Kit thc tap vi x ly 8085 la mot loai may tnh chu yeu phuc vu cho mu c ch
hoc ta p va nghie n cu thiet ke ve lnh vc vi x ly. Kit nay, xuat phat tai trng H
S pham ky thuat Trung tam Viet-c, va do nhu cau hoc ta p va nhu cau thc te,
cac giao vie n trong bo mo n ie n-ien t cua trng a cai tien cho phu hp. Mat
kha c, sinh vie n thuoc khoa, trong cac e tai tot nghiep, o an mon hoc, cung vi s
hng thu, a tham khao, tm hieu ve cau tao va nguyen ly hoat ong, va m rong
them mot so chc na ng cho kit.
Mot Kit thc tap vi x ly thng co cac pha n chnh c trnh bay trong s o
khoi (Hnh 1).
Vi muc ch cua e tai nay la giao tiep song song nen trong Kit 8085, ch ca n
quan tam en 8085 va bo lenh 8085, 8255, 8279.
I.1. S LC VI X LY 8085:
Vi x ly (microprocessor) la mo t thiet b ba n da n cha cac mach logic ien t
co kha na ng x ly cac d lieu, chng trnh t ngoai a vao e ieu khien cac IC,
thiet b ket noi theo muc ch nh trc.
I.1.1. Cau truc phan cng:
I.1.1.1. Cau truc ben ngoai:
8085 la mo t bo vi x ly 8 bit do Intel san xuat, au tien vao nam 1977. No co
kha na ng nh a ch cho bo nh ti 64 Kbyte, IC nay co 40 chan, dang DIP, s dung
nguon n + 5V.
Chc nang, da ng tn hieu, trang thai cac cha n cua 8085 c cho bang sau:
Bang 1:
Chan Ky hieu In/out 3 state Y ngha
1,2 X1, X2 I X1, X2 la 2 ngo vao cua ma ch dao
ong. Tan so ngo vao c chia cho 2
bi mach chia be n trong. Ta n so lam
viec cc aicua:
8085A: 6MHz
8085A-2: 10MHz
8085A-1:12MHz
3 Reset Out O Cho biet CPU ang reset. Tn hieu nay
co the dung e reset cac tha nh pha n
kha c trong mach.
4 SOD O Serial Output: ngo ra d lieu noi tiep
c xac nh bi lenh SIM.
LUAN VAN TOT NGHIEP

9
5 SID I Serial Input: ngo vao d lieu noi tiep,
d lieu nay c na paobit th 7 cua
thanh ghi Accumulator khi thc hie n
lenh RIM.
6 TRAP I Trap: tn hieu kho ng nga n c. Ngo
vao trap c kch bi canh len.
7,8,9 RST 7.5, 6.5, 5.5 I Restart Intrerupt Repuest: la cac tn
hieu ngat co the nga n c. RST 7.5
co the c kch ba ng ca nh, RST 6.5
va 5.5 co the c kch ba ng mc.
10 INTR I Interrupt: la tn hieu ngat thongdu ng co
the che c lenh kch ba ng mc.
11 INTA\ O Interrupt Acknowledge: tn hiweu dung
e bao cho thiet b yeu cau ngat INTR
biet rang microprocessor a cha p nha n
yeu cau ngat va thiet b yeu cau ngat
hay at lenh len bus d lieu.
19-12 AD7-AD0 I/O-3 Address/Data bus: cac ng d lieu
va cac ng a ch c tch h p
chung vi nhau. trang thai T1 cua
chu ky may, ca ngo nay ong vai tro la
cac ngo ra a ch. Cac tra ng thai co n
lai cua chu ky ma y, no ong vai tro la
cac ng d lieu.
20 Vss Ground.
28-22 A15-A8 O-3 Address bus:ca c ngo nay c dung e
xuat 8 bit a ch cao.
30 ALE O Address Latch Ennable: ngo nay ta ra
mot xung trang thai T1 cua chu ky
ma y e xac nh A15-A8 va AD7-AD0
la cac ng a ch.
31 WR\ O-3 Write: dung e xac nh icroprocessor
ang thc hien lenh ghi d lieu len bo
nh hay IO.
32 RD\ O-3 Read: dung e xac nh
microprocessor ang thc hien lenh
LUAN VAN TOT NGHIEP

10
oc d lieu t bo nh hay IO.
29,33,34 S0,S1, IO/M\ O,O-3 Machine Cycle Status: 3 bit nay cho
biet trang thai chu ky may.
IO/M\ S1 S0 Trang thai
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.
trang thai d ng (halt), S1=S2=0 va
IO/M\ trang thai tong tr cao. Trong
khoa ng thi gian Hold va reset th
trang thai cua S0 va S1 kho ng xac
nh,IO/M\ trang thai tong tr cao.
Thng th cac bit WR\, RD\ va IO/M\
dung e xac nh tra ng thai lam viec
cua bus nh: memory read, memory
write, IO read, IO write.
35 READY I Ready la tn hieu tra li t bo nh hoac
thiet b ngoai vi IO cho microprocesser
biet e microprocessor co the hoa n
tha nh chu ky may ang thc hien.
36 RESET IN I Reset: ngo vao reset 8085 e tr ve
trang thai ban au cua no. Tn hieu nay
phai mc 0 khoa ng 3 chu ky xung
clock.
37 CLK O Clock out: ngo ra tn hieu clock e
cung ca p cho ca c thiet b khac. Ta n so
cua no ba ngta n so ngo vao chia 2.
38 HLDA O Hold Ackowledge: tn hieu ngo ra cho
biet tn hieu hold a c chap nha n
va CPU se trang thai Hold chu ky
xung clock tiep theo.
LUAN VAN TOT NGHIEP

11
39 HOLD I Hold request: nha n tn hieu yeu cau
ngng t bo ieu khien DMA.
40 Vcc Power: nguon cung ca p +5V.

Cac cha n cua IC c bo tr nh hnh ve sau (hnh 2):





















Toan bo cac tn hieu cua 8085 co the uc pha n tha nh 6 nhom:
(1) Tuyen a ch
(2) Tuyen d lieu
(3) Cac tn hieu trang thai va ieu khien
8085
CLK(OUT)
RESET(OUT)
A11
S0
AD6
22
INTA
Vss
AD2
3 HLDA
32
35
38
15
5
S1
AD5
21
24
18
7
RST5.5
IO/M
X2
RST7.5
AD1 13
10
9
8
SOD
INTR WR
17
2 HOLD
28
30
39
11
4
AD4
29
31
37
40
6
1
READY
X1
AD0
19
A10
A12
A15
RD
SID
16
Vcc
36
14
RST6.5
20
23
26
A9
A14
ALE
AD7
25
A8
A13
TRAP
27
33
12
AD3
34
RESET IN
8085 Pinout




Hnh 2: S o chan va cac tn hieu cua 8085
LUAN VAN TOT NGHIEP

12
(4) Nguon cung ca p va cac tn hieu tan so
(5) Cac ngat va ca c tn hieu tan so
(6) Cac cong I/O noi tiep















Hnh 3: cac nhom hoat ong cua 8085

I.1.1.2. Cau truc ben trong 8085:
8085 bao gom n v logic va so hoc ALU (Arithmetic and Logic Unit),
n v nh thi va ieu khien (Timing and Control Unit) , bo giai ma va thanh ghi
lenh (Instruction Register and Decoder), day thanh ghi ( Register Array), ieu
khien ngat (Interrupt Control) va ieu khien I/O noi tiep (Serial I/O Control) (xem
hnh 4).








Accumulater
Register
Interrupt Control
8 Bit Internal Data Bus
(8) (8) (8)
Temp. Reg.
Instruction
Register
Flag
INTR RST 5.5 RST 7.5
RST 6.5 TRAP
INTA
Multiplexer
(8) (8)
(8)
(8)
(8)
(8)
Reg. Reg.
W Z
B C
Temp. Reg. Temp. Reg.
Serial I/O Control
SID SOD
Control
and
Status Signals
+5V
AD7
AD0
A15
A8
SID
SOD
TRAP
X1 X2 Vcc Vss
INTR
READY
HOLD
8085
GND
RST 7.5
RST 6.5
RST 5.5
RESET IN
RESET
OUT
CLK
OUT
28
21
19
12
30
29
33
34
32
31
11
18
35
39
36
21 21
1 2
5
4
6
7
8
9
10
40 20
ALE
S0
S1
IO/M
RD
WR
INTA
HLDA
High Outer
Address Bus
Multiplexed
Address/Data Bus
Serial
I/O
Ports
Interrupts
and
Externally
Initiated
Signals

LUAN VAN TOT NGHIEP

13


















Hnh 4: S o khoi chc nang cua 8085

I.1.2. Cau truc phan mem:
Tap lenh cua 8085
Mot lenh (Instruction) la mot mau nh pha n (binary pattern) c thiet ke ben
trong vi x ly e thc hien mo t chc na ng cu the (Instruction set), xac nh cac chc
na ng ma vi x ly co the thc hien. Ta p lenh cua 8085 co 74 lenh (hn 8080 hai le nh),
cac lenh nay co the c pha n tha nh 5 nhom ch c na ng :
Cac hoat ong (sao chep) truyen d lieu
Cac hoat ong toan hoc
Cac hoat ong logic
Cac hoat ong re nhanh
Va, cac hoat ong ieu khie n
Tap lenh vi x ly 8085 c phan tha nh 3 nhom tuy theo kch c t :
1. Cac lenh mot t hoac 1 byte
2. Cac lenh hai t hoac 2 byte
3. Cac lenh ba t hoac 3 byte
Lenh mo t byte cha ma hoat ong (Opcode) va toan t (Operand) trong cung
mot byte.
Trong lenh hai byte, byte th nhat neu len ma hoat ong va theo sau la toan t.
oi vi lenh ba byte, byte au tien cho biet ma hoat ong, 2 byte theo sau la d
lieu (noi dung hoac a ch) 16 bit.
I.2. IC NGOA I VI 8255:
LUAN VAN TOT NGHIEP

14
I.2.1. Cau truc:
I.2.1.1. Pha n cng:
8255 la mo t thiet b I/O giao tiep song song, no co the c lap trnh e truyen
d lieu di cac ieu kien kha c nhau, t I/O n gia n en I/O co ngat. No kha linh
hoat, a na ng va tinh te (khi co nhieu cong I/O c oi hoi), nhng cung phc ta p.
No la mot thiet b I/O pho du ng co the c s dung vi hau het bat ky bo vi x ly
nao.
8255 co 40 cha n da ng DIP nh hnh 5.





















Hnh 5 : s o chan va S o khoi cua 8255
Ba ng 2: Ba ng liet ke chc na ng ca c chan IC 8255
Ten cac cha n Chc na ng
D7 D0 Data bus (Bi Direction)
RESET Rest Input
CS\ Chip Select
RD\ Read Input
WR\ Write Input
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
A1
A0
PB7
PB6
PB5
PB4
PB3
D0
D1
D2
D3
D4
D5
D6
D7
PC7
PC6
PC5
PC4
PC0
PC1
PC2
PC3
PB0
PB1
PB2
PA4
PA5
PA6
PA7
PA3
PA2
PA1
PA0
WR
CS RESET
GND
Vcc
8255
Group
A
Port C
Upper
(4)
Group
A
Port C
Lower
(4)
Group
B
Port
B
(8)
Group
A
Port
A
(8)
Group
A
Control
Group
A
Control
Data
Bus
Buffer
Read
Write
Control
Logic
I/O
PA7-PA0
I/O
PA7-PA0
I/O
PA7-PA0
I/O
PA7-PA0
Bidirectional
Data Bus
D7-D0
RD
WR
A1
A0
RESET
CS




RD

LUAN VAN TOT NGHIEP

15
A0, A1 Port Address
PA7 PA0 Port A
PB7 PB0 Port B
PC7 BC0 Port C

S o khoi tren hnh 5. trnh bay hai cong 8 bit (A va B) va hai co ng 4 bit (C
U

va C
L
) bo ien tuyen d lieu, va logic ieu khien. Hnh 5.9 (b) trnh bay mo t s o
n gian hoa nhng m rong cua cau truc ben trong, cha mot thanh ghi ieu khien.
S o khoi nay cha tat ca cac pha n t cua mo t thiet b la p trnh; co ng C thc hie n
chc na ng tng t chc na ng cua thanh ghi trang thai, ngoai ra con cung ca p cac tn
hieu bat tay.
I.2.1.2. Pha n mem:
T ieu khien
Hnh 6 trnh bay mo t thanh ghi c goi la thanh ghi ieu khien (control
register). Noi dung cua thanh ghi nay, goi la t ieu khien (control word), neu ro mot
chc na ng I/O cho moi cong. Thanh ghi co the c xam nha p e ghi t ieu khie n.
Khi A
0
va A
1
m c logic 1, nh a e cap tren. Thanh ghi nay kho ng the b xam
nha p oi vi hoat ong oc.
Bit D
7
cua thanh ghi ieu khien neu ro hoac chc nang I/O hoac chc nang
at/at lai bit nh pha n loai trong Hnh 5.8 (b). Neu D
7
= 1cac bit D
6
D
5
quyet
nh cac chc na ng I/O cac mot khac nhau. Neu bit D
7
= 0, cong C hoat ong mo t
at/at lai bit (BSR). T ieu khien BSR khong a nh hng en cac chc na ng cua
cac cong A va B.
LUAN VAN TOT NGHIEP

16




















Hnh 6: Cau truc t ieu khie n cua IC ngoai vi 8255.
Ca n c vao t ieu khien cua 8255, co the klhi tao 8255 cac mode 0 hoac
mode 1 hoac mode 2, va co the xac nh hng vao ra d lieu cho moi port.
e trao oi thong tin vi cac ngoai vi ( ay la cac mo - un vao ra) thong qua
8255, ba bc sau ay la can thiet :
(1) Xac nh c a ch ca c cong A, B va C va cua thanh ghi ieu khien theo
logic chon chip (CS) va cac ng a ch A
0
, A
1
.
(2) Ghi t ieu khien vao thanh ghi ieu khie n.
(3) Ghi cac lenh I/O e thong tin vi cac ngoai vi thong qua cong A,B va C.
He thong Kit a c at cho 8255 lam viec v i cac ngo vao / ra mot 0 nh
sau :
1. Cac ngo ra c chot
2. Cac ngo vao khong c chot
3. Cac cong khong co kha na ng bat tay va ngat.
V du:
e A, C la cong nha p (8 bt), B la cong xuat(8bt), va cho n ngoai vi co a ch
t 00 03 th phai lam nh sau:
Gi t ieu khien 99hex vao thanh ghi ieu khien.
PORT C (LOWER)
1=INPUT
0=OUTPUT

D
7
D
6
D
5
D
4
D
3
D
2
D
1
D
0

PORT B
1=INPUT
0=OUTPUT

MODE SELECTION
0=MODE 0
1=MODE 1

PORT C (UPPER)
1=INPUT
0=OUTPUT

PORT A
1=INPUT
0=OUTPUT

MODE SELECTION
00=MODE 0
01=MODE 1
1X=MODE 2

GROUP B
GROUP A
MODE SET FLAG
1=ACTIVE
LUAN VAN TOT NGHIEP

17
Xuat t ieu khie n ra thanh ghi ieu khien co a ch 03hex.
I.3. IC GIA I MA HIEN TH 8279:
I.3.1. Cau truc 8279
I.3.1.1. Phan cng:
8279 la mo t phng phap pha n cng e giao tiep vi ban phm ma tra n va
hien th a h p. Bat li cua phng pha p du ng pha n mem la vi x l b ba n trong luc
kiem tra va lam ti hien th. 8279 se thay the vi x l am trach hai nhiem vu nay.
8279 (Hnh ) la mot thiet b da ng DIP _ 40, co hai pha n chnh : ba n phm va
hien th. Pha n ba n phm co the c noi vi mo t ma tran toi a 64 phm, s go phm
c giai nay va ma phm c lu tr vao bo nh FIFO be n trong (First _ In _ First _
Out : Vao trc, ra trc) , va mo t tn hieu ngat c phat ra mo i lan go phm. Pha n
hien th co the cung ca p mot hien th co quet toi a 16 Led. Pha n nay co bo nh RAM
16 x 8, co the c s dung oc / ghi tho ng tin cho cac muc ch hien th. Pha n hien
th co the c khi tao dang ghi phai (right entry) hoac ghi trai (left entry).
Tan so xung ong ho ca p cho 8279 toi a la 3,125MHz
Hnh 7: S o cha n logic cu a 8279
Bang 3: Chc nang cac chan IC 8279
Ten cha n So chan Mo ta va chc na ng
DB0 DB7 8 Bi-directional
databus:ng d lieu 2
chieu.
LUAN VAN TOT NGHIEP

18
Tat ca cac lenh va d lieu
giaCPU va 8279 c
truyen tren nh ng ng
d lieu nay.
CLK 1 Clock input: ngo vao xung
clock. Xung clock co tan o
toi a la 3,125MHz.
RESET 1 Reset in: du ng e at lai
trang thai lam viec cua
8279 khi ngo vao nay
m c cao.
Sau khi c reset, 8279
co the lam viec che o:
Hien th 16 ky t loi
vao trai.
Lap ma quet phm
khoa ngoai 2 phm.
CS\ 1 Chip select: tac ong mc
tha p cho phep 8279 thc
hien ca c chc na ng ket noi
vi CPU e truyen va
nhan d lieu.
A0 1 Buffer address: ng a
ch nay thng c ket
noi vi 5a ch A0 cua vi
x ly dung e pha n biet
lenh hay d lieu.
A0=[1]: tn hieu vao ra
la lenh.
A0=[0]:tn hieu vao ra
la d lieu.
RD\, WR\ 2 Read, Write:ch phep oc
hay ghi d lieu len bus d
lieu, thanh ghi ieu khie n
hay bo nh RAM hien th.
IRQ 1 Interrupt Request: ng
tn hieu yeu cau ngat
LUAN VAN TOT NGHIEP

19
(output). Ngo ra nay se
m c cao ne co d lieu
trong bo nh FIFO hay
SensorRAM, ngo ra nay se
m c thap moi khico s
oc bo nh
FIFO/SensorRAM va
trlai mc cao khi d4co d
lieu cha trong RAM.
Vss, Vcc 2 Cap nguon 0Vva +5V cho
8279.
SL0 SL3 4 Scan lines: 4 ng scan
line nayco the giai ma ra
16 ng hay ma hoa
tha nh 1 ng, c dung
e quet phm hay ma tran
cam bien va hien th.
RL0 RL7 8 Return line: c noi vi
ng scan line tho ng qua
cac phm hay cong ta c
cam bien. che o quet
phm, se ket h p vi ca c
ng scan lines tao tha nh
ma cua phm c nha n.
SHIFT
CTRL/STB
1
1
Shift, Control / Strobe
input Mode: trong che o
quet phm, m c logic cua
tng ngo vao nay se c
lu tr vi v tr cua phm
e tao ra 1 gia tr cua phm
c nha n.
OUT A0 A3
OUT B0 B3
4
4
ey la 2 portngo ra cua
thanh ghi hien th 16 x 4
bit. D lieu t nh ng thanh
ghi nay se c a ra
ong bo ket h p vi cac
ng quet scan lines e
a hp tha nh so hien th.
LUAN VAN TOT NGHIEP

20
Hai ngo ra 4 bit nay co the
xoa oc la p va co the ket
hp vi nhau e tao thanh
mo t ngo ra 8 bit.
BD\ 1 Blanking display: dung e
xoa hien th trong qua
trnh chuyen oi gia cac
so hay khi ga p le nh xoa
hien th.
S o khoi logic (Hnh 8) trnh bay bon pha n chnh cua 8279 : ba n phm, quet,
hien th va giao tiep vi x l. Cac chc na ng cua cac pha n nay c mieu ta nh di
ay :

IR
BD
CL RESE DB0-
Data
Buffer
Control and
Timing
Registers
Timing
and
Control
Internal Data Bus (8)
Display
Address
Registers
16 x 8
Display
RAM
8 x 8
FIFO/Sensor
RAM
Keyboard
Debounce
and
Control
OUT A0-A3 OUT
Display
Registers
SL0-
Scan Counter
RDWR CS A0
I/O Control
8
FIFO/Sensor
RAM
Status
RL0-RL7
SHIF
Return
Hnh 8: S o khoi cua 8279
e giao tiep vi vi x ly, 8279 can tam ng d lieu hai chieu (BD
0
_ BD
7
),
mot ng yeu cau ngat (IRQ), va sau ng giao tiep, ke ca ng a ch cua bo
em (A
0
)
Khi A
0
m c cao, cac tn hieu c hieu nh la cac t ieu khien va trang
thai. Khi A
0
mc thap, cac tn hieu c hieu la d lieu.
ng IRQ len mc cao bat k luc nao viec ghi nha n d lieu vao FIFO. Tn
hieu nay c s dung e ngat vi x l nham ch th tnh kha dung cua d lieu.

LUAN VAN TOT NGHIEP

21
I.3.1.2. Lap trnh cho 8279
e co s dung 8279, can biet cac t ieu khien cua 8279.
8279 co tat ca tam t ieu khien, tuy theo muc ch s dung ma se cho n t ieu
khien thch hp.
at mot hien th / ba n phm

MSB LSB
Ma 0 0 0 D D K K K

Trong o, D D la mot hien th va K K K la mot ban phm
D D
0 0 Hien th 8 k t 8 bit _ ghi trai
0 1 Hien th 16 k t 8 bit _ ghi trai
1 0 Hien th 8 k t 8 bit _ ghi phai
1 1 Hien th 16 k t 8 bit _ ghi phai

K K K
0 0 0 Ban phm quet co lap ma _ Khoa ngoai 2 phm
0 0 1 Ban phm quet co giai ma _ Khoa ngoai 2 phm
0 1 0 Ban phm quet co lap ma _ Xoay vong N phm
0 1 1 Ban phm quet co giai ma _ Xoay vong N phm
1 0 0 Ma tran cam bien, quet co lap ma
1 0 1 Ma tran cam bien, quet co giai ma
1 1 0 Ngo vao Strob, quet hien th co lap ma
1 1 0 Ngo vao Strob, quet hien th co giai ma
Trong suot thi gian RAM hien th ang b xoa (~ 160 S), no khong the c
ghi vao. Bit co trong so cao nhat (MSB) cua t trang thai c at trong suot thi
gian nay. Khi RAM hien th tr nen kha dung tr lai, bit nay t ong c at lai.

LUAN VAN TOT NGHIEP

22
I Khi tao 8279
Mac du 8279 co ti tam t ieu khien, nhng khong phai luc nao cung s
dung het tat ca tam t nay.
Khi khi tao mot 8279, th t cac t ieu khien sau ay la can thiet :
+ at mot hien th / ba n phm
+ Lap trnh xung ong ho
+ Xoa RAM hien th, hoac FIFO hoac ca hai
Cac t ieu khie n con lai co the c gi ra thanh ghi ieu khien trong luc nay
hoac khi can.
II. CAC THAM SO CAN THIET CUA KIT:
Tren ay, a gii thieu cac IC quan trong e co the ket noi Kit vi may tnh.
Ngoai ra, cac thong so ve a ch cung kho ng ke m pha n quan trong.
Bang : Bang o a ch bo nh cua kit

Bo nh A
15
A
14
A
13
A
12
A
0

Vung a ch
bo nh
0 0 0 0 0 0000
H

ROM1
0 0 0 1 1 1FFF
H

0 0 1 0 0 2000
H

ROM2
0 0 1 1 1 3FFF
H

0 1 0 0 0 4000
H

RAM1
0 1 0 1 1 5FFF
H

0 1 1 0 0 6000
H

RAM2
0 1 1 1 1 7FFF
H

1 0 0 0 0 8000
H

RAM3
1 0 0 1 1 9FFF
H

1 0 1 0 0 A000
H

8279
1 0 1 1 1 BFFF
H





3 bit ng vi 6 trang
thai cua 6 vung nh
LUAN VAN TOT NGHIEP

23
Da vao 3 bit A13, A14, A15 e xac nh cac vung ROM, RAM nh sau:













Bang 4 : Bang o a ch I/O cua kit

Bo nh A7 A6 A5 A4 A3 A2 A1 A0
Vung a ch bo
nh
0 0 0 0 0 0 0 0 00
8255A
0 0 0 0 0 1 1 1 07
0 0 0 0 1 0 0 0 08
8255B
0 0 0 0 1 1 1 1 0F
0 0 0 1 0 0 0 0 10
8253A
0 0 0 1 0 1 1 1 17
0 0 0 0 1 0 0 0 18
8253B
0 0 0 1 1 1 1 1 1F
0 0 1 0 0 0 0 0 20
8259
0 0 1 0 1 1 1 1 27
0 0 1 0 1 0 0 0 28
8251
0 0 1 0 1 1 1 1 2F
0 0 1 1 0 0 0 0 30
ADC0809
0 0 1 1 0 1 1 1 37
0 0 1 1 1 0 0 0 38
DAC0808
0 0 1 1 1 1 1 1 3F



3 bit ng vi 6 trang
thai cua 6 vung nh
74138
A
13

A
14

A
15

A
B
C

O
0

O
1

O
2

O
3

O
4

O
5

O
6

O
7

CS\ROM1
CS\ROM2
CS\RAM1
CS\RAM2
CS\RAM3
CS\8279
No use
No use
Hnh 9 : chon bo nh
LUAN VAN TOT NGHIEP

24

Da vao 3 bit A3, A4, A5 co the xac nh ngoai vi s dung nh sau:












III. S DUNG KIT:
Chc nang cac phm:
Phm RESET hoac Q: khi ong lai toa n bo he thong Kit, ca c thanh ghi, ca c
iem dng, cac khi tao, eu c reset.
Phm A hoac Address hoac S: at lai a ch o nh e tac ong vao: xem d
lieu, thay oi noi dung.
Phm UP hoac | : lu tr d lieu 2 led trai vao a ch ghi 4 led phai.
Phm Down hoa c + : e xem lai d lieu a nap.
Phm P hoac PC: at a ch chay chng trnh.
Phm G hoac GO: chay chng trnh tai a ch a cho n san.
Phm I hoac INTR: ngat chng trnh, khi ong nong he tho ng, cac khi tao,
iem dng eu va n con.
Cac thao tac nha p lieu tren la e a cac d lieu, cac lenh vi x ly a c ma
hoa ra da ng ma may, vao nhng a ch yeu cau cua ngi thao chng. Vasau o,
ket qua kiem tra, chay th chng trnh se cho biet chng trnh ung hay sai.
Muc ch chu yeu cua e tai la rut nga n thi gian dch sang ma may va thi
gian nha p lieu, ngha la phai na p c d lieu vao bo nh RAM ma khong to n thi
gian nha p lieu.









A
B
C

O
0

O
1

O
2

O
3

O
4

O
5

O
6

O
7

74138
A
3

A
4

A
5

CS\8255A
CS\8255B
CS\8253A
CS\8253B
CS\8259
CS\8251
CS\ADC0805
CS\DAC0808

Hnh 10: Chon I/O
LUAN VAN TOT NGHIEP

25









Chng IV:

GIAO TIEP
MAY TNH VI
KIT THC TAP
VI X LY 8085
LUAN VAN TOT NGHIEP

26
Giao tiep gia may tnh va thiet b ngoai vi co the bang mot trong ca c ca ch sau:
I. GIAO TIEP BANG SLOT-CARD:
Trong may tnh, tren main board hoac IO-card, thng che tao sa n cac ranh
cam (slot) cho phe p m rong bo nh, cai at the m pha n c ng, m rong pham vi ng
dung cho may tnh.
e s du ng c cac ra nh cam nay, ca n phai co tai lieu chnh xa c ve ca c thong
so ca n thiet, v du a ch cua cong la bao nhieu, thuoc loai ranh bao nhieu bit, theo
chua n nao, kich thc pha n ma ch in cam vao , o day mach in, ranh nguon, ra nh d
lieu, ranh d tr,
II. GIAO TIEP BANG CONG MAY IN:
Moi may tnh eu co cong may in at pha sau ma y. Cong may in kho ng ch e
ket noi vi may in ma co n co the ket noi vi nhieu loai thiet b ngoai vi khac cho
muc ch o lng va ieu khien,
Cong may in la loai cong 25 cha n, d lieu truyen song song, de ket noi, cac a
ch cua co ng cua cac may tnh hau nh giong nhau.
Giao tiep ba ng cong may in goi la giao tie p song song bat ong bo. Trong kieu
giao tiep nay, ni phat tn hieu va ni nhan tn hieu eu co xung bao phat va xung
bao nha n, ta n so xung clock tai ni phat va ta n so xung clock tai ni thu khong ca n
quan tam.
III. GIAO TIEP BANG CONG COM:
Cong COM c s dung kha pho bien. D lieu truyen cong nay thuoc dang
d lieu noi tiep. Tn hieu truyen cong nay co the truyen i xa nh co cau tao ng
day cap t si hn cong song song, mc ap tn hie u cao.
Cong COM co loai 9 cha n va loai 25 cha n nh cong song song, co tong co ng 8
ng da n tn hieu khong ke ng noi at, t may tnh i ra la loai phch cam nhieu
cha n khac vi cong song song.
Cong COM, con goi la cong noi tiep theo chuan RS-232. Chuan RS-232 t na m
1969 c cha p nha n chuyen dung cho truyen so lieu va ca c ng noi kiem tra gia
terminal va moderm, toc o cc ai la 20Kbps, vi khoa ng cac toi a kho ng qua
15m. ay la lai giao tiep khong ca n bang co driver.
Mc ap tn hieu tren ng day la +15V/-15V. Tren ng day, mc logic 1 co
ien ap t 5V en 15V va m c logic 0 t 5V en 15V. m c a p nay khong tng
thch TTL do o thng phai s du ng them ca c IC chuyen dung MC1488, MC1489 e
thay oi mc logic cho tng thch TTL.
Giao tiep noi tiep co n chia ra noi tiep bat ong bo va noi tiep ong bo (s dung
cac chua n UART dung CMOS 6402, USART dung ngoai vi 8251, chua n ACIA dung
NMOS 6850 ).
IV. CHON PHNG PHAP GIAO TIEP VA CONG KET NOI:
Trong e tai nay, v ly do thi gian co ha n, nen ngi thc hien e tai ch co
the s dung mot phng pha p truyen d lieu, o la truyen d lieu song song bat ong
bo qua cong may in LPT1.
Cong LPT1 la mot cong song song, d lieu c truyen vi toc o kha cao t
may tnh, do o toc o truyen d lieu chung ch con phu thuoc vao Kit.
LUAN VAN TOT NGHIEP

27
Hnh da ng mot cong LPT1 c cho trong hnh sau:




Hnh 11: Cong LPT (DB25).
Bang 5: Bo tr chan cong LPT may tnh:

Chan Ky hieu Vao/Ra Mo ta
1 STROBE Output Byte c in
2 D0 Output ng d lieu c in D0
3 D1 Output ng d lieu c in
4 D2 Output ng d lieu c in
5 D3 Output ng d lieu c in
6 D4 Output ng d lieu c in
7 D5 Output ng d lieu c in
8 D6 Output ng d lieu c in
9 D7 Output ng d lieu c in
10 Ack Input Acknowledge
11 Busy Input 1:may in ban
12 PE Input Het giay
13 SCLT Input Select
14 AF Output Autofeet
15 ERROR Input Error
16 INIT Output 0: at lai may in
17 SLCTIN Output Select in
18 GND Noi at
19 GND
20 GND
21 GND
22 GND
23 GND
24 GND
25 GND

Cong may in LPT1 co a ch c ba n la 378Hex va cong LPT2 co a ch c ba n
la 78Hex.
Cac thanh ghi trong may tnh ket noi vi co ng ma y in:
Thanh ghi d lieu (Data register, a ch = a ch c ban )
13
1
25 14
LUAN VAN TOT NGHIEP

28










Thanh ghi tra ng thai(status register, a ch = a ch c ba n +1)








Thanh ghi ieu khien(control register, a ch = a ch c ba n + 2)







Hnh 12: Ket noi cac thanh ghi cong may in cua may tnh PC.
Cong LPT la cong ghep noi song song, tat ca nhng ng da n cua co ng nay
eu tng thch TTL, ngha la chung eu cung ca p mot mc ap nam gia 0 va 5V. Do
o, rat thch h p cho ket noi vi Kit.
Nhn vao ba ng cong du ng cac cha n cua co ng LPT va 3 thanh ghi cua may tnh,
ta thay co the s du ng thanh ghi data la thanh ghi phat, co nhiem vu truyen d lieu ra
ngoai, va thanh ghi ieu khie n se gi tn hieu ieu khien cho Kit, con thanh ghi trang
thai se nha n tn hieu bao trang thai hie n tai cu a Kit ve may tnh.
e ket noi gia Kit va may tnh trong trng hp nay, phai s dung IC giao tiep
ngoai vi 8255 e xuat va nha n d lieu. Con ve pha ma y tnh, co the du ng ngon ng
lap trnh C e oc va xuat cac thanh ghi d lieu. e ket noi n gia n, co the khi tao
8255 mode 0 vi port A oc thanh ghi data, port B xuat trang thai tra ve cho thanh
ghi trang thai, va port C du ng e nha n tn hieu ieu khien t thanh ghi ieu khie n cua
may tnh.

D

D

D

D

D

D

D

D
D0
(Pin 2)
D1
(Pin 3)
D2
(Pin 4)
D3(Pin
5)
D4
D
6
D
5
D
4
D
3
0 0 0 D
7


ERROR(Pin 15)
SLCT(Pin 13)
PE(Pin 12)
ACK(Pin 15)
BUSY(Pin 11)

D
6
D
5
D
4
D
3
D
2
D
1
D
0
D
7

D0 (Pin 1)
D1 (Pin 14)
D2 (Pin 16)
D3(Pin 17)
IRQ-Enable


LUAN VAN TOT NGHIEP

29




Chng V:

VIET CHNG TRNH
VA DCH SSEMBLER
CHO CAC CHNG
TRNH VI X LY.
LUAN VAN TOT NGHIEP

30
I. TAI SAO PHA I S DUNG CHNG TRNH DCH ASSEMBLER?
Khi hoc vi x ly, th moi sinh vie n eu phai hoc ve so Hex, oi so gia cac he,
cac so bu,, cac phe p toan so hoc va logic tren cac bien. Ngoai ra, con phai hoc
mot loai ngo n ng may kho nh, ch c viet bang cac ky t Hex, e na p vao Kit.
Mot cach kha c e tao ra cac ky t kho nh na y la s dung mot chng trnh dch
Assembler e dch t mot file co pha n m rong la asm sang mot file co pha n m
rong prn cha ngo n ng may. ay la ly do phai s dung mot chng trnh dch
Assembler. Vi muc ch nay, ngi s dung khong ca n thiet phai biet nhieu ve ngon
nga Assembly ma ch ca n mo t so kien thc nho e goi chng trnh dch. ay chnh
la cach chnh e giam thieu thi gian trong viec dch va nhap d lieu vao Kit.
II. Mot so ieu can lu y khi s dung chng trnh dch Assebler:
e viet mo t chng trnh va nha p vao Kit, th au tien phai biet yeu cau cua
chng trnh, viet lu o tong quat, lu o chi tiet va tien hanh viet chng trnh. tat
ca cac bc tren eu phai s du ng lai vi cach la m ma e tai nay neu len. Tuy nhie n,
t bc dch t ngo n ng gi nh sang ma may th co nhieu iem khac nhau:
1) Khi viet chng trnh ngon ng gi nh (ngo n ng Assembly), can phai tuan
thu mot so qui nh rieng e co the dung mot chng trnh dch Assembler.
a) Phai dung t khoa Org au va End cuoi chng trnh, nh ch end
khong co cham cuoi cau.
b) Tat ca cac lenh da ng gi nh phai ghi chnh xa c.
c) cuoimot so Hex phai ghi ky t h khong ke in hay thng.
d) Neu mot so Hex bat au bang mot ky t Alphabet, th phai them lien ngay
trc so hex o mot con so 0.
e) Mot nha n khai bao kho ng c vt qua 6 ky t.
f) Va mot so qui nh khac.
2) Nha p chng trnh vao may tnh: e nha p de dang va thua n tien, co the s dung
Norton che o Edit, va lu thanh mot file co phan m rong la asm.
3) Dung chng trnh dch Assembler e dch file tren tha nh mot file mi co pha n
m rong la prn, file cu khong thay oi.
4) Sau o dung chng trnh download e nap file vao Kit.
Tat ca cac yeu cau tren eu rat de nh nh i theo mot trnh t nhat nh mo t
cac t nhien. Norton la mo t chng trnh tien ch rat pho bien. Chng trnh
Download co giao dien a c toi gian nhat.
III. FILE *.PRN, NOI DUNG, AC IEM, VA D LIEU CHNH:
Chng trnh dch se dch t mot file x.asm sang mot file x.prn.
Xem noi dung mot file co pha n rong prn trong v du sau:
LUAN VAN TOT NGHIEP

31
MACRO-80 3.4 01-Dec-80 PAGE 1
Org 0000h
0000' 3E 00 MVI A,00h
0002' 32 A001 STA 0A001h
0005' 3E 80 MVI A,80h
0007' 32 A001 STA 0A001h
000A' 3E 06 MVI A,06h
000C' 32 A000 STA 0A000h
000F' 76 HLT
MACRO-80 3.4 01-Dec-80 PAGE S
Macros:

Symbols:

No Fatal error(s)

Gia s dch file x.asm sau:








Th se c file x.prn sau:

















Trong o, noi dung ca n nap vao Kit la:
3E 00
32 A001
3E 80
32 A001
3E 06
32 A000
76

Nhng vi th t la:
3E 00
32 01 A0
3E 80
32 01 A0
3E 06
32 00 A0
76

Org 0000h
MVI A,00h
STA 0A001h
MVI A,80h
STA 0A001h
MVI A,06h
STA 0A000h
HLT
END

LUAN VAN TOT NGHIEP

32
Van e at ra la lam the nao e loc ra c noi dung ch tren theo th t ung
nh noi dung na p vao Kit. Va n e nay se c giai quyet chng ke: Chng trnh
DownLoad.
LUAN VAN TOT NGHIEP

33





Chng VI:

CHNG TRNH
DOWNLOAD
LUAN VAN TOT NGHIEP

34
I. OI NE T VE NGON NG C:
I.1. Nguon goc:
C c phat minh va cai at a u tien bi Dennis Ritchie chay tren he ieu hanh
Unix, c Martin Richards phat trien trong thap nie n 70. C s du ng chua n ANSI
c e ngh lan cuoi cung vao nam 1989.
I.2. C la ngon ng bac trung:
c xem la ngo n ng ba c trung v C to h p nhng tha nh pha n tot nhat cua ca c
ngon ng bac cao vi s ieu khie n va tnh linh hoat cua ngon ng Assembly. C cho
phep thao tac tren cac bit, cac byte va cac a ch nh ng phan t c ban vi cac
chc na ng cua may tnh, ma cua chng trnh C cung mang tnh kha chuyen.
I.3. C la ngon ng cua lap trnh vien:
C c cac la p trnh vie n lam viec that s tao ra, thuc ay va kiem tra, e roi C
lai mang ve cho ho nhng g ho mong muon: t han che, t li pha n na n, cac cau truc
khoi, cac ham n le, va mot tap ong kn nhng t khoa.
II. CAC PHNG PHA P LAP TRNH:
II.1. Phng pha p lap trnh lenh:
Chng trnh la mo t day cac lenh.
Lap trnh la xac nh cac lenh cung vi th t cac lenh o.
Phng pha p nay ch co gia tr vi chng trnh lenh ( < 100
lenh).
II.2. Phng pha p lap trnh thu tuc:
Chng trnh la mo t he thong ca c thu tuc va ha m, mo i thu tuc
hay ham la mot day cac lenh.
Lap trnh la i xa c nh nhng thu va ham, va xa c nh cac lenh
ben tring thu tuc va ham o.
Phng pha p nay tien bo hn phng phap tren.
II.3. Phng pha p lap trnh n the:
Chng trnh la mo t he thong cac n the (module).
Moi n the la mo t he thong thu tuc, ham co cung y ngha nao
o. Moi thu tuc va ham la mot day cac lenh.
Cac n the co c lu tr va bien dch pha n cach, nen de
dang la p ghe p. Tuy nhien phng phap nay con thieu t nhien,
ngai ra neu chng trnh qua rong va qua sau th kho ng the
qua n ly c.
II.4. Phng pha p lap trnh hng oi tng:
Chng trnh la mot he thong ca c oi tng, cac oi tng trong
thc te c dien ta ba ng ngon ng tin hoc.
Lap trnh la i xac nh nh ng oi tng cung nhng quan he
cua chung.
Tnh t nhie n cua phng phap nay lam no tr nen sinh ong,
moi oi tng co thuoc tnh va ha nh ong rieng nh trong th c
te do o de hnh dung, de qua n ly. Ngoai ra, nh da tren ca c
oi tng nen tnh tien hoa va m rong rat cao.
LUAN VAN TOT NGHIEP

35
Trong pha n viet chng trnh giao dien vi tnh, ngi viet a cho n phng pha p
lap trnh hng oi tng. Nh nhng u iem tren, phng pha p nay cho phep bo
sung mot cach de da ng, tao ieu kien thua n li cho viec bo sung sau nay neu can.
III. PHNG PHA P LAP TRNH HNG OI TNG TRONG C
III.1. Cac khai niem:
The gii thc Phng pha p lap trnh Ngo n ng lap trnh
oi tng bat ky trong the
gii thc
oi tng Bien co kieu lp
(tng t kieu cau truc)
Khai nien chung cua mo t
oi tng
Lp oi tng Kieu lp(Class-tng t
kieu cau truc)
Thuoc tnh c quan tam
cua oi tng
Thuoc tnh Tha nh pha n d lieu cua
kieu lp
Kha nang co the thc hie n
cua mot oi tng
Hanh ong Thu tuc, ham cua kieu lp
III.2. Phng phap:
III.2.1. Xac nh cac lp oi tng, quan he qua cac lp nay
(xay dng s o lp)
III.2.2. Thiet ke cac lp (bieu dien tren may tnh)
Tha nh phan d lieu (thuoc tnh).
Tha nh phan x ly (hanh ong).
III.2.3. Cai at cac lp: Viet ham main()
III.2.4. Th nghiem.
IV. Th c hien viet chng trnh DownLoad:
IV.1. Yeu cau cua giao dien:
Cho phe p chon file se truyen.
+ Ba ng cach go vao ten file
+ Ba ng cach click chuot e chon
Xem trc vung nh can thiet se s dung RAM Kit 8085
Cho n cong truyen.
Truyen file co kiem tra.
IV.2. Cho n ngon ng lap trnh:
Cho n ngon ng C viet moi trng Dos
Ly do: yeu cau thiet b (may tnh) kho ng cao, phu h p kien th c
ngi viet.
u iem: C la mot co ng cu lap tnh gon nhe, chay nhanh, hieu qua
va khe p kn. V s du ng C mo i trng Dos nen kho ng can pha i
kiem soat cac driver nh neu viet moi trng Windows. Ngon ng
C cho phe p truy cap trc tiep cac port, de dang kiem soat tng bit d
lieu.
Khuyet iem: Vung nh trong mo i trng Dos ch co 640Kbyte,
va sau khi khi ong xong ( ma n hnh dos) th ch co n lai tren di
400Kbyte, kho ng cho phep tao mot giao die n ph c tap. o phan giai
che o graph trong Dos kho ng the so sanh vi mo i trng
Windows.

LUAN VAN TOT NGHIEP

36
IV.3. Chng trnh Download:
Danh sach cac lp:
Ten lp Cong du ng
Button.hpp Tao cac nut nha n, va cha cac ha nh ong lien quan
Disklist.hpp Liet ke cac o a trong may, va cha ca c hanh ong lien quan
List.hpp e ve ba ng liet ke cac th mu c va file, va cha cac ha nh ong lien
quan
Mouse.h Cha ca c thao tac ve chuot
Screen.h Cha cac tham so ve giao dien ma n hnh, va cha cac ha nh ong
lien quan
Textbox.hpp Ve khung nha p lieu (ten file, loai file,..) , va cha ca c ha nh ong
lien quan
Xuat.hpp Cha ca c thao tac, ha nh ong lien quan en truyen file

Lu o cua ham main():





























Giai thch lu o:

Hnh 13: lu o
ham Main() cua
chng trnh
DownLoad.

Begin

InitGraphics()
Khi tao
tha nh cong

Mainpro()

closegraph()
End

CT bao loi
ong che o
o hoa
Thoat

InitValues()


InitScreen()

InitMouse()
S

LUAN VAN TOT NGHIEP

37
Chng trnh bat au begin.
InitGraphisc():Khi tao che o o hoa, v chng trnh nay co s dung ma n hnh
che o o hoa trong moi trng Dos. Neu khi tao khong tha nh cong th tho ng
bao loi khi tao va thoat khoi chng trnh.
InitValues(): ham nay con khi tao cac gia tr ban au cho man hnh: kch
thc ca so, kch thc ky t.
InitScreen(): Ve man hnh vi cac gia tr a khi tao
InitMouse(): Khi tao chuot.
Khi tao tha nh cong: kiem tra, neu khi ong chuot thanh cong th tiep tuc cong
viec, neu kho ng tha nh co ng th xuat ra tho ng bao loi va thoat khoi chng trnh.
MainPro la chng trnh qua n ly moi thao tac cua toan bo chng trnh, t cac
thao tac nha p xuat en cac thao tac la chon cac tuy chon.
Closegraph(): ong che o o hoatrc khi thoat khoi chng trnh.
End: ket thuc chng trnh.
Ham Main() nay c viet bang ngon 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 biet ra ng ham main() khong tra ve mot gia tr nao, ngha la
trong ham main nay khong co lenh return() hoac lenh la mo t lenh return khong co
tham so. (void) cho biet ham main kho ng ca n oi so a vao.
Lu o ham Mainpro():










Begin
Khi tao cac gia tr
cho cac o nha p text
Khi tao cac gia tr
cho cac nut chon
A
LUAN VAN TOT NGHIEP

38































Hnh 14: Lu o cua ham MainPro().
Giai thch lu oham MainPro():
Truyen
file Return
Xac nha n
thoat
Xac nh
file chon
Click Nut
pull down
Click nut
Exit

Nha n Esc
Click nut
Send
Xuat cac o nha p
text ra man hnh
Xuat cac nut chon
ra man hnh
A

GetEvent()
Click vao
o Open File
Goi chng trnh
nhap vao ng da n
Goi chng trnh
xuat ca so chon file
LUAN VAN TOT NGHIEP

39
Khi tao cac gia tr cho cac o nha p text: tren ma n hnh se co khung cho phep go
vao ten file, chng trnh con nay se khi tao cac toa o, mau ch cho text.
Khi tao cac gia tr cho ca c nut chon: cu ng giong nh tren, nhng oi vi ca c nut
Send, Exit va nut Pulldown.
Xuat cac o nhap text ra man hnh.
Xuat cac nut chon ra ma n hnh.
GetEvent: chng trnh con la n bien co chuot. Bien co nay cha cac thong tin ve
toa o chuot, phm nao cua chuot c click, th i gian click la n cuoi, e xa x
nh cac lenh ke tiep ca n thc hie n.
Click vao o Open File: neu bien co click chuot xay ra tai toa o cua cua o Open
file th ket qua click vao o nay la TRUE, thc hien chng trnh con nha p vao
file can xuat. Ngc lai th bo qua.
Click vao nut Pulldown: neu bien co click chuot xay ra tai toa o cua cua nut
Pulldown th ket qua click vao o nay la TRUE, goi chng trnh xuat ra ca so
cho n File, ngc lai th bo qua.
Click nut Send: neu bien co click chuot xay ra ta i toa o cua cua nut Send th ket
qua click vao o nay la TRUE, thc hie n xa c nha n file xuat a nha p vao cha, neu
file xuat cha nhap vao th bao loi va bo qua lenh Send, neu file xuat a co ten
roi th xuat file.
Click nut Exit: neu bien co click chuot xay ra tai toa o cua cua nut Exit th ket
qua click vao o nay la TRUE, thc hien xac nhan muon thoat khoi chng trnh,
neu xac nha n ung th thoat, ngc lai th bo qua lenh Exit.
Nha n Esc: neu ngi du ng nhan vao nut Esc tre n ba n phm th bien co Nha n Esc
se la TRUE, thc hien xac nha n muon thoat khoi chng trnh, neu xac nha n
ung th thoat, ngc lai th bo qua lenh thoat ba ng nut Esc.
Sau o, chng trnh lai thc hien vo ng la p tai ham lay bien co chuot cho ti
khi co thao tac mi.
Gia s click chuot vao o Open File, o nay se oi trang thai, cac kyt trong o se
oi mau bao trang thai ch nhap, nha p vao mo t ten fie co pha n m rong la prn vi
ay u ng da n, sau o go phmEnter th ten file se c lu vao mo t bien toa n
cuc, va ca c a ch au va a ch cuoi cua chng trnh ngon ng may se c hien
len khung Free memory request, va mo t dong thong bao be n di bao cho biet
click Send e truyen file.
Gia s tiep tuc click Send th mo t thong bao xa c nhan se xuat hien, muon xa c
nha n co chac la ngi dung muon truyen file khong. Neu tra li Ok th chng trnh
truyen file se c goi thi ha nh.
Sau ay la lu o cua chng trnh con thc hien viec truyen File.
Giai thch lu o:
Goi chng trnh cat file: chng trnh cat file thc chat la mo t chng trnh con
co nhiem vu loc ra nhng thong tin quan trong trong file x.prn se c truyen
i, va lu chung trong mot file x.tmp ch xuat hien trong khoa ng thi gian
chng trnh ang cat file. Sau o file x.tmp nay se b xoa i khi qua trnh
truyen file hoan tat. Qua trnh truyen file phai s du ng bc nay e cac qua trnh
bat tay gia ma y tnh va Kit c on nh (thc nghiem), va viec viet chng
trnh c ro rang hn.
LUAN VAN TOT NGHIEP

40
Goi chng trnh xuat file: chng trnh nay se oc file co ten la x.tmp c tao
t chng trnh cat file. Chng trnh nay se tua n t oc file, nha n tn hieu bat tay
va gi d lieu cho en khi het file.
Trong qua trnh truyen file, neu co s co, gia s kho ng bat tay c v ly do nao
o, th chn trnh se i, thi gian keo dai se coi nh viec truyen file bi loi, va
thong bao loi se xuat hien.
Neu truyen thanh co ng th tho ng bao hoa n tat cong viec.
Return: Quay tr ve chng trnh MainPro.
Trong ham MainPro(), can quan tam chng trnh con truyen file.

























Hnh 15: Lu o chng trnh con co nhiem vu truyen file.
Trong pha n nay, ta quay lai cong viec cat file a gii thieu muc III cua chng V.
Chng trnh con cat file la e tao ra mot file tam thi co phan m rong .tmp. file nay
se la mo t file co cau truc n gia n hn file .prn rat nhieu nham e giup cho viec
truyen file them n gia n.
Trc het hay khao sat mo t file *.prn, file nay c dch ra bi 1 chng trnh dch
Assembler.
Trong chng trnh, byte lenh eu tien bat au a ch 0000hex. Nha n xet rang mo i
dong lenh bat au b mo t a ch bo nh, va lien sau a ch nay la mo t dau nhay
n, ma dau nhay n au tien ch xuat hien tai a ch cua dong lenh au tien.
e tm a ch au tien th co the tm dau nhay n au tien.
ung
Goi chng trnh
Cat file
Begin
Goi chng trnh
xuat file
Tha nh cong
Thong bao hoa n
tat co ng viec
Return.
Thong bao loi
cong viec
Sai
LUAN VAN TOT NGHIEP

41
MACRO-80 3.4 01-Dec-80 PAGE 1
Org 0000h
0000' 3E 00 MVI A,00h
0002' 32 A001 STA 0A001h
0005' 3E 80 MVI A,80h
0007' 32 A001 STA 0A001h
000A' 3E 06 MVI A,06h
000C' 32 A000 STA 0A000h
000F' 76 HLT
MACRO-80 3.4 01-Dec-80 PAGE S
Macros:

Symbols:

No Fatal error(s)

Con a ch cuoi cung la a ch cua byte cuoi cung cua do ng lenh cuoi cung. Dong
lenh cuoi cung la dong lenh nam ga n t Macros nhat. T macros nay cung la t
macros duy nhat.
cach tm a ch cuoi cung nh sau:
Tm t Macros
Do ngc tr ve phc tren cho en khi gap dau nhay n au tien
Tiep tuc do ngc ve trc, neu trong vo ng 10 ky t ma ga p mo t ky t xuong
dong th th dau nhay n va roi nam ngay sau dong lenh cuoi cu ng.
Trong do ng lenh cuoi cung, tm byte cuoi cung se tnh c a ch cuoi cung.
Cach tm mot dong lenh:
Khi ga p mo t dau nhay n, th tm mo t ky t kha c dau nhay n hoac khoang
trang.
Khi ga p ky t au tien, o chnh la ky t au tien cua byte lenh.
Neu sau 2 ky t cua lenh la mot khoa ng trang th 2 ky t va roi chnh la mo t ma
lenh.
Neu sau 2 ly t cua mot byte lenh kho ng co khoang tra ng nao, th 2 ky t va roi
chnh la 2 cua 4 ky t bao mot a ch.
Neu sau 2 ky t tnh t luc bat au mo t lenh la 2 khoa ng tra ng tr len th 2 byte
va roi la 2 byte cuoi cung cua mot dong lenh.
Bat au mot chu ky mi tm dong ma lenh.
Lu ma lenh vao file *.tmp:
au tien lu a ch au, a ch cuoi vao file.
Neu gap ma lenh (2 ky t) th ghi tiep vao file.
Neu gap ma a ch th oi cho 2 ky t sau vi 2 ky t trc cua a ch.
en khi gap a ch cuoi cu ng th ghi vao 2 ky t cuoi cung va ong file.
















Cong viec
tren c mo ta ba ng lu o sau:
LUAN VAN TOT NGHIEP

42















































S
S
S
Nha n a ch au
Begin
Nha n a ch cuoi
M file nguon
M file ch
Tm dau
oc 2 ky t lenh
Xet ky t tiep theo
Khong la
khoang trang
La mot
khoang trang
> 2
khoang trang
Lu 2 ky t
Lu 2 ky t sau
oc 2 ky t tiep theo
> a ch cuoi


S
End


Hnh 16: Lu o chng trnh con Cat file
Busy=1
Xua t dlieu ra bus
Strobe=1
ACK=1 & Error=0
AF=1
oc Error=0
s
a
Thu nible cao
AF=0
Error=1
sai
Thu nible thap
Ktra d lieu
sai
ung
Xuat FF ra data bus
AF=0 Strobe=0
Het d lieu
Chuan b d lieu
ke tie p
sai
Sai
Return
ung
ung
Sai
u ng
ung
Begin
Xuat 00 ra
data bus
AF=0 Strobe=0
LUAN VAN TOT NGHIEP

43









































Hnh 17: Lu o chng trnh con xuat d lieu.
Sau khi cat file, mo t file m i a c tao ra. Chng trnh truyen file en bc
xuat file. D nhien trc khi xuat file cung ca n co nhng thu tuc m file, at cac mc
logic ca n thiet e khi ong cong: m file hp le, cho bit AF=0, strobe=0.
Giai thch lu o chng trnh xuat file:
LUAN VAN TOT NGHIEP

44
Trc tien, may tnh xuat strobe=0, AF=0 ba ng chach xuat ra port 37Ahex
so 03hex (xem lai thanh ghi ieu khien muc IV chng IV);
Chng trnh xuat bat au tai begin.
oc Busy\ cho ti khi ba ng [1]: i kit phat ra Busy=[0] bao hieu a sa n
sang nha n d lieu.
Neu nhan c Busy\=[1] th bc xuat d lieu c thc hien, tc la luc o
may tnh oc 2 ky t au tien cua file .tmp va xuat ra port 378 cua may tnh.
Strobe=[1]: e bao cho kit biet d lieu a c gi ra port e kit biet ma
oc d lieu vao.
ACK=[1] va Error=[0]: khi nha ndl xong kit se ba o ACK=[1], Error=0 e bao
cho may tnh biet Kit se gi d lieu e kiem tra ung hay sai.
AF=[1]: bao cho Kit biet may tnh sa n sa ng nha n d lieu.
May tnh oc bit Error cho ti khi Error = [0] e biet Kit a gi ve d lieu
e kiem tra.
Thu Nible cao: Nhan d lieu e kiem tra.
Cho AF=[0]: a nha n xong d lieu.
oc Error cho ti khi Error=[1] e biet a co d lieu mi.
Thu nible tha p.
Kiem tra d lieu: ma y tnh se phai ghe p noi nible cao vi nible thap lai roi
so sa nh vi d lieu va xuat ra, neu 2 d lieu giong nhau th ket qua xuat
d lieu se la ung. May tnh se xuat ra so FFhex thanh ghi data e bao
ung, va xuat AF=0 & strobe=0 e bao xuat xong 1 byte d lieu. Ngc lai
th xuat 00hex ra thanh ghi data va xuat AF=0, strobe =0 e bao ket qua sai.
Neu ket qua sai th quay lai xuat la byte va roi a xuat.
Quay lai t au chng trnh xuat d lieu cho en khi het d lieu.
IV.4. Chng trnh nhan d lieu Kit:
Giai thch lu o chng trnh nhan d lieu:
+ Chng trnh bat au tai begin.
+ Trc tien phai khi tao 8255 vi cac che o qui nh nh sau:
Port A: nhan d lieu t thanh ghi data theo ket noi pha n cng.
Port B: xuat trang thai Kt tra ve may tnh.
Port C: nha n tn hieu ieu khien t thanh ghi ieu khien cua may tnh.
+ Sau o bao cho may tnh biet trang thai ba n. Muc ch cua co ng viec nay la
e ong bo thi iem bat au chng trnh nha n d lieu vi chng trnh
xuat d lieu t may tnh.
+ Reset bien em a ch au va cuoi, ni at vung d lieu nhan c t may
tnh.
+ Xuat ch Ready bao cho ngi s dung biet trang thai sa n sa ng nha n d
lieu cua kit. Ch ngi s dung go phm Go.
LUAN VAN TOT NGHIEP

45
Hnh 18: Lu o chng trnh nha n d lieu t may tnh gi xuong thiet b
thc tap vi x ly 8085 (trang 1):












































Begin
Khi tao ngoai vi 8255:
+ Port A: nhan d lieu.
+ Port B: Xuat trang thai
+ Port C: nhan tn hieu ieu khien.
Bao thiet b ban
Reset bien em a ch au va
cuoi, ni at vung d lieu nhan
c t ma y tnh gi xuong

READY
Ch go phm
Go
Go phm
Go

SENDING
Busy=0
San sang nhan d lieu.
1
Strobe=1
Busy=1, ACK=0
oc d lieu, ACK=1
AF=1
Xuat Nible cao +Error=0
AF=0
Xuat Nible thap +Error=1
Strobe=0
oc d lieu port A
(A)=FF

X ly d lieu
Busy=0
1





S
S
S
S
S
LUAN VAN TOT NGHIEP

46










































Hnh 18: Lu o chng trnh nha n d lieu t may tnh gi xuong thiet b
thc tap vi x ly 8085 (trang 2).
+ Khi phm Go c go th qua trnh nha n d lieu cu a kit thc s bat au.
+ Kit bao sa n sa ng ch may tnh gi d lieu xuong.
LUAN VAN TOT NGHIEP

47
+ oc strobe cho ti khi ba ng 1, e biet d lieu a c gi ra bus d lieu.
+ Xuat Busy=1, ACK=0.
+ oc d lieu va cho ACK=1. Luc nay kit a nha n c d lieu nhng cha
biet d lieu co chac cha n ung kho ng. Sau o bat au kiem tra.
+ oc AF cho ti khi ba ng 1, biet may tnh san sa ng nha n d lieu kiem tra.
+ Xuat nible cao cua d lieu kiem tra (ba ng 4 bit cao cua port B) va bit
Error=0 (bit PB3).
+ oc AF cho ti khi ba ng 0, e biet may tnh sa n sa ng nha n4 bit tha p cua d
lieu kiem tra.
+ Xuat 4 bit thap va Error bang 1.
+ Luc nay, may tnh ang nhan va so sa nh d lie u a gi i. Va ket qua so
sa nh c bao cho kit thanh ghi d lieu, tc portA cua 8255. Kit oc
strobe cho ti khi strobe ba ng [0] biet ket qua kiem tra a san sang.
+ oc port A lay ket qua kiem tra.
+ Neu ket qua kiem tra la eng th thc hien khau x ly d lieu (lu d lieu
vao ni ca n thiet) va quay lai nha n d lieu ke tiep. Neu ket qua la sai th
bo qua khau x ly d lieu ma quay tr lai nhap lai d lieu cu.
Qua trnh xay ra cho en khi khau x ly d lieu nhan ra a nha p en d lieu
cuoi cung th ket thuc khau x ly se thoat nh lu o sau ay:






















Hnh 19: Lu o chng trnh x ly d lieu (trang1).

Start
(c) = 00h
Lay d lieu va nhan c lam
byte cao cua a ch bat au
vung nh at d lieu.
H (B)
Lay d lieu va nhan c lam
byte tha p cua a ch bat au
vung nh at d lieu.
L (B)
Lay d lieu va nhan c lam
byte cao cua a ch cham dt
vung nh at d lieu.
D (B)
(c) = 01h
(c) = 02h
1
A

S
S
S
LUAN VAN TOT NGHIEP

48


































Hnh 19: Lu o chng trnh x ly d lieu (trang 2).
Y tng: Nha p 2 a ch au va cuoi vao 2 ca p thanh ghi HL va DE. Ca p thanh
ghi HL con c coi la con tro a ch tro en o se cha d lieu. Chng trnh
se so sa nh a ch ma con tro tro en vi a ch ket thuc. Ne cha ba ng th lu
d lieu. neu ba ng th thoat chng trnh.
Giai thch lu o:
+ Chng trnh con bat au start.
+ Bon bc so sanh au tien e nha p a ch au, cuoi vao 2 ca p thanh ghi.
+ Neu noi dung thanh ghi C ln hn 3 th 2 ca p thanh ghi a nha n ay u cac
a ch au cuoi. Nen chng trnh se cat noi dung vua nha n c vao o nh
co a ch ghi trong ca p thanh ghi HL.
+ Quay lai nha n d lieu ke tiep.
Return
Lay d lieu va nhan c lam
byte thap cua a ch bat au
vu ng nh at d lieu.
E (B)
(c) = 03h
A
1

S
Tang bie n em len mot
n v.
Cat byte d lieu va nhan c
vao o nh co a ch nam trong
con tro a ch (HL)
M (B)
Tang gia tr con tro a ch len
mot n v
HL(HL) + 1
a tro e n a
ch cuoi
(HL)=(DE)
Reutrn
End.
S

Busy = 0
End.
LUAN VAN TOT NGHIEP

49
+ Neu con tro a tro en a ch cuoi, th chng trnh a c nhan ay u,
luc nay se xuat ra t End, e bao hoan tat chng trnh.
+ Cham dt chng trnh.
LUAN VAN TOT NGHIEP

50





Chng VII:

CHNG KET LUAN





























LUAN VAN TOT NGHIEP

51
KET LUAN

Qua 7 tuan nga n ngui, ngi thc hien e tai a hoa n tat cong trnh.
Muc ch cua e tai la hoan tha nh mot chng trnh, nh mot cong cu ho c
tap, co kha na ng oc mo t file d lieu a c lu tren may tnh va sau o, loc
nhng noi dung ca n thiet cho bai thc ta p vi x ly, roi truyen tai noi dung o
vao bo nh RAM kit thc tap 8085.
e tai a nham vao nhng noi dung chnh sau:
Th nhat: gii thieu ve kit thc tap s dung. Trong pha n nay, cac linh kie n
quan trong cua kit c e cap en nh CPU 8085, ngoai vi 8255, IC hien th
8279.
Th hai: gii thieu ve ket noi Kit va may tnh: cong ket noi, cac thanh ghi.
Ben ca nh o la nhng yeu cau e van du ng phng pha p truyen d lieu trong
e tai.
Sau cung la noi dung chu yeu cua e tai: nh ng da n luan e xay dng lu
62 chng trnh truyen va nha n d lieu, phng pha p va thc hien viet chng
trnh.
Tom lai, thanh qua cua cong trnh la chng trnh truyen d lieu co nhng
u iem ve mat yeu cau cau hnh may tnh s dung, cach s dung n gia n, va
quan trong nhat la co kha na ng phat trien ve sau. Co the e lam tai lieu tham
khao cho sinh vie n ien t - tin hoc va nh ng ai quan tam en da ng e tai nay.
Tuy nhie n, e tai con co mot so han che: ca n phai co may tnh e co the
s dung chng trnh; phai nha p chng trnh vao may tnh trc tien dang
ngon ng Assembly.
Ve pha ngi thc hien e tai, trong thi gian nga n ngui vi s no lc
cua ba n tha n va vi bao tam huyet a o ra cua ngi giao vien trong s giu p
tan tnh, a hoa n thanh cong trnh nghien cu vi ket qua kha quan. ay
that s la mo t vinh d, mot niem t vui ln cho sinh vien oi vi moi trng s
pham, oi vi thay co va ca oi vi ba n tha n.
















LUAN VAN TOT NGHIEP

52





PHAN PHU NH



























A.Chng trnh nhan d lieu Kit thc tap vi x ly 8085.
LUAN VAN TOT NGHIEP

53
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;Chuon
g 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
JNZ ChkSTB0 ;neu STROBE # 0 thi doi tiep.
IN PortA ;doc du lieu.
CPI 0FFh ;FFh la ma bao du lieu dung.
JZ NoChk
CALL PROCESS
NoChk: MVI A,40h ;bao BUSY\ = 1.
LUAN VAN TOT NGHIEP

54
OUT PortB
JMP ChkSTB1 ;chuan bi nhan byte ke tiep.
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;Chuong trinh con hien thi "READY" tren nam LED 7 doan.
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
READY: 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,31h ;cho hien thi "R".
STA DataI79
MVI A,79h ;cho hien thi "E".
STA DataI79
MVI A,77h ;cho hien thi "A".
STA DataI79
MVI A,5Eh ;cho hien thi "D".
STA DataI79
MVI A,6Eh ;cho hien thi "Y".
STA DataI79
POP PSW
RET
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;Chuon
g trinh con hien thi "SENDING" tren bay LED 7 doan.
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SENDING:POP 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,6Dh ;cho hien thi "S".
STA DataI79
MVI A,79h ;cho hien thi "E".
STA DataI79
MVI A,37h ;cho hien thi "N".
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".
LUAN VAN TOT NGHIEP

55
STA DataI79
POP PSW
RET
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;Chuon
g 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
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;Chuon
g 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
LUAN VAN TOT NGHIEP

56
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
DELAY equ 0310h
KeyGO equ 17h
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ End
LUAN VAN TOT NGHIEP

57
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

LPEVENT lpEvent; //bien chua cac bien co chuot
char szMessage[128];

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();
closegraph();
exit(1);
}
LUAN VAN TOT NGHIEP

58

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);

But[0].OutButton();//xuat nut lenh
But[1].OutButton();//xuat nut lenh
Box[0].OutTextBox();//xuat hop nhap text
Port.OutTextBox();
L.Show();
setcolor(BLACK);
line(50,150,250,150);
line(50,150,50,215);
setcolor(WHITE);
line(50,215,250,215);
line(250,150,250,215);
outtextxy(50,130,"Free memory request");
outtextxy(55,158,"Start ad :");
outtextxy(55,178,"End ad :");
outtextxy(55,198,"Total :");

OutMessage("Click mouse to chose action");
int kkkk;

char RequestFile[15]="";

do//kiem tra nhap chuot chon cong viec
{
ShowMouse();
lpEvent = GetEvent();//lay bien co chuot
if(TestPressedButton(2,lpEvent)==0)//kiem tra xem da click vao nut nao
//0:nhan OK
{
char InName[100],OutName[100];
Box[0].GetS(InName);
if(InName[strlen(InName)-1]=='\\')
InName[strlen(InName)-1]='\0';
_dos_getfileattr(InName,&attrib);
if(attrib==16)
{
OutMessage("");
LUAN VAN TOT NGHIEP

59
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);
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();
LUAN VAN TOT NGHIEP

60
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;
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;

LUAN VAN TOT NGHIEP

61

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
{
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;
LUAN VAN TOT NGHIEP

62
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);
HideMouse();
bar(155,155,245,210);
outtextxy(200,158,buf);
outtextxy(200,178,buf);
outtextxy(200,198,buf);
ShowMouse();
}
fcloseall();
}
}
else
{
OutMessage("");
}
}
}
LUAN VAN TOT NGHIEP

63
}
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;
}
//---------------------------------------------------------
int TestPressTexbox(int x,LPEVENT lpEvent,char layra[],unsigned *attribp)
{
*attribp=0;
if(lpEvent->Msg==1)
{
for(int i=0;i<x;i++)
if(Box[i].Left()<= lpEvent->Posx&&Box[i].Top()<=lpEvent-
>Posy&&Box[i].Right()>=lpEvent->Posx&&Box[i].Bottom()>=lpEvent->Posy)
{
HideMouse();//giau chuot de khong bi vet lem mau o vi tri chuot
char LastName[100];
Box[i].GetS(LastName);
OutMessage("Enter a file name. Press Enter to finish, Esc to ignore.");
Box[i].Path();//lay Path vao bien S cua TEXTBOX
Box[i].OutTextBox();
Box[i].GetS(layra);//lay ra text da nhap vao

//tao chuan cho chuoi Path
LUAN VAN TOT NGHIEP

64
if(layra[strlen(layra)-1]=='>')//gat bo dau \> sau thu muc nhung van giu lai doi voi o dia
if(layra[strlen(layra)-2]=='\\')
if(layra[strlen(layra)-3]==':')//dang a:\>
layra[strlen(layra)-1]='\0';//ra a:\
else //dang a:\fname\>
layra[strlen(layra)-2]='\0';//ra dang a:\fname
else
layra[strlen(layra)-1]='\0';//bo dau >
if(layra[strlen(layra)-1]=='\\')//gat bo dau \ sau thu muc nhung van giu lai doi voi o dia
if(layra[strlen(layra)-2]!=':')//dang a:\fname\
layra[strlen(layra)-1]='\0';
if(layra[strlen(layra)-1]==':')
if(strlen(layra)==2)//dang a:
strcat(layra,"\\");//ra a:\

int NotExist=_dos_getfileattr(layra, attribp);

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(i==0)//chon Open file
{
if(*attribp==16)
{
m=strlen(layra);
while(layra[--m]!='\\')//doi sang chu hoa ten cua thu muc
layra[m]=toupper(layra[m]);

if(layra[1]==':'&&layra[0]!=LastName[0])
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
LUAN VAN TOT NGHIEP

65
}
}
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();
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);
}
//---------------------------------------------------------
LUAN VAN TOT NGHIEP

66
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__

extern char Disk(char *s);
extern int ChosenDisk(char *s,/*TEXTBOX *Box,*/char PreDisk,char CurDisk);
extern LPEVENT CheckChooseDisk(char *DiskName,char *DName,LPEVENT lpEvent,int x,int
y);
extern char *FileType(TEXTBOX *b);

#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;
LUAN VAN TOT NGHIEP

67
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)
{
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().");
LUAN VAN TOT NGHIEP

68
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++)
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;
LUAN VAN TOT NGHIEP

69
}
//---------------------------------------------------------
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();
int Press(char s[],TEXTBOX *Box,unsigned *attrib,char *DiskName,char *DName,char *ftype);
int GetList(char s[],TEXTBOX *Box,unsigned *attrib,char *DiskName,char *DName,TEXTBOX
*Box2,char *ftype);
int Left(){return l;};
int Right(){return r;};
int Top(){return t;};
int Bottom(){return b;};
};
#endif

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()
LUAN VAN TOT NGHIEP

70
{
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);
}
//---------------------------------------------------------
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);

setcolor(WHITE);//vien cho nut bi nhan
line(l,b,r,b);
line(r,t,r,b);
setcolor(BLACK);//vien cho nut bi nhan
line(l,t,r,t);
line(l,t,l,b);

int k=0;
*DName=Disk(DiskName);
do
{
char buffer[MAXPATH];
k=GetList(s,Box,attrib,DiskName,DName,&Box2,ftype);
LUAN VAN TOT NGHIEP

71
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
unsigned int size = imagesize(x11,y11,x12,y12);
if ((buf = farmalloc(size)) == NULL)
{
OutMessage("Error: not enough heap space in save_screen().");
getch();
closegraph();
exit(1);
}
else
{
getimage(x11,y11,x12,y12, buf);
OutMessage("Choose a file name then click OK to accept or click Cancel to ignore");
}

setfillstyle(SOLID_FILL,LIGHTGRAY);//GREEN);
bar(x11,y11,x12,y12);//ve bang ngoai

int x21=x11+5,y21=y11+5,x22=x12-120,y22=y12-77;//75;//toa do bang liet ke
setfillstyle(SOLID_FILL,WHITE);//MAGENTA);
bar(x21,y21,x22,y22);//ve bang liet ke

int x31=x22+30,y31=y21+50,x32=x31+60,y32=y31+20;//toa do nut OK

int x41=x31,y41=y31+100,x42=x32,y42=y32+100;

setcolor(WHITE);

line(x11,y11,x12,y11);
line(x11,y11,x11,y12);

line(x22+2,y21-2,x22+2,y22+2);//vien cho bang liet ke
line(x21-1,y22+2,x22+2,y22+2);//vien cho bang liet ke

line(x31,y31,x32,y31);//vien cho nut OK
line(x31,y31,x31,y32);//vien cho nut OK

line(x41,y41,x42,y41);//vien nut Cancel
LUAN VAN TOT NGHIEP

72
line(x41,y41,x41,y42);//vien nut Cancel

setcolor(BLACK);

line(x12,y11,x12,y12);
line(x11,y12,x12,y12);

line(x21,y21,x22,y21);//vien cho bang liet ke
line(x21,y21,x21,y22);//vien cho bang liet ke

line(x32,y31,x32,y32);//vien cho nut OK
line(x31,y32,x32,y32);//vien cho nut OK

line(x42,y41,x42,y42);//vien nut Cancel
line(x41,y42,x42,y42);//vien nut Cancel

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);

struct ffblk FF;
struct ffblk Lis[200];

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);
LUAN VAN TOT NGHIEP

73
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;
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);

LIST DriList;//nut nhan chon o dia
int x81=x72-19,y81=y71+2,x82=x72-2,y82=y72-2;
DriList.InitList(x81,y81,x82,y82,LIGHTGRAY);
DriList.Show();

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]);

while (!done)//nhap ten file vao mang cau truc FF
{
dem++;
done = findnext(&FF);
for(int j=0;j<strlen(FF.ff_name)+1;j++)
Lis[dem].ff_name[j]=tolower(FF.ff_name[j]);

}
LUAN VAN TOT NGHIEP

74

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,"");

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;
}
LUAN VAN TOT NGHIEP

75
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);
}
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
LUAN VAN TOT NGHIEP

76
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();
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);
LUAN VAN TOT NGHIEP

77
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)
{
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();
}

for(j=0;j<15&&j<dem&&lpEvent->Msg==1;j++)//kiem tra file chon neu co chon
if(tempx1<= lpEvent->Posx&&tempx2>=lpEvent->Posx)
if((tempy1+j*14)<=lpEvent->Posy&&(tempy2+j*14)>=lpEvent->Posy)
{
Arrowkey:
HideMouse();
setfillstyle(SOLID_FILL,WHITE);//MAGENTA);
bar(oldx1,oldy1,oldx2,oldy2);
setcolor(BLACK);//LIGHTGREEN);
outtextxy(x21+8,oldy1+3,Lis[Dem+over].ff_name);
setfillstyle(SOLID_FILL,BLUE);
oldx1=tempx1, oldy1=tempy1+j*14,oldx2=tempx2,oldy2=tempy2+j*14;
bar(oldx1,oldy1,oldx2,oldy2);
setcolor(YELLOW);
outtextxy(x21+8,oldy1+3,Lis[j+over].ff_name);

_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;
LUAN VAN TOT NGHIEP

78
lpEvent->Posy=y11;
delay(50);
goto MouseUp;
}
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);
}
//---------------------------------------------------------

VIII. CLASS MOUSE.H

LUAN VAN TOT NGHIEP

79
#if !defined(__MOUSE_H__)
#define __MOUSE_H__

#include <dos.h>
#include "screen.h"

#define INT_MOUSE 0x33

#define M_LEFT 0x01 /* set if LEFT press */
#define M_RIGHT 0x02 /* set if RIGHT press */
#define M_CENTER 0x04 /* set if CENTER press */
#define M_CHANGE 0x08 /* set if mouse status is changed */

/* -- Keyboard coding bits -- */
#define KEY_NULL 0x0
#define ESC 0x1B
#define ENTER 0x0D
#define TAB '\t'
#define INS 0xD2
#define DEL 0xD3
#define BACKSPACE 0x8
#define HOME 0xC7
#define END 0xCF
#define PAGE_UP 0xC9
#define PAGE_DOWN 0xD1

/* -- 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

#define PLUS 0x2B
#define MINUS 0x2D
#define SPACEBAR 0x20

#define SHIFT_TAB 0x8F

#define CTRL_C 0x3

//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
extern void SetMouseRange(LPRECT);//LPRECT: xem SCREEN.H
LUAN VAN TOT NGHIEP

80
extern int InitMouse(LPRECT);
extern void ShowMouse(void);
extern void HideMouse(void);
extern void MouseRead(LPEVENT);
extern LPEVENT GetEvent(void);
extern void DeviceRelease(int);
//extern void ButtonPressed(int, LPEVENT);
extern void ResetEvent(LPEVENT);
//extern void MoveMouse(int x,int y);//tri
extern void MouseText(int x,int y,int color1, int color2);//,char s[]);
//extern int GetKey(void);
extern int GetMtx();
extern int GetMty();
//extern EVENT OldEvent();
extern int Double(LPEVENT);
#endif
// End of MOUSE.H

IX.MODULE MOUSE.CPP
#include <conio.h>
#include <graphics.h>
//#include <STDLIB.H>
#include <COMPLEX.H>

#include "mouse.h"


void SetMouseRange(LPRECT lpRect)
// Dat vung di chuyen cho chuot
{
_AX = 0x07;//ham 07 cua ngat 33 de dinh gioi han di chuyen ngang
_CX = lpRect->left;
_DX = lpRect->right;
geninterrupt(INT_MOUSE);//INT_MOUSE=0x33:ngat 33
_AX = 0x08;//ham 08 cua ngat 33 dinh gioi han di chuyen doc cho con tro
_CX = lpRect->top;
_DX = lpRect->bottom;
geninterrupt(INT_MOUSE);
}
//---------------------------------------------------------
int InitMouse(LPRECT lpRect)
// Khoi dong chuot
{
int ax;

_AX = 0;
geninterrupt(INT_MOUSE);
ax = _AX;
if (ax == 0)
return FALSE;
SetMouseRange(lpRect);
return TRUE;
}
//---------------------------------------------------------
void ShowMouse(void)
LUAN VAN TOT NGHIEP

81
// 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;
// delay(50);
return (&CurEvent);
}
//---------------------------------------------------------
void DeviceRelease(int Msg)
LUAN VAN TOT NGHIEP

82
{
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);
line(x,y+1,x+w,y+1);
delay(10);
setcolor(color);
}
}while(!kbhit());
}
//---------------------------------------------------------
LUAN VAN TOT NGHIEP

83
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

// Dinh nghia cac kieu du lieu
typedef struct tagRECT{
int left, top, right, bottom ;
}RECT;
typedef RECT far *LPRECT;

typedef struct tagWINDOW {
char sCaption[80]; /*Window's caption*/
RECT rWinRect; /*Rectangle in which window is located*/
RECT rSys; /*System area of window*/
RECT rTitleBar; /*Caption area of window*/
RECT rMenuBar; /*Rectangle in which window's menu is located*/
RECT rMessage; /* Rectangle in which messages is display
}WINDOWS;

// Dinh nghia cac ham va bien dung toan cuc
extern int Xc, Yc; // Goc toa do
extern int LineColor;
extern int VP_WIDTH;
extern int VP_HEIGHT;
extern WINDOWS MainWindow;

extern void InitGraphics(void);
extern void OutMessage(char *Msg);
extern void InitScreen(void);
extern void InitValues(char *lpCaption);
extern int OutError(char *s);
#endif
// End of SCREEN.H

XI.MODULE SCREEN.CPP
#include <conio.h>
#include <stdio.h>
LUAN VAN TOT NGHIEP

84
#include <stdlib.h>
#include <string.h>
#include <graphics.h>

#include "screen.h"
#include "mouse.h"

int T_SIZE, W_SIZE, H_SIZE, W_CHAR, H_CHAR, MSG_SIZE;
int COLOR_WINDOW;
int COLOR_BUTTON;
int COLOR_BORDER;
int COLOR_CAPTION;
int COLOR_TEXT;
int VP_WIDTH;
int VP_HEIGHT;
int Maxx, Maxy; // Maxx - Maxy of screen

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;

initgraph(&grDrv, &grMode, "");
ErrCode = graphresult();
if(ErrCode!= grOk)
{
printf("Graphics error: %s\n", grapherrormsg(ErrCode));
printf("Press any key to halt...");
getch();
exit(1); /* return with error code */
}
Maxx = getmaxx();
Maxy = getmaxy();
}
//---------------------------------------------------------
void InitValues(char *lpCaption)
// Khoi tao cac gia tri cho bien Windows de ve cua so man hinh
{
int WinWidth, WinHeight;

W_CHAR = 8; H_CHAR = 8; // Chieu rong va chieu cao cua mot ki tu
W_SIZE = 8; H_SIZE = 20; T_SIZE = 18; MSG_SIZE = 20;

COLOR_WINDOW = CYAN;
COLOR_BUTTON = LIGHTGRAY;
COLOR_BORDER = LIGHTGRAY;
COLOR_CAPTION = BLUE;
COLOR_TEXT = BLUE;

strcpy(MainWindow.sCaption, lpCaption);
LUAN VAN TOT NGHIEP

85

// Gan gia tri cho WinRect - H.C.nhat chua cua so
MainWindow.rWinRect.left = 0;
MainWindow.rWinRect.top = 0;
MainWindow.rWinRect.right = Maxx;
MainWindow.rWinRect.bottom= Maxy;

WinWidth = MainWindow.rWinRect.right-MainWindow.rWinRect.left+1;
WinHeight= MainWindow.rWinRect.bottom-MainWindow.rWinRect.top+1;

// Gan gia tri cho rSys - H.C.nhat chua SystemMenu
MainWindow.rSys.left = BORDERSIZE;
MainWindow.rSys.top = BORDERSIZE;
MainWindow.rSys.right = MainWindow.rSys.left+T_SIZE;
MainWindow.rSys.bottom= MainWindow.rSys.top+T_SIZE;

// 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)
// Ghi thong bao Msg ra cua so rMessage
{
struct fillsettingstype FillInfo;
int OldColor;
struct viewporttype vp;

// luu thong tin cu
getfillsettings(&FillInfo);
OldColor = getcolor();
getviewsettings(&vp);
// xoa thong bao cu
setviewport(MainWindow.rWinRect.left, MainWindow.rWinRect.top,
MainWindow.rWinRect.right, MainWindow.rWinRect.bottom, 1);
LUAN VAN TOT NGHIEP

86
setfillstyle(SOLID_FILL, COLOR_BUTTON);
setcolor(COLOR_TEXT);
bar(MainWindow.rMessage.left, MainWindow.rMessage.top,
MainWindow.rMessage.right, MainWindow.rMessage.bottom);
// in thong bao moi ra
outtextxy(MainWindow.rMessage.left+W_CHAR,
MainWindow.rMessage.bottom-H_CHAR-5, Msg);
// tra ve trang thai cu
setfillstyle(FillInfo.pattern, FillInfo.color);
setcolor(OldColor);
setviewport(vp.left,vp.top, vp.right, vp.bottom, 1);
}
//---------------------------------------------------------
void DrawScreenBorder(int left, int top, int right, int bottom)
// Ve duong vien cho mot hinh chu nhat co toa do (left, top), (right, bottom)
{
setfillstyle(SOLID_FILL, COLOR_BORDER);
bar(left, top, right, top+BORDERSIZE);
bar(left, bottom, right, bottom-BORDERSIZE);
bar(left, top, left+BORDERSIZE, bottom);
bar(right-BORDERSIZE, top, right, bottom);
setcolor(BLACK);
rectangle(left, top, right, bottom);
rectangle(left+BORDERSIZE, top+BORDERSIZE,
right-BORDERSIZE, bottom-BORDERSIZE);
}
//---------------------------------------------------------
#include <dos.h>
void InitScreen(void)
// Ve cac thanh phan cua cua so
{
int x, y;
int WinWidth, WinHeight;
struct viewporttype vp;

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;

x = (WinWidth-W_CHAR*strlen(MainWindow.sCaption))/2+1;
y = BORDERSIZE+(T_SIZE-H_CHAR)/2+1;

// Ve duong vien cua hinh chu nhat
DrawScreenBorder(0, 0, WinWidth-1, WinHeight-1);
delay(DEMODELAY);
// Ve thanh tieu de
setfillstyle(SOLID_FILL, COLOR_CAPTION);
bar(MainWindow.rTitleBar.left, MainWindow.rTitleBar.top,
MainWindow.rTitleBar.right, MainWindow.rTitleBar.bottom);
setcolor(WHITE);
outtextxy(x, y, MainWindow.sCaption);
delay(DEMODELAY);
// Ve SystemMenu
LUAN VAN TOT NGHIEP

87
setfillstyle(SOLID_FILL, COLOR_BUTTON);
/* bar(MainWindow.rSys.left+1, MainWindow.rSys.top+1,
MainWindow.rSys.right-1, MainWindow.rSys.bottom-1);
setcolor(BLACK);
rectangle((MainWindow.rSys.left+MainWindow.rSys.right)/2-5,
(MainWindow.rSys.top+MainWindow.rSys.bottom)/2-1,
(MainWindow.rSys.left+MainWindow.rSys.right)/2+5,
(MainWindow.rSys.top+MainWindow.rSys.bottom)/2+1);
delay(DEMODELAY);
*/ // Ve Menu
// bar(MainWindow.rMenuBar.left, MainWindow.rMenuBar.top,
// MainWindow.rMenuBar.right, MainWindow.rMenuBar.bottom);
// outtextxy(MainWindow.rMenuBar.left+8, MainWindow.rMenuBar.bottom-13,
// "Menu of Program is here");
// delay(DEMODELAY);
// Ve thanh chua thong bao
bar(MainWindow.rMessage.left, MainWindow.rMessage.top,
MainWindow.rMessage.right, MainWindow.rMessage.bottom);
OutMessage("Welcome to Demo Window Program");
delay(DEMODELAY);
// Ve vung lam viec
setfillstyle(SOLID_FILL, COLOR_WINDOW);
bar(MainWindow.rViewPort.left, MainWindow.rViewPort.top,
MainWindow.rViewPort.right, MainWindow.rViewPort.bottom);
setcolor(BLACK);
rectangle(MainWindow.rViewPort.left-1, MainWindow.rViewPort.top,
MainWindow.rViewPort.right+1, MainWindow.rViewPort.bottom);
delay(DEMODELAY);
// Dat lai viewport la rViewPort
setviewport(MainWindow.rViewPort.left, MainWindow.rViewPort.top,
MainWindow.rViewPort.right, MainWindow.rViewPort.bottom, 1);
}
//---------------------------------------------------------
/*void DrawSysCoordinates(void)
// Ve he truc toa do
{
Xc = VP_WIDTH/2;
Yc = VP_HEIGHT/2;
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;
}
LUAN VAN TOT NGHIEP

88
//---------------------------------------------------------
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;

// luu thong tin cu
getfillsettings(&FillInfo);
setfillstyle(SOLID_FILL, COLOR_WINDOW);
bar(0, 0, VP_WIDTH, VP_HEIGHT);
setfillstyle(FillInfo.pattern, FillInfo.color);
DrawSysCoordinates();
} */
// End of SCREEN.C
//---------------------------------------------------------
#include <alloc.h>
int OutError(char *s)
{
void far *buf;//con tro chi vung luu tru man hinh
unsigned int size = imagesize(200,150,470,240);
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);
LUAN VAN TOT NGHIEP

89
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();
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();
}
}
LUAN VAN TOT NGHIEP

90
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;
}
}
ShowMouse();
}while(1);
}

XII. CLASS SEND.HPP
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <MATH.H>
#include <COMPLEX.H>
#include <PROCESS.H>
#include <string.h>

#if !defined __SEND__
#define __SEND__
class SEND
{
private:
char OutFile[100];
public:
char *CatFile(char St_add[],char End_add[],char InFile[]);
int Out();
int DeleteFile();//se del OutFile
LUAN VAN TOT NGHIEP

91
};
#endif
extern int Esc();

XIII. MODULE SEND.CPP
#include "screen.h"
#include "send.hpp"

#define data 0x378
#define sta 0x379
#define ctr 0x37a

char *SEND::CatFile(char St_add[],char End_add[],char InFile[])
{
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};

unsigned int i,DemSpace;
unsigned int Value1=0,Value2=0;

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);
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
{
LUAN VAN TOT NGHIEP

92
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


if(DemSpace>=2)//la ma lenh hoac da ket thuc mot dong lenh
{
fwrite(&t1,1,1,f1);
fwrite(&t2,1,1,f1);
t1=t;
}
if(DemSpace==1)
{
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;
}
LUAN VAN TOT NGHIEP

93
//---------------------------------------------------------
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();
}while(result !=0x80&&Stop!=1);//doc busy cho toi khi !busy = 1
if(Stop==1)
return -1;
n=fread(&value,1,1,f);
if(n==0)
return dem;
for(int z=0;z<22;z++)//doi ky tu ra gia tri Dec de goi di
if(value==KyTu_Hex[z])//nible cao
{
Temp=Gtri_Dec[z]*16;
z=22;
}
fread(&value,1,1,f);
for(z=0;z<22;z++)//nible thap
if(value==KyTu_Hex[z])
{
Temp=Gtri_Dec[z]+Temp;
z=22;
}
outportb(data,Temp);//pow(2,i));//xuat du lieu ra thanh ghi du lieu
outportb(ctr,0x00);// cho strobe = 1 de bao cho phan thu biet da goi du lieu ra thanh ghi du lieu
dem++;

do
{
result=inportb(sta);
result=result & 0xC0;
Stop=Esc();
}while(result!=0x40&&Stop!=1);//doc ack cho den khi ack = 1
if(Stop==1)
LUAN VAN TOT NGHIEP

94
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();
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);};
LUAN VAN TOT NGHIEP

95
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;
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);
LUAN VAN TOT NGHIEP

96
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
{
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);
LUAN VAN TOT NGHIEP

97
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:
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;
}
LUAN VAN TOT NGHIEP

98
//---------------------------------------------------------
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;
}
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';
LUAN VAN TOT NGHIEP

99
strcat(S,Path_var);
strcat(S,"\\");
strcat(S,Name);
}
C. S DUNG CHNG TRNH DOWNLOAD.
e s dung chng trnh DowLoad, trc tien phai ve man hnh Dos (v chng
trnh c viet trong moi trng Dos, kho ng qua n ly c cac chng trnh ieu khien
thiet b san co trong may, thoat ve Dos e tranh nhng xung ot chng trnh).
Goi ten Demo.exe, luc o man hnh se hien len nh sau:

e chon file bang ca ch go phm, click chuot vao o Open File.




Neu nha p nut pulldown th se chon file theo kieu click chuot. (hnh sau). Chon o a,
cho n loai file, chon ten file va click OK e chon file.
Nut pulldown
O nha p text
LUAN VAN TOT NGHIEP

100


Sau khi chon xong file th trong ba ng Free memory request xuat hien cac a ch
au cuoi, va dung lng bo nh se s dung.
Sau o click Send e gi d lieu i.
Khi qua trnh truyen file ket thuc th xuat hien thong bao Task is complete.

You might also like