Professional Documents
Culture Documents
Trang 1
u t cho Gio dc chnh l u t ln nht, vng chc nht cho tin pht
trin Kinh t_X hi trong tng lai gn ca mt quc gia vi vn u t thp nht.
Thc t nhiu nc trn th gii nh: Trung Quc, Nht Bn, chng minh
c iu y.
nc ta, tnh An Giang vi s u t cho Gio dc trong khong 10 nm tr
li y, ngn sch u t cho Gio dc chim t 20 n 30% tng thu nhp hng
nm. An Giang v ang c mt mt ngun nhn lc di do, vi tm kin thc
kh rng v gn nh bao gm tt c mi lnh vc khoa hc, to nn mng c bn
cho vic xy dng c s h tng kinh t x hi, v t pht trin hn na ngun
nhn lc tr thc ny tin hnh xy dng tng bc c s cao tng v sau (S
liu ly t ngun S Gio Dc Tnh An Giang nm 1998). Qua 10 nm u t cho
Gio dc, trc ht, An Giang c mt thnh ph, thnh ph Long Xuyn, thnh
lp vo thng t nm 1999. Tip theo l s pht trin t ca th x Chu c cng
vi hng lot cc trng lp, cc trng i Hc dn ra i. c bit, u nm
2000, An Giang s khnh thnh trng i hc Tnh An Giang (cui thng 12 nm
1999, trng i vo hot ng chnh thc), vi quy m khng thua trng i
hc Tnh Cn Th. Vic xy dng Trng i hc ny nhm xy dng ngun nhn
lc ti ch cho Tnh An Giang, l chin lc Gio dc v cng l chin lc kinh t
ca Tnh.
Cc cuc khng hong kinh t khu vc thng bt ngun t mt nc no ,
nh cuc khng hong kinh t khu vc ng Nam vo thng 07 nm 1997 bt
ngun t s mt cn bng nghim trng cn cn xut nhp khu Thi Lan, sau
nh hng nhanh sang cc nc trong khu vc nh Malaysia, Indonesia, Philipin,
; Nn khoa hc_k thut_cng ngh, vi s pht trin vt bc ca mnh, cc
nc M, Nht dn n mt Hng Kng vi mong mun xy dng mt cng
Silicon ging thung lng Silicon cng ngh cao ca M, v iu ny ang c
thc hin (Thng tin Thi s, mc Khoa hc K thut i truyn hnh Thnh Ph
H Ch Minh, knh HTV7, pht lc 19 gi ngy 06 thng 07 nm 1999).
Trong cng mt x hi th s bin i, pht trin ca mt nc s lm cho cc
nc cnh bn run mnh chuyn ng theo.
Cng nm trong chu trnh y, Vit Nam trc thm th k XXI, trong cng
cuc cng nghip ha hin i ha t nc, mun chuyn mnh tr thnh con
Rng Chu , cn phi c mt s u t ng n hn, nhm vo mc tiu lu di
ca t nc. p ng nhu cu X hi, ngnh Gio dc c nhim v o to ra
mt th h cng dn mi, ng thi bi dng cho th h cng dn ang tham gia
sn xut mt kin thc su, rng.
Hin nay, ngnh Gio dc v o to c nhng tin b khng ngng trong
cng tc v nhim v ca ngnh, nhng qu trnh o to no cng vy, nu khng
c s kim tra u ra th ton b qu trnh o to y xem nh khng hon thin.
Ngun kin thc su rng a n u t cho th h tr, nhng cng dn mi,
kh nhng vn kim tra u ra li cng kh hn. Nhiu hnh thc kim tra u
ra c p dng, t kim tra ming, kim tra vn p, kim tra vit, bi tp ln, lm
tiu lun, lm lun vn, Trong nhng hnh thc kim tra ni trn, kim tra trc
nghim, tuy ch mi xut hin, cn mi nc ta v ang cn trong giai on
nghin cu nhng v ang c ch n.
Trang 2
Do tnh cht phc tp ca vic vn dng mt h thng kim tra trc nghim
cng nh y l mt h thng cn qu mi Vit Nam, cc cng c thc thi cha
c nn ngi nghin cu tin hnh tm hiu v thit k mt cng c kim tra trc
nghim. y l mt cng c lao ng, vn c t ra l cng c ny phi c
tnh kh thi, d s dng, c tnh c ng, c tnh kt hp, c tnh t ng v c tnh
thch nghi (kh nng sa i, nng cp).
Sau mt thi gian tm hiu, ngi nghin cu tin hnh thc hin ti
THIT K V THI CNG MY CHM IM TRC NGHIM GIAO
TIP MY VI TNH.
I.
T VN :
X hi cn mt ngun nhn lc mi vi s b sung y cc kin thc khoa
hc k thut to tin cho ngnh Gio dc v o to xy dng h thng gio
dc tin tin, o to ra th h tr vi tm kin thc su rng. Chnh s kim tra u
ra ca qu trnh o to ny khin cho hnh thc kim tra trc nghim ngy cng
ph bin rng ri v hin nay c p dng cho hu ht cc mn hc. Qua hnh thc
kim tra trc nghim lng kin thc kim tra c tri rng, khng co cm, khng
trng tm. Ngi lm bi phi m bo c tnh chnh xc, khng lm ln; tnh
cht mi nh ca mi la chn ca cu trc nghim chnh l th thch cho ngi
lm bi. Trc nghim l hnh thc c s dng rng ri trong cc k thi, c bit l
mn Ngoi vn.
Vi s lng bi thi ln, dng c th s (giy c l hoc phi quan st) ngi
chm khng trnh khi nhng nhm ln xy ra. Thi gian chm bi cng l mt vn
i vi ngi chm v l yu t khch quan nh hng n kt qu bi thi.
Vn dng nhng kin thc hc vo thc tin, to mt cng c gip gii
phng sc lao ng cho ngi chm, nhng ngi vt v trong lnh vc lao ng
tr c, chnh l mong mun v l nhn t gip ngi nghin cu mnh dn tin hnh
tm hiu v thc hin ti.
II. TM QUAN TRNG CA VN :
Trc nghim xut hin t rt lu trn th gii, n gia th k XIX trc
nghim c s dng rng ri trong lnh vc tm l hc ch mt bng chng,
mt chng tch. u thp nin 80 ca th k XX, trc nghim c nhiu nc trn
th gii chnh thc t nn mng nghin cu. Cho ti nay, c nhiu thnh tu
trong vic nghin cu cc hnh thc trc nghim, nh ti M, Nht, Anh c cc
b trc nghim hon chnh, c tnh khoa hc cao.
Tuy xut hin t rt lu nhng ti Vit Nam, kim tra trc nghim, ch mi
c nh hnh. Do cn qu mi nn cng c phc v cn nhiu thiu thn.
Mt cng c p ng cho nhu cu hin ti ca ngnh, phc v cho cng tc
chm bi chnh l tnh cp thit ca vn . My c tin cy cao, c th p dng
vo cc k thi quan trng.
III. YU CU CA TI:
Chm im bng cng c my mc, thit b t ng nn vn v tnh s
dng c t ra l: vi tnh t ng cao, m bo chnh xc, khng c yu t ch
quan tc ng lc chm, chm bi vi s lng ln, thi gian chm bi ngn. Ngnh
Trang 3
Trang 4
VII.
Trang 5
XC NH THUT NG:
CPU
: Central Processing Unit, n v x l trung tm. Mch lu gi, x
l v iu khin bn trong my tnh, bao gm n v s hclogic
(ALU), n v iu khin v b nh s cp trong dng ROM hoc
RAM. Ch c n v ALU v n v iu khin c cha trn vn
trong chp gi l chp x l.
ROM : Read Only Memory, b nh ch c. Mt phn ca b nh s cp
ca my tnh, thng c dng lu tr cc a ch lnh h thng.
Khng b mt ni dung khi b mt in.
RAM : Random Access Memory, b nh truy cp ngu nhin. B nh s
cp ca my tnh. Trong , byte lnh v byte d liu c lu tr
sau cho n v x l trung tm c th truy cp trc tip vo chng
thng qua bus cao tc. Thng tin trong RAM b mt i khi b mt
in.
BOARD : Circuit board, bng mch. Tm Plastic phng, trn c gn sn
linh kin in t.
CARD : Card, ba, bng. Mt board mch in t c thit k nhm thc
hin mt chc nng no v c th cm vo mt khe slot ca bus
m rng trong my vi tnh.
BUS
: Bus, ng truyn. L tp hp cc ng dn c cng chc nng v
nhim v.
SLOT : Expansion Slot, khe cm m rng. L ng d liu m rng ca
my tnh, c thit k cm va cc card giao tip.
PORT : Port, cng, cng. L cng giao tip, l mi ni gia cc ng
truyn vi nhau.
Trang 6
m bo tnh khoa hc, tnh h thng, tnh tng minh v tnh hiu qu
ti c thc hin qua cc giai on sau:
Tm hiu ti.
Son cng.
Thu thp d liu.
X l d kin.
Thit k mch.
Thi cng.
Cn chnh.
Thu hoch.
Vit ti.
I. TM HIU TI:
ti c gio vin hng dn gi , ngi thc hin tin hnh tm hiu.
Nhn thy tnh khoa hc, tnh cp thit, tnh gi tr cng vi s say m v pht sinh
tng, ti c chn vi ni dung: thit k v thi cng my chm im trc
nghim giao tip my vi tnh c nhn (Personal Computer, vit tt l PC). Ngi
thc hin ng k ti vi khoa in in t vi s ng ca gio vin hng
dn.
II. SON CNG:
Giai on son cng nhm t c cc mc ch: xc nh nhim v,
phn tch cng trnh lin h, phn tch ti liu lin h, lp k hoch nghin cu.
1. Xc nh nhim v nghin cu:
Trn c s tm hiu s b ti, nhim v c t ra nh sau:
Tm hiu s b v giao tip ngoi vi v cng giao tip.
Tm hiu b cm bin quang.
Thit k h thng qut nh.
Thit k phn cng v phn c kh.
Xy dng phn mm iu khin v x l thng tin.
2. Phn tch cng trnh lin h:
n tt nghip ca anh Trn Ngc Vn v anh L Nguyn Duy c, sinh
vin kha 92, nin kha 1992-1997, khoa in, b mn in Kh Ha v Cung Cp
in vi tn: THIT K MY CHM IM TRC NGHIM gip cho ngi
nghin cu rt nhiu kinh nghim v c th ly lm ti nguyn nghin cu nh
h thng cm quang, thit b giao tip ngoi vi PPI 8255A, nhng nhn chung, ti
cn nhiu thiu st v hn ch nh: khng c tnh t ng cao, chm mi ln ch
mt bi, tnh n nh cha cao, tc chm, khng tng minh trong thit k,
my l mt h c lp, khng tnh c ng, kh lin kt, khng giao tip, kh ci
tin.
Mc d nghin cu thit k mt h thng trn nguyn l vn hnh hon ton
khc cng trnh nghin cu trc nhng nhng yu t thu c trong cc cng trnh
ny l ngun ti nguyn gip cho ngi nghin cu ci tin v khc phc nhng
iu cha hon chnh trn chnh cng trnh ca mnh.
Trang 7
CNG NGHIN CU
PHN A: GII THIU
LI NI U
MC LC
PHN B: NI DUNG
CHNG DN NHP
CHNG C S L LUN
CHNG I
: KHO ST CNG GIAO TIP
CHNG II : GII THIU CC B PHN CM BIN
CHNG III
: CC MCH H TR
CHNG IV
: THIT K V THI CNG PHN CNG
CHNG V
: XY DNG PHN MM
CHNG KT LUN
PHN C: PH LC V PH NH
Vic thit k li c thc hin da trn cu hnh ca cng chi tit:
Trang 8
PHN B: NI DUNG
CHNG DN NHP
Gii thiu s lc hon cnh lch s v hon cnh ra i ca
tng thit k.
CHNG C S L LUN
Nhng c s lm nn tng cho cng vic nghin cu v thit
k.
CHNG I
: KHO ST CNG GIAO TIP
Gii thiu chung v cng giao tip, giao tip ngoi vi ca my
vi tnh, cng my in. Kho st vi mch PPI 8255A.
CHNG II
: GII THIU CC B PHN CM BIN
Gii thiu chung Cm bin quang: Khi nim, linh kin quang
in t, linh kin cm bin quang in, linh kin cm bin quang
cng nghip.
CHNG III
: CC MCH H TR
Cc mch bo v, mch khuch i s dng trong ti.
CHNG IV
: THIT K V THI CNG PHN CNG
Thit k v thi cng: mch giao tip a nng, mch qut v
mch m, mch cng sut phn c, mch trung tm.
CHNG V
: XY DNG PHN MM
Gii thiu tng qut v lp trnh, phn mm lp trnh
PASCAL. Xy dng s khi ca cc th tc chnh, vit hon
chnh th tc c v vit (nhn v truyn d liu). Gii thiu cch
s mm iu khin.
CHNG KT LUN
Tng kt li vn v hng pht trin trong tng lai.
PHN C: PH LC V PH NH
Ti liu lin h, cc bng-biu thu hoch trong qu trnh nghin
cu.
III. THU THP D KIN:
Tham kho ti liu, kho st cc mch thc t, kt hp gia l thuyt vi mch
to ra mch thch hp cho ni dung nghin cu. Ch trng tm nghin cu.
Ghi chp li thng tin quan trng, s mch, s nguyn l.
Trong qu trnh thu thp d kin, nu c gp vn kh hiu, tin hnh tham
kho kin ca gio vin hng dn.
IV. X L D KIN:
H thng li thng tin cp nhp c, phn loi theo tm quan trng ca thng
tin cng nh mi lin h gia cc thng tin, cht lc thng tin.
V. THIT K-THI CNG-CN CHNH-THU HOCH:
Sau khi c s l lun ta tin hnh thit k cc mch da trn cc thng tin
v kin thc c c, chy h thng bng s nguyn l, test trn board, nh s
kim tra ca gio vin hng dn trc khi v mch in. Sa cha nu c. Thi cng
Trang 9
Trang 10
Trang 11
slot AT v cc card mn hnh, card I/O, card IDE cm trn cc slot ny to cho n
c thm nhiu kh nng v lu tr, hin th, iu khin.
My XT, 286, 386 ra i cng da trn nhng tnh nng y nhng c nng
ln mt bc cao hn v kh nng x l, chc nng s dng, tc thc hin.
Mt h thng c lp khng cn chim v tr hng u.
S ra i ca slot PCI l s hon chnh li ca slot ISA v tc thc hin, l
s k tha c nng cao kh nng ng dng ca cc slot tin nhim nh AT, XT v
l tin cho cc cng giao tip cao tc v sau. Vi cc my i sau, t my 486
DX2, cc card I/O, card IDE c b sung vo mch ch (mainboard) ri dn dn
n cc i my 586 mch m thanh (sound card) v mch mn hnh (VGA card)
cng c thit k ngay trn mch ch (on board) di dng tch hp trong nhng
IC vi x l.
CPU
Slot
ISA/PCI
Card
Sound
Jack
Phone
Speaker
Tn hiu
tng minh
Tn hiu
nh phn
Tn hiu
s
Tn hiu
m tn
Trang 12
CPU
Slot
ISA/PCI
Card
VGA
Jack
VGA
Monitor
Tn hiu
tng minh
Tn hiu
nh phn
Tn hiu
s
Tn hiu
hnh
Trang 13
DATA BUS
COMPUTER
PRINTER
Trang 14
K hiu
Vo/ra
STROBE
D0
D1
D2
D3
D4
D5
D6
D7
ACK
BUSY
PE
SLCT
AF
ERROR
INIT
SLCTIN
GND
GND
GND
GND
GND
GND
GND
GND
Li ra
Li ra
Li ra
Li ra
Li ra
Li ra
Li ra
Li ra
Li ra
Li vo
Li vo
Li vo
Li vo
Li ra
Li vo
Li ra
Li ra
ngha
D liu c gi ra
ng d liu, bit th 01
ng d liu, bit th 02
ng d liu, bit th 03
ng d liu, bit th 04
ng d liu, bit th 05
ng d liu, bit th 06
ng d liu, bit th 07
ng d liu, bit th 08
Xc nhn
My in bn
Ht giy
La chn
T np
Li
t li my in
Chn kiu in
Ni t
Ni t
Ni t
Ni t
Ni t
Ni t
Ni t
Ni t
Mc tc ng
Thp
Ba trng thi
Ba trng thi
Ba trng thi
Ba trng thi
Ba trng thi
Ba trng thi
Ba trng thi
Ba trng thi
Thp
Cao
Cao
Cao
Cao
Cao
Thp
Cao
Trang 15
Trang 16
Trang 17
D6
D5
D4
D3
D2
D1
D0
GROUP B
PORT C (LOWER)
1 = INPUT
0 = OUTPUT
PORT B
Gio vin hng dn: Thy 1QUCH
= INPUTTHANH HI
0 = OUTPUT
MODE SELECTION
Trang 18
thun tin cho vic qun l vic xut nhp v cng l tng thm
tnh linh hot cng vic giao tip, vi mch PPI 82C55A phn chia ra hai cu
hnh lm vic khc nhau l lm vic theo nhm A v nhm B. Tuy nhin,
cng c th khng ch n vic phn chia ny trong giao tip trao i thng
thng, khng cn nhiu tn hiu giao tip.
2. Cu trc thanh ghi iu khin phn mm ca PPI 82C55A:
Do cc Port ra ca PPI 82C55A c chia ra lm 2 nhm A v nhm B
tch ri nn t iu khin ca PPI 82C55A cng c chia lm 2 nhm.
a. Cc bit D2D1D0 dng cu hnh cho nhm B
Bit D0 dng thit lp 4 bit thp ca Port C, D0 = 0 Port C thp
l Port xut d liu (Output), D0 = 1 Port C thp l Port nhp d liu
(Input).
Bit D1 dng thit lp Port B, D1 = 0 Port B l Port xut d liu
(Output), D1 = 1 Port B l Port nhp d liu (Input).
Bit D2 dng thit lp Mode iu khin ca nhm B:
+ D2 = 0: Nhm B hot ng Mode 0.
+ D2 = 1: Nhm B hot ng Mode 1
b. Cc bit D6D5D4D3 dng cu hnh cho nhm A
Bit D3 dng thit lp 4 bit cao ca Port C, D3 = 0 Port C l
Port xut d liu (Output), D3 = 1 Port C l Port nhp d liu (Input).
Sinh vin: Nguyn Phc Hu
Trang 19
S LM VIC CA NHM A
CHC NNG NHP D LIU
Trang 20
S LM VIC CA NHM A
CHC NNG XUT D LIU
Trang 21
D7
D6
D5
D4
D3
D2
D1
D0
BIT SET/RESET
1 = SET
0 = RESET
Khng quan tm
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
0
1
2
3
4
5
6
7
Trang 22
S LM VIC CA NHM B
CHC NNG NHP D LIU
Bit PC2 bin thnh tn hiu STBB (tc dng mc thp), bit PC1
thnh bit IBFB (tc dng mc cao) v bit PC0 tr thnh tn hiu INTRB
(tc dng mc cao). Chc nng ca cc bit iu khin ging nh nhm A
hot ng Mode 1.
S LM VIC CA NHM A
CHC NNG XUT D LIU
Trang 23
Trang 24
Trang 25
Trang 26
Hnh 03: S cu to
BJT quang
Trang 27
a. Cu to:
Hnh 04: S cu to b
ghp quang Opto-coupler
Phn t pht quang l Diod pht quang (LED, Light Emitter Diod) cn
phn t cm bin quang l linh kin cm bin quang, thng s dng nht l
BJT quang.
b. Nguyn l hot ng:
Khi c tn hiu phn cc thun cho Led, diod pht quang ny s pht
sng v kch thch vo mi ni BC ca BJT quang (phn t cm bin quang)
lm cho BTJ lm vic trng thi dn (thng l dn bo ha).
c. ng dng:
Vi u im l tn s p ng nhanh, tn hao t ngi ta thng s dng
b ghp quang Opto-coupler vo cc phm vi ng ngt mch iu khin.
II. CC LOI CM BIN QUANG TRONG CNG NGHIP:
Vi mi trng lm vic trong ha cht, nhit cao, cc linh kin cm bin
quang phi m bo t cc yu cu sau:
C bn c kh cao, gim c chn ng, vn tc qut cao, chng
run c hc,
C nhy cm cao, gim ti thiu c nh hng ca mi trng
lm vic,
Thch hp vi nhu cu v p ng c nhu cu s dng.
Cc hng sn xut thit b t ng a ra th trng cc loi cm bin t
c cc yu cu ni trn. ti ng dng cm bin quang (Photo Electric Sensors)
nn ch tp trung tm hiu v loi cm bin ny.
V ng dng ngi ta c th chia cm bin quang ra lm hai loi:
Loi chm tia xuyn.
Loi tn x.
Tin hnh phn tch hai th loi trn tm ra gii php cho ti.
1. Loi chm tia xuyn:
a. Nguyn tc hot ng:
B thu v b pht cng nm trn cng mt ng thng. Dng k
thut pht hin do che khut hay vt th lm cho nh sng c bc sng
chn khng th xuyn thu.
K thut ny thng c s dng trong cc b phn m v kim tra sn
phm.
Hnh 05: S nguyn l
hot ng ca b thu pht
loi chm tia xuyn
Trang 28
b. Cc thng s ng ch :
Hnh dng
: hnh tr hay khi ch nht.
Tm cm nhn : ti a khong 20 mt.
u vo
: 24 u dy.
u ra
: R le (Relay).
Tn s chuyn : 1,5200Hz.
c. Nhn xt:
Vi nguyn l hot ng nh trn, c th ng dng thit k u c
cho ti. Nhn chung, d l kh thi nhng mch rt kh thc hin, v l do:
Linh kin rt t.
Thc hin xuyn qua mt lp giy, nu nh c l th khng
kh thi cn nh t xuyn vt cht (giy) th ng n dy
mng v trng en ca giy (phm cht giy).
Rt kh ci tin u c v u d cm bin quang trong
trng hp ny ch thch ng vi s chuyn ng tnh tin
(trong kh nng l mt sinh vin, kinh ph thc hin khng cao,
khng th thc hin) hoc c nh.
tinh tia qut, theo kh nng cho php thc hin, khng cao.
Kt lun sau cng l: phng php ny khng phi l ti u hon ton
i vi ngi nghin cu.
Trang 29
Trang 30
Linh kin rt t.
Thc hin phn hi trn mt lp giy c rt nhiu tia tn x gy
nh hng n vng ln cn nu nh s dng nhiu u qut st
lin nhau.
tinh tia qut, theo kh nng cho php thc hin, khng cao.
Kt lun sau cng l: phng php ny khng phi l ti u hon ton
i vi ngi nghin cu nhng mang tnh kh thi hn nu thc hin cng
vic ci tin cng nh tm vt tng ng thay th.
d. Gii php:
* Mch pht hng ngoi:
Diod pht hng ngoi c bc sng = 950nm (dy pht =
900 1020 nm), thi gian tr l 0,5s, dng tiu th 20 30mA.
Khi s dng dng thm mt in tr hn dng t 180 330.
* Mch thu hng ngoi:
Mch thu hng ngoi c mt Diod thu loi Silic, DIN (Diod
Infraronge), nhy = 900 950 nm thch hp vi mch pht
hng ngoi. S dng trc tip b thu hng ngoi nhn tn hiu ca
b iu khin xa ca Television SONY, gi th trng khong
10.000 VN. B thu hng ngoi ny hot ng n nh mc p
+5VDC, c ba chn (mt chn VCC, mt chn Mass v mt chn tn
hiu).
* Nguyn l hot ng:
Khi h thng lm vic, u c lun trng thi c. u
qut nhn tn hiu c t mch trung tm (ni Mass), n hng
ngoi chiu sng, pht ra tn hiu hng ngoi. Ty theo b mt ca
t giy l sng hay ti m phn x tia hng ngoi mch hay yu.
in p ng tn hiu ca u c ty thuc vo cng chiu
ca tia hng ngoi, in p ny s qua b khuch i thut ton
(Opamp) chuyn i mc tn hiu 0 hay 1. Tn hiu ny s c
truyn v slot giao tip ch CPU c vo.
* Bc ci tin so vi ti trc:
u qut c khng ch qua mt l cc nh lm tng
tinh cho tia qut.
u qut v u c c thit k c th chuyn ng tnh
tin trn cng mt cn qut do mt ng c bc loi nh
iu khin, ly trong a mm1,2 MB.
Cn qut, mang u c v u qut c th trt tnh tin
trn thanh trt dc theo chiu ngang ca giy qut. Cn
qut do mt ng c bc loi ln iu khin, ly trong
my in kim-ng c ko u kim.
Li im ca nhng ci tin ny l:
tinh tia qut cao hn v u c_qut c th chuyn
ng tnh tin: thch hp cho x l nh mc sc nt hn,
rng hn theo ng yu cu.
Cn qut di ng c: c th c c mi phng thc
b tr v tr nh du trc nghim.
Trang 31
Trang 32
Trang 33
Trang 34
I CQ 2
h fe 2
0,5 A
= 0,003687 3,7mA
120
5V 2 * 0,7 0,2
= 976,32
I B2
Chn RB2 = 1K
Vy
IB2 =
5V 2 * 0,7 0,2
= 0,0036A = 3,6mA
RB 2
Trang 35
IB1 =
I CQ1
h fe1
3,7 mA
= 0,0148mA (Tha cho cng ra ca CMOS)
250
Chn RB = 10 K; 0,125W.
IV. MCH XC LP MC TN HIU QUT:
Tn hiu nhn c t u c gi vo c bin kh nh nn kh c th phn
bit gia hai mc Logic 0 v 1. Yu cu t ra l ch cn khuch i p, mc
khuch i t 35 ln. p ng ra l p DC nn dng p ny iu khin trc tip
trng thi ngt dn ca BJT to tn hiu xc lp mc [0] hay [1]. Do , trong mch
tn hiu c thit k thm hai mch khuch i tn hiu ng ra trc khi gi tn hiu
ny v mch trung tm (Driver Card), dng BJT, xc lp hai ngun tn hiu ny.
Da trn nguyn l hat ng ca mch mc kiu CE, hot ng ch ng
ngt, mch thc t c thit k nh sau:
Trang 36
Trang 37
Trong :
LINH KIN
Linh kin
C1,C2,C3
J1,J2,J3
SV2
IC1
IC2
IC3
U1
Bus
VCC, GND
IO Data
Address
Data
Cotrol Data Slot
Gi tr
100nF
Chc nng
Lc ngun cho cc IC 1,2,3
Chn a ch c nh cho mch giao tip
Cng ra; Port ABC, Supply
7404,7414
IC cng NOT
7430
IC cng NAND 8 ng vo
7432
IC cng OR
82C55A
IC PPI, giao tip
BUS
Gi tr
ngha
5V
Ngun cung cp, ly t Slot XT ca PC
Ng ra ca PPI 82A55
PA0PC7
Cc ng a ch ca Slot XT
A0A9
Cc ng d liu ca PC truyn qua Slot XT
D0D7
RD\,WR\, Cc tn hiu iu khin ly t Slt XT
Cotrol
Trang 38
Trang 39
Trang 40
Mch ly tn hiu trc tip t card giao tip a ra, sau cn p ra mc logich
0 hay 1 (0V hay 5V) nh vo cc in tr mng (array). Gii m tn hiu iu khin
t Port A, thng qua cc IC 74LS00, 74LS192 v 4555 ly c tn hiu iu
khin ng c bc truyn qua cc jumper truyn qua mch cng sut. Truyn
tn hiu ca port C sang mch qut, cc tn hiu cn li c x l v truyn i.
Mch s dng mt IC 74164 ( cht d liu u ra, tn hiu ny card giao tip s
c vo x l, thng qua port B).
Di y l s mch mch Gii m iu khin ng c bc, c thit k
sau khi th nghim i vi tng mch l (mch n, th nghim kim chng trn
tng IC).
Trang 41
S MCH TRUNG TM
Trang 42
Trong :
LINH KIN
Linh kin
RN14
C111
SV1
SV3
74LS32
74LS00
74LS192
4555
J16
Gi tr
1K
100nF
Chc nng
in tr mng ko ln, cho cc tn hiu PortABC.
Lc ngun.
Cng vo, Port ABC, tn hiu t mch giao tip.
Cng vo ra, trao i tn hiu vi cn qut.
Gii m Autoreset.
Gii m tn hiu iu khin v vng lp.
To vng lp.
Gii m tn hiu nh phn sang tn hiu thp phn.
Truyn tn hiu iu khin n mch cng sut.
Trang 43
Trang 44
Trang 45
Vmax
Pmax
Phase
Deg
Ghi ch
(V)
(W)
/Step
231M-C351-03
10
5
04
1,8
ng c ko b d
457M-C961-23
10
5
04
1,8
ng c cun giy
14769070-60
10
1
04
1,8
ng c ko cn d
DC 12V
12
2
01
ng c ly giy
DC 12V
12
2
01
ng c ko ph giy
Trong mch ngoi nhng mch gii m ni trn cn phi nhc n vai tr
khng nh ca mch Autoreset v b phn lc ngun.
Mch Auto Reset c tht k da trn nguyn l qu trnh np x t, c
th l ly p trn in tr vi phn lm tn hiu Reset. Khi c in t s t
ng np y v trong thi gian qu ny ca t in, p trn in tr tch
phn, R_RS, mang gi tr cao v gim dn theo thi gian nghch lu vi gi tr
p trn t. Gi tr p trn R_RS qua cng m OR (cng A-74LS32) lm
chun mc logic ([0] hay [1]) sau truyn tn hiu ny n chn th nht ca
cng OR th B, C, D (chn th hai tng ng ca cc cng ny c lin kt
vi cc chn QC ca 74LS192) v truyn n chn Clr ca 74LS192 (mc
logic [1]) lm cho IC ny t ng Reset thit lp li trng thi ban u.
Mch lc ngun n gin ch l cc t lc t trc cc chn ngun ca
IC s lc ht cc tn hiu nhiu xung Mass.
Trang 46
Trang 47
INTERFACE
{Khai bo chung}
TYPE
File_Name_Type
XY_Type
CONST
L_Horizontal
L_Scan
On
Off
Right
Left
Up
Down
= String[16];
= Record
Hor : Word;
Vert : Word;
End;
VAR
Sys_Error
: Byte;
DataA, DataB
: Byte;
DataC, CL, CH
: Byte;
Error
: Boolean; (*PC3 : tn hiu li Error *)
Page
: Boolean; (*PC2 : tn hiu li Page *)
Vert
: Boolean; (*PC1 : tn hiu Veritical *)
Hor
: Boolean; (*PC0 : tn hiu Horizontal*)
V_Count,
H_Count,
Sc_Count
: Integer;
Add_Port
: Array [0..2] of Word;
(*
Add_Port 0 : Address Port A
Add_Port 1 : Address Port B
Add_Port 2 : Address Port C
*)
DataA_Bit
: Array[0..7] of Boolean;
Sinh vin: Nguyn Phc Hu
Trang 48
(*
Bit 0 : Clock Vertical
Bit 1 : Up/Down Vertical
Bit 2 : Clock Scan
Bit 3 : Up/Down Scan
Bit 4 : Clock Horizontal
Bit 5 : Up/Down Horizontal
Bit 6 : Motor DC 1st
Bit 7 : Motor DC 2nd
*)
T_DL_CK
: Word; (*Thi gian Delay ca xung CK*)
T_DL_MDC
: Word; (*Thi gian Delay ca Motro DC*)
F_XY,
(*File lu tr ta XY*)
F_Data,
(*File lu tr tr li mu*)
F_Sys,
(*File lu tr trng thi*)
F_Ans
: File; (*File lu tr kt qu*)
F_Error
: Boolean;
W_Data,
(*Chiu rng d liu*)
L_Data
: Byte; (*Chiu di d liu *)
XY_Name
: File_Name_Type; (*Tn m rng File ta XY*)
XY_Count
: Word; (*S cp ta XY*)
XY_Data
: Array [1..500] of XY_Type;(*Mng d liu, ti a 500*)
IMPLEMENTATION
{Thi hnh}
BEGIN
END. {Kt thc th vin}
Cc th tc ta xy dng s khi trong chng ny l:
1. ProceDure ReadC;
2. ProceDure CK;
3. ProceDure MDC(DC1,DC2:Boolean);
4. ProceDure Run_SM(Motor:Byte;Step:Integer);
5. ProceDure SM_Standar(SM_H,SM_SC:Boolean);
6. ProceDure Page_Out;
7. ProceDure Page_In;
8. ProceDure GoXY(H,V:Integer);
9. ProceDure ResetData;
ProceDure ReadB;
10. ProceDure Scan;
Trong s khi c cc t vit tt nh:BA07 (vit tt ca bin
DataA_Bit[0..7]), PA07 (vit tt ca bin DataA[0..7]).
Th tc ReadC
Sta
r
Sinh vin: Nguyn Phc Hu
Trang 49
Trang 50
Th tc CK
Star
PA05=0
I=1
BAi=true S
DataA
or(1 shl i)
I+1
S
I>5
BA0,2,4
= False
PortA
= DataA
DataA
or $D5
Delay
PortA
=
Th tc ny c nhim v to DataA
mt xung Ck cho mch gii m iu khin.
BA6=DC1
Sinh vin: Nguyn Phc Hu
Trang 51
Trang 52
Th tc Run_SM
Star
I=1
I<Step
BAMT
=True
Ck
I+1
End
Trang 53
Th tc SM_Standar
Star
SM_H
=true
SM_Sc
=true
ReadC
ReadC
B5=
Right
BA3=
Down
Not
Error
Not
Error
Run_SM
(2,1)
Run_SM
(1,1)
ReadC
ReadC
BA5=
Left
BA3=
Up
Run_SM
(2,1)
Run_SM
(1,1)
H_Count
=1
Sc_Count
=1
Star
MDC
(Off,On)
Gio vin hng dn: Thy QUCH THANH HI
BD1=Up
Trang 54
Th tc Page In
Star
MDC
(On,Off)
BD1=Up
ReadC
Page
=false
Run_SM
(0,1)
ReadC
I=1
I<=10
Run_SM
(0,1)
I+1
Delay
MDC
(Off,Off)
Th tc GoXY
End
Star
X=
H-H_Count
Gio vin hng dn: Thy QUCH THANH HI
Y=
V-V_Count
Trang 55
Port C=$00
Port C=$10
Sinh vin: Nguyn Phc Hu
Trang 56
Port C=$30
Port C=$10
End
End
Trang 57
Dong 4. Begin
Dong 5. DataA:=DataA and $C0; (*Xoa het du lieu, tru bit 06, 07*)
Dong 6. For i:=0 to 5 do
Dong 7. If DataA_Bit[i]=True then DataA:=DataA or ($01 shl i);
Dong 8. DataA_Bit[0]:=False;
Dong 9. DataA_Bit[2]:=False;
Dong 10.
DataA_Bit[4]:=False;
Dong 11.
Port[Add_Port[0]]:=DataA;
Dong 12.
Delay(T_DL_CK);
Dong 13.
Port[Add_Port[0]]:=DataA and $D5;
Dong 14.
Delay(1);
Dong 15.
End;
Phn tch:
Dng 1: Procedure CK; Khai bo tn th tc, khi cn gi th tc ny
ta ch cn gi tn trc tip trong chng trnh chnh (hay th tc hay hm
khc). y l mt th tc khng c tham s.
Dng 2: Var Thng bo: bt u khai bo bin cc b.
Dng 3: I:Byte; Khai bo mt bin tn l I kiu Byte (chiu rng t
d liu l 08 bit). Bin ny dng cho con chy ca dng For. Do gii hn
dng chy ca dng For ch l 6 bc nn chn I kiu byte (gi tr ln
nht l 255).
Dng 4: Begin Khai bo bt u phn chng trnh ca th tc.
Dng 5: DataA:=DataA and $C0; Xa d liu Data A, gi li gi tr
ca hai bit 6 v 7 (DataA6: iu khin ng c DC1; DataA7: iu khin
ng c DC1). Thc hin iu ny bng cch AND d liu DataA vi
gi tr $C0 (Gi tr thp lc phn: $C0 chuyn sang gi tr nh phn l :
1100000B).
Trang 58
Cu 1.
Cu 2.
Cu 3.
Hnh dng bi test chnh l khun mu trnh by phn nh du trc nghim. N
xc nh v tr s ca mi la chn.
Trang 59
Bi tr li mu:
a
Cu 1.
Cu 2.
Cu 3.
BNG TR LI MU
b
c
X
X
X
B
i tr li mu
chnh l p
s ca bi
trc nghim.
N cho bit
v tr la
chn ng.
KHUN CHM BI
b
c
Cu 1.
Cu 2.
Cu 3.
Bng phim c lm bng phim nha, giy, nhng thng l lm bng phim
nha trong c th nhn thy c ht cc la chn trong mt cu. Nh vy, qua
bng phim ny chng ta c th nh v chnh xc v tr la chn ng v ng thi
nhn bit c ht cc la chn ca hc sinh. Qua bng phim ny, ngoi vic c th
xc nh c kt qu bi lm trc nghim cn c th bit c s nhm ln thng
xuyn ca hc sinh i vi mt cu trc nghim.
Bi tr li ca hc sinh:
BNG TR LI CA HC S
Cu 1.
Cu 2.
Cu 3.
a
X
b
O
X
c
X
Cu 1.
Cu 2.
Cu 3.
a
X
CHM BI
b
O
X
Trang 60
X
X
Trang 61
I. TM TT TI:
Vn t ra l gii quyt vn t ng ha cng vic chm im, m bo
tnh chnh xc v khch quan, vn ny c gii quyt n tha. Ngi thc
hin chn phng php s dng giao din vi my vi tnh c nhn iu khin
my Chm im trc nghim. Cng vic nghin cu v thit k c thc hin ln
lt qua cc bc sau:
1. La chn cm bin:
phn bit gia im sng v im ti trn cng mt t giy ngi
thc hin dng cm bin Photo-Electric (loi dng cho u nhn tn hiu
iu khin t xa ca TV).
2. Phn c kh:
C th ko ht t giy, ty theo tn hiu iu khin, c th chuyn ng theo
hai chiu thun (ko giy) v nghch (y giy).
3. Phn qut nh:
Dng mt u c c nh cho vic c tn hiu dc ( ti vng d liu) v
mt b cn qut dng cho vic c ht chiu ngang ca d liu.
4. Phn iu khin:
Dng trc tip CPU ca my vi tnh c nhn iu khin my thng qua
Card giao tip ngoi vi.
5. Xy dng chng trnh:
Vit chng trnh bng phn mm PASCAL, chng trnh chy tt trn c
mi trng Dos v mi trng Windows.
II. T NH GI TI V SN PHM:
Qua thi gian thc hin cng vic thi cng v thit k ti nhng kt qu gt
hi c nh sau:
1. Tnh khoa hc:
ti mang m tnh nghin cu v k tha. Nghin cu y chnh l
nghin cu khoa hc ng dng, p dng nhng kin thc hc hnh thnh nn
mt sn phm p ng nhu cu thc t. K tha ch, ti vn dng nhng kin
thc thu c t ti m sinh vin kha trc thc hin.
Tnh khoa hc y mang lun c tnh ngh thut, vn dng sng to s
dng kin thc thu c thnh kin thc ca chnh mnh v to ra mt sn phm
hon ton mi so vi trc.
2. Kh nng trin khai:
Nu c mt ngun vn u t th c th trin khai ng dng vo thc t bi:
Tnh chnh xc kh cao.
Vn hnh n nh.
Gi tr s dng cao.
Chng trnh iu khin khng ph thuc nhiu vo phn cng v c
th pht trin ln mc cao hn na l cho kh nng phn tch c
mt b da trn phng php phn tch kh, tnh mi nh,
Gi thnh sn phm thp.
3. Hiu qu kinh t, x hi:
Trang 62
Trang 63
Tng kinh ph thc hin (cha k cng th) c tnh theo bng sau:
STT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Tn linh kin
n gi (VN)
18.000
5.000
3.500
3.500
4.000
3.500
5.000
4.000
S lng
1
2
3
1
1
3
3
1
Trang 64
NGUYN PHC HU
Trang 65
S NGUYN L
MCH GIAO TIP
Trang 66
S MCH IN
MCH GIAO TIP
MT TRN
MT DI
Trang 67
S MCH IN
MCH GIAO TIP
LINH KIN
KHOAN L
Trang 68
S NGUYN L
MCH NNG P V TRUYN TN HIU
S MCH IN
MCH NNG P V TRUYN TN HIU
MT TRN
MT DI
LINH KIN
KHOAN L
Trang 69
S NGUYN L
MCH GII M TN HIU IU KHIN
Trang 70
S MCH IN
MCH GII M TN HIU IU KHIN
MT TRN
MT DI
LINH KIN
KHOAN L
Trang 71
S NGUYN L
MCH CNG SUT
S MCH IN
Sinh vin: Nguyn Phc Hu
Trang 72
MT DI
LINH KIN
KHOAN L
Trang 73
= String[16];
= Record
Hor : Word;
Vert : Word;
End;
CONST
L_Horizontal
= 600; (*Chieu dai can quet ngang, tinh bang xung Ck*)
L_Scan
= 100; (*Chieu dai tin hieu quet, tinh bang xung Ck *)
On
= True;
Off
= False;
Right
= True;
Left
= False;
Up
= True;
Down
= False;
VAR
Sys_Error
DataA, DataB
DataC, CL, CH
Error
Page
Vert
Hor
V_Count,
H_Count,
Sc_Count
Add_Port
DataA_Bit
: Byte;
: Byte;
: Byte;
: Boolean; (*PC3 : tin hieu loi Error *)
: Boolean; (*PC2 : tin hieu loi Page *)
: Boolean; (*PC1 : tin hieu Veritical *)
: Boolean; (*PC0 : tin hieu Horizontal*)
: Integer;
: Array [0..2] of Word;
(*
Add_Port 0 : Address Port A
Add_Port 1 : Address Port B
Add_Port 2 : Address Port C
*)
: Array[0..7] of Boolean;
(*
Bit 0 : Clock Vertical
Bit 1 : Up/Down Vertical
Bit 2 : Clock Scan
Trang 74
IMPLEMENTATION
BEGIN
END.
Trang 75
IMPLEMENTATION
ProceDure ReadC; (*Doc PortC, lay 04 bit thap*)
Var
Temp: Byte;
Begin
Temp:=Port[Add_Port[2]];
Temp:=Temp and $0F; (*lay 04 bit thap*)
If (Temp and $01)=$01 then Hor:=True
Else Hor:=False;
If (Temp and $02)=$02 then Vert:=True
Else Vert:=False;
If (Temp and $04)=$04 then Page:=True
Else Page:=False;
If (Temp and $08)=$08 then Error:=True
Else Error:=False;
End;
Trang 76
ProceDure CK;
Var
i:byte;
Begin
DataA:=DataA and $C0; (*Xoa het du lieu, tru bit 06, 07*)
For i:=0 to 5 do
If DataA_Bit[i]=True then DataA:=DataA or ($01 shl i);
DataA_Bit[0]:=False;
DataA_Bit[2]:=False;
DataA_Bit[4]:=False;
Port[Add_Port[0]]:=DataA;
Delay(T_DL_CK);
Port[Add_Port[0]]:=DataA and $D5;
End;
ProceDure MDC(DC1,DC2:Boolean);
Begin
If DC1=True then DataA:=DataA or $40
Else DataA:=DataA and $BF;
If DC2=True then DataA:=DataA or $80
Else DataA:=DataA and $7F;
DataA_Bit[6]:=DC1;
DataA_Bit[7]:=DC2;
CK;
End;
ProceDure Run_SM(Motor:Byte;Step:Integer);
Var
{Motor=0 : Vertical}
i:Integer;
{Motor=1 : Scan}
Begin
{Motor=2 : Horizontal}
For i:=1 to Step do
Begin
DataA_Bit[2*Motor]:=True; {Tao xung}
CK;
End;
End;
Trang 77
ProceDure SM_Standar(SM_H,SM_SC:Boolean);
Begin
If SM_H=True then
Begin
ReadC;
DataA_Bit[5]:=Right;
While not Error do
Begin
DataA_Bit[4]:=True;
CK;
ReadC;
End;
DataA_Bit[5]:=Left;
DataA_Bit[4]:=True;
CK;
H_Count:=1;
End;
If SM_SC=True then
Begin
DataA_Bit[3]:=Down;
ReadC;
While not Error do
Begin
DataA_Bit[2]:=True;
CK;
ReadC;
End;
DataA_Bit[3]:=Up;
DataA_Bit[2]:=True;
CK;
SC_Count:=1;
End;
End;
ProceDure Page_Out;
Var
Temp:Byte;
Begin
DataA_Bit[1]:=Up;
MDC(Off,On);
ReadC;
While Page do
Begin
DataA_Bit[0]:=True;
CK;
ReadC;
Trang 78
End;
For Temp:=1 to 50 do
Begin
DataA_Bit[0]:=True;
CK;
End;
Delay(T_DL_MDC);
MDC(Off,Off);
V_Count:=0;
End;
ProceDure Page_In;
Var
Temp:Byte;
Begin
DataA_Bit[1]:=Up;
MDC(On,Off);
ReadC;
While not Page do
Begin
DataA_Bit[0]:=True;
CK;
ReadC;
End;
For Temp:=1 to 10 do
Begin
DataA_Bit[0]:=True;
CK;
End;
Delay(T_DL_MDC);
V_Count:=0;
End;
Trang 79
ProceDure GoXY(H,V:Integer);
Var
x,y,Max,Min : Integer;
i
: Byte;
x_Ok
: Boolean;
Begin
x:=H-H_Count;
y:=V-V_Count;
If x<0 then DataA_Bit[5]:=Right Else DataA_Bit[5]:=Left;
If y<0 then DataA_Bit[1]:=Down Else DataA_Bit[1]:=Up;
H_Count:=H;
V_Count:=V;
x:=Abs(x);
y:=Abs(y);
If x>=y then x_Ok:=True Else x_Ok:=False;
Case x_Ok of
True : Begin
Run_SM(2,x-y);
For i:=1 to y do
Begin
DataA_Bit[0]:=True;{Vert}
DataA_Bit[4]:=True;{Hor}
CK;
End;
End;
False : Begin
Run_SM(0,y-x);
For i:=1 to x do
Begin
DataA_Bit[0]:=True;{Vert}
DataA_Bit[4]:=True;{Hor}
CK;
End;
End;
End; {Case}
End;
Trang 80
ProceDure ResetData;
Begin
Port[Add_Port[2]]:=$00; {Xung xuong xoa 74LS164}
Port[Add_Port[2]]:=$10; {Xung len xoa 74LS164}
End;
ProceDure ReadB;
Begin
DataB:=Port[Add_Port[1]];{Doc du lieu}
ResetData;
{Xoa du lieu}
End;
ProceDure Scan;
Begin
Port[Add_Port[2]]:=$30; {Xung len Ck 74LS164}
Port[Add_Port[2]]:=$10; {Xung xuong Ck 74LS164}
ReadC;
End;
BEGIN
END.
Trang 81
Trang 82
Trang 83
ReadC;
Inc(H_Count);
End; {While}
Inc(XY_Count);
XY_Data[XY_Count].Vert:=V_Count;
XY_Data[XY_Count].Hor:=H_Count;
Run_SM(2,L_Data+2);
H_Count:=H_Count+L_Data+2;
End; {While}
(*Xu ly phan con lai*)
Repeat
SM_Standar(On,Off);
ReadC;
While not Vert do
Begin
Run_SM(0,1);
ReadC;
Inc(V_Count);
End; {While}
Run_SM(0,2);
V_Count:=V_Count+2; (*Hor da la Left*)
ReadC;
While H_Count<=L_Horizontal do
Begin
While not Hor do
Begin
Run_SM(2,1);
ReadC;
Inc(H_Count);
End; {While}
Inc(XY_Count);
XY_Data[XY_Count].Vert:=V_Count;
XY_Data[XY_Count].Hor:=H_Count;
Run_SM(2,L_Data);
End; {While}
Until not Page; {lap cho den khi het giay}
Assign(F_XY,Path);
Rewrite(F_XY);
BlockWrite(F_XY,XY_Name,Sizeof(XY_Name));
BlockWrite(F_XY,XY_Count,Sizeof(XY_Count));
BlockWrite(F_XY,L_Data,Sizeof(L_data));
BlockWrite(F_XY,W_Data,Sizeof(W_data));
For i:=1 to XY_Count do
BlockWrite(F_XY,XY_Data[i],Sizeof(XY_data[i]));
Close(F_XY);
End;
Trang 84
End;
Trang 85
ProceDure Load_XY(Path:String);
Var
i: Word;
Begin
If FileExists(Path)=True then (*Neu File ton tai*)
Begin
Sys_Error:=0;
F_Error:=False;
Assign(F_XY,Path);
Reset(F_XY);
BlockRead(F_XY,XY_Name,Sizeof(XY_Name));
BlockRead(F_XY,XY_Count,Sizeof(XY_Count));
BlockRead(F_XY,L_Data,Sizeof(L_Data));
BlockRead(F_XY,W_Data,Sizeof(W_Data));
For i:=1 to XY_Count do
BlockRead(F_XY,XY_Data[i],Sizeof(XY_Data[i]));
Close(F_XY);
End
Else (*Neu File khong ton tai*)
Begin
Sys_Error:=1;
F_Error:=True;
Write(#7);
End;
End;
BEGIN
END.
Trang 86
Trang 87
ProceDure Shrcc;
Begin
cc:=cc shr 3;
End;
ProceDure Writexy(dx,dy,Color:Byte;St:String);
Begin
For m:=0 to Length(St)-1 do
Begin
Screen[dy,dx+m].Chu:=Ord(St[m+1]);
Screen[dy,dx+m].Mau:=Color;
End;
End;
ProceDure GetMouse;
Begin
Asm
Mov AX,$0003
Int $33
Mov x,CX
Mov y,DX
Mov MB,BX
End;
End;
ProceDure ReadMode;
Begin
InLine($B8/$02/$04/$BA/$C4/$03/$EF/$B8/$04/$07/$EF/$BA
/$CE/$03/$B8/$04/$02/$EF/$B8/$05/$00/$EF/$B8/$06
/$00/$EB/$0C/$90/$44/$6F/$20/$43/$6F/$6E/$67
/$20/$41/$6E/$68/$EF);
End;
ProceDure RestoreMode;
Begin
InLine($BA/$C4/$03/$B8/$02/$03/$EF/$EB/$0E/$90/$20/$44/$6F/$20/$43/$
6F/$6E/$67/$20/$41/$6E/$68/$20/$B8/$04/$03/$EF/$BA/$CE/$03/$B8/
$04/$00/$EF/$B8/$05/$10/$EF/$B8/$06/$0E/$EF);
End;
Trang 88
ProceDure NapFont(Number:Byte;F:Font);
Begin
Move(F,BangFont[Number,0],16);
End;
ProceDure LayFont(Number:Byte;Var F:Font);
Begin
Move(BangFont[Number,0],F,16);
End;
ProceDure Save;
Var Ofs:Word;
Begin
If Mx=79 then dec(Mx);
If My=24 then dec(My);
OldChar[1]:=Screen[My,Mx].Chu;
OldChar[2]:=Screen[My,Mx+1].Chu;
OldChar[3]:=Screen[My+1,Mx].Chu;
OldChar[4]:=Screen[My+1,Mx+1].Chu;
End;
ProceDure ResTore(c:Char4);
Var Ofs:Word;
Begin
Screen[My,Mx].Chu:=c[1];
Screen[My+1,Mx].Chu:=c[3];
If Mx<>79 then
Begin
Screen[My,Mx+1].Chu:=c[2];
Screen[My+1,Mx+1].Chu:=c[4];
End;
End;
ProceDure MousePaint(x,y:Word);
Var
DLx,DLy,i: Integer;
Begin
ResTore(OldChar);
Mx:=x shr 3;
My:=y shr 3;
(* Writexy(36,11,$74,' ');
Writexy(50,11,$74,' ');
Writexy(36,13,$74,' ');
Writexy(50,13,$74,' ');
Gotoxy(38,12);
Write(y+1);
Trang 89
Gotoxy(50,12);
Write(x+1);
Gotoxy(38,14);
Write(My+1);
Gotoxy(50,14);
Write(Mx+1);*)
Save;
ReadMode;
For i:=1 to 4 do
Begin
LayFont(Ord(OldChar[i]),MFont[i]);
End;
RestoreMode;
DLx:=x And 7;
DLy:=y And 7;
For i:=0 to 15 do
Asm
MOV BX,OFFSET MFONT
MOV SI,DLY
ADD SI,SI
ADD SI,I
CMP SI,15
JBE @@1
ADD SI,16
@@1:
MOV AH,BYTE PTR [BX+SI]
MOV AL,BYTE PTR [BX+SI+16]
MOV DI,OFFSET MFORMAT
ADD DI,I
MOV DH,[DI]
XOR DL,DL
MOV CX,DLx
SHR DX,CL
OR AX,DX
MOV BYTE PTR[BX+SI],AH
MOV BYTE PTR[BX+SI+16],AL
End;
ReadMode;
For i:=1 to 4 do
NapFont(MChar[i],MFont[i]);
ResToreMode;
ResTore(MChar);
End;
ProceDure StarMouse;
Assembler;
Trang 90
Asm
MOV ON_OFF,1
MOV CAIDAT,1
XOR AX,AX
INT 33H
OR AX,AX
JNZ @@1
MOV CAIDAT,0
JMP @@2
@@1:
MOV AX,0002H
INT 33H
MOV AX,0003H
INT 33H
{ SHR CX,3 }
MOV CC,CX
CALL SHRCC
MOV CX,CC
{ SHR DX,3}
MOV DD,DX
CALL SHRDD
MOV DX,DD
MOV MX,CX
MOV MY,DX
{ SHR MX,3 }
MOV CC,CX
CALL SHRCC
PUSH CX
MOV CX,CC
MOV MX,CX
{ SHR MY,3}
MOV DD,DX
CALL SHRDD
PUSH DX
MOV DX,DD
MOV MY,DX
CALL SAVE
CALL MOUSEPAINT
@@2:
End;
ProceDure MHandler;
Assembler;
Asm
MOV AX,SEG MFONT
MOV DS,AX
Trang 91
{ SHR CX,3 }
MOV CC,CX
CALL SHRCC
MOV CX,CC
{ SHR DX,3}
(* MOV DD,DX
CALL SHRDD
MOV DX,DD *)
PUSH CX
PUSH DX
CALL MOUSEPAINT
RETF
End;
ProceDure MouseOff;
Begin
If not On_Off then Exit;
On_Off:=False;
Restore(OldChar);
Asm
MOV AX,0CH
XOR CX,CX
LES DX,HA
INT 33H
End;
End;
ProceDure MouseOn;
Begin
If not On_Off then Exit;
On_Off:=True;
Asm
MOV AX,0CH
MOV CX,01
LES DX,HA
INT 33H
End;
End;
ProceDure InitMouse;
Begin
For n:=0 to 22 do
Writexy(0,n,$1a,'Nguyen Phuoc Hau**ABCDEFGHIJKLMNOPQRSTWVXYZ1234567890**');
Writexy(24,10,$74,'Toa do chuot thuc :');
Writexy(24,11,$74,'Hang: Cot: ');
Trang 92
Trang 93
Begin
InitMouse;
MouseOn;
RePeat
GetMouse;
UnTil (Mb=2) or KeyPressed;
MouseOff;
ClrScr;
TextColor(15);
TextBackGround(0);
End;
END.
Trang 94
Trang 95
TYPE
MenuPtr = ^Menutype ;
MenuItem = Record
Name : String[50];
Hkey : Word
;
Case Pop : Boolean Of
True : (SubMenu : MenuPtr) ;
End;
ListType = Array[1..MaxItem] of MenuItem;
Menutype = Record
Size : Byte ;
List : ListType;
End;
{$F+}
Procedure InitVar( Var M : MenuPtr);
Procedure DeInitVar( Var M : MenuPtr);
Procedure AppendItem(Name : String ; HKey : Word;
Pop : Boolean ; SMenu : MenuPtr;
Var M : MenuPtr);
Function MenuOnePos(x,y,IAttr:Byte;M : MenuPtr): Word ;
Function Menubar(x,y,LAttr,NAttr,IAttr:Byte;M:MenuPtr):Word ;
Function Menupop(x,y,LAttr,NAttr,IAttr:Byte;M:MenuPtr):Word ;
Function MenuPullDown(x,y,LAttr,NAttr,IAttr : Byte;
M:MenuPtr) : Word ;
Function MenuDos(Col,Row,ColNum,RowNum,
FrAttr,NAttr,IAttr : Byte ;
Path : PathStr): PathStr;
{$F-}
IMPLEMENTATION
Uses Crt,Ptool ;
{$S-}
Var Right , Left : Boolean ;
CSize : Word ;
Function RPad(St:String ;N : Byte): String ;
Var Len : Byte Absolute St ;
Begin
While Len < N do St := St+#32;
RPad := St ;
End;
Function MaxLength( P : MenuPtr ) : Byte ;
Var Tempo , I : Byte ;
Begin
Tempo := 0;
For i := 1 to P^.Size do
Trang 96
Trang 97
{--------------------------------------------------}
Procedure AppendItem(Name : String ; HKey : Word;
Pop : Boolean ; SMenu : MenuPtr;
Var M : MenuPtr);
Begin
If M^.Size < MaxItem then
Begin
Inc(M^.Size);
M^.List[M^.Size].Name := Name ;
M^.List[M^.Size].HKey := Hkey ;
M^.List[M^.Size].Pop := Pop ;
If Pop then
M^.List[M^.Size].SubMenu := SMenu;
End;
End;
{--------------------------------------------------}
Function FindHotKey(M:MenuPtr;Nk:Word;Var N : Word):Boolean;
Var i : Byte ;
Begin
i := 1 ;
While (i<=M^.Size) and (Nk <> M^.List[i].Hkey) do Inc(i);
If i <= M^.Size then
Begin
FindHotKey := True ; N := i ;
end
Else FindHotKey := False;
End;
{--------------------------------------------------}
Function FindUpChr(St:String):Byte ;
Var i : Byte ;
Begin
i := 1 ;
While (i<=Length(st)) and
((St[i]<'A') or (St[i]>'Z')) do Inc(i);
If i > Length(St) then FindUpChr := 0
Else
FindUpChr := i ;
End;
Trang 98
{--------------------------------------------------}
Function MenuOnePos(x,y,IAttr:Byte;M : MenuPtr): Word ;
var MLen : Byte ;
N,Nk : Word ;
Thoat : Boolean ;
{--------------------------------------------------}
Procedure WriteItem(k:Byte);
Begin
If k > 0 then
WriteStr(x,y,IAttr,RPad(M^.List[k].Name,MLen));
End;
{-----------------------------------------------------}
Begin
CursorOff;
Mlen := MaxLength(M);
Thoat := False ;
N := 1;
WriteItem(N);
Repeat
Nk := GetKey ;
Case Nk of
UpKey,LeftKey :
If N>1 then Dec(N) else N := M^.Size;
DownKey,RightKey :
If N<M^.Size then Inc(N) else N := 1;
HomeKey
: N := 1;
EndKey
: N := M^.Size ;
Enter
: Thoat := True ;
Esc
: Begin Thoat := True ;N := 0 end;
end;
WriteItem(N);
Until Thoat ;
MenuOnePos := N ;
SetCurSor(CSize);
End;
{--------------------------------------------------}
Trang 99
Trang 100
Trang 101
Trang 102
Thoat := False ;
N := 1;
Repeat
SubN := 0;Left := False ; Right := False ;
WriteItem(n,True);
Nk := GetKey ;
WriteItem(N,False);
If FindHotKey(M,Nk,N) then
If M^.List[N].Pop then
Begin
{ Gi Menu con khi Bm phm Hot-Key }
SubN := MenuPop(x1+2+4,y1+N+1,LAttr,
NAttr,IAttr,M^.List[N].SubMenu);
If SubN <> 0 then thoat := True ;
End
Else
Thoat := True
Else ChangeItem
Until thoat ;
RestoreScreen(Sc);
If SubN = 0 then MenuPop := N
Else
If (SubN and $FFF0 ) = 0 then
MenuPop := N Shl 4 + SubN
Else
If (SubN and $FF00 ) = 0 then
MenuPop := N Shl 8 + SubN
Else
If (SubN and $F000 ) = 0 then
MenuPop := N Shl 12 + SubN ;
SetCurSor(CSize);
End;
{--------------------------------------------------}
Function MenuPullDown(x,y,LAttr,NAttr,IAttr : Byte;
M:MenuPtr) : Word ;
Var SubN , N ,Nk : Word ;
Thoat, PopActive : Boolean ;
{--------------------------------------------------}
Function ItemCol(k : Byte ): Byte ;
Var Len,i : Byte ;
Begin
Len := 0 ;
For i := 1 to k - 1 do
Len := Len+Length(M^.List[i].Name)+2;
ItemCol := x + Len ;
Trang 103
End;
{---------------------------------------------------}
Procedure WriteItem(k:Byte;Active:Boolean);
Var Col,N : Byte ;
Begin
If k <> 0 then
Begin
Col := ITemCol(k) ;
If Active then
WriteStr(Col,Y,IAttr,M^.List[k].Name)
Else
begin
WriteStr(Col,Y,NAttr,M^.List[k].Name);
N := FindUpChr(M^.List[k].Name);
If N <> 0 then
WriteStr(Col+N-1,Y,LAttr,
M^.List[k].Name[N]);
end;
End;
End;
{--%-----------------------------------------------}
Procedure Table ;
Var i : Byte ;
Begin
For i := 1 to M^.Size do WriteItem(i,False);
End;
{-----------------------------------------------------}
Begin
CurSorOff;
PopActive := False;
Thoat := False ;
Table;
If (N<1) or (N>M^.Size) then N := 1;
Repeat
SubN := 0;
WriteItem(N,True);
If PopActive and M^.List[N].Pop and
(M^.List[N].Submenu <> Nil) then
SubN := Menupop(ItemCol(N),y+1,
LAttr,NAttr,IAttr,M^.List[N].Submenu);
If (SubN = 0) and (Not Left) and (Not Right) then
PopActive := False ;
If PopActive and M^.List[N].Pop and
(M^.List[N].Submenu <> Nil) then
begin
if Left then Nk := LeftKey;
Trang 104
Trang 105
{----------------------------------------------------}
Left = #75; Right = #77; Up = #72; Down = #80 ;
Home = #71; Endkey = #79; PgUp = #73; PgDn = #81 ;
Esc = #27; Enter = #13;
Var
First,Last,P,Heap,Top,Bot : DirPtr ;
Max,N,i,Tam
: Byte;
Ch
: Char ;
Sc
: ScrPtr;
St
: PathStr ;
CurSor,Att
: Word ;
Na
: NameStr;
E
: ExtStr;
D
: DirStr;
{-------------------------------------------------------}
Function RPad(St:String;N:Byte):String;
Begin
While Length(St) < N do St := St + #32 ;
RPad := St ;
End;
{-------------------------------------------------------}
Procedure GetPath(Var Path:PathStr);
Var F : File;
Begin
If Path[Length(Path)] = '\' then
Delete(Path,Length(Path),1);
Path := FExpand(Path);
Assign(F,Path);
GetFAttr(F,Att);
if (DosError = 0) and (Att and Directory <> 0)
and (Path[Length(Path)] <>'\') then
Path := Path + '\';
FSplit(Path, D, Na, E);
if Na = '' then Na := '*';
if E = '' then E := '.*';
Path := D + Na # E;
End;
{-------------------------------------------------------}
Procedure Appendlist(FileIf:SearchRec);
Begin
New(P);
P^.Name := FileIf.Name ;
p^.FileAttr := FileIf.Attr;
If First = Nil then
begin
First := P ;
Trang 106
First^.Pre := Nil
end
Else
begin
Last^.Next := P ;
P^.Pre := Last ;
end;
Last := P ;
Last^.Next := Nil
End;
{-------------------------------------------------------}
Procedure SortList;
Var P,Q : DirPtr; X:String[12];
Begin
P:= First;
While (P<>Nil) and (P<>Last) do
Begin
Q:= P^.Next;
While ( Q<>Nil) do
Begin
If (P^.Name > Q^.Name) then
Begin
X:= P^.Name;
P^.Name:=Q^.Name;
Q^.Name:=X;
End;
Q:= Q^.Next;
end;
P:= P^.Next;
End;
End3
{-------------------------------------------------------}
Procedure FindFiles(Path:PathStr);
Var F: SearchRec;
Begin
FindFirst(Path,Archive+Directory,F);
While (DosError = 0) do
Begin
If (F.Attr and Directory > 0) and
(F.Name <> '.') then
F.Name :=F.Name+'\';
If F.Name <>'.' then Appendlist(F);
FindNext(F);
End;
End;
Trang 107
{-------------------------------------------------------}
Procedure WriteItem(P:DirPtr;N:Integer;Active:Boolean);
Var X,Y,Colo : Byte ;
Begin
If p <> nil then
Begin
If Active then Colo := IAttr
Else Colo := NAttr ;
X := 14*((N - 1) mod ColNum) + 2 + Col ;
Y := ((N - 1) div Colnum) + 1 + Row ;
WriteStr(x,y,Colo,RPad(P^.Name,12));
end;
End;
{---------------------%---------------------------------}
Procedure DisplayTable(Var N : Byte );
Begin
N := 0;
Clear(col+1,Row+1,Col+14*ColNum,Row+RowNum,FrAttr);
P := Top ;
While (P <> Nil) and (N < ColNum*Rownum ) do
begin
inc(n);
WriteItem(P,N,False);
P := P^.Next ;
end;
If P=Nil then Bot := Last
Else
Bot := P^.Pre;
End;
{-------------------------------------------------------}
Function GetItem : PathStr ;
Var i : Byte ;
Begin
First := Nil ;Last := Nil;
Mark(Heap);
GetPath(Path);
FindFiles(Path);
SortList;
Top := First ;
StrBox(Col,Row,Col+14*Colnum+1,Row+Rownum+1,
FrAttr,Double,Path,ShadeOn);
DisplayTable(Max);
P := Top ;
N:=1;
If First <> Nil then
Repeat
WriteItem(P,N,True);
Trang 108
Ch := Readkey ;
WriteItem(P,N,False);
If Ch = #0 then
Begin
Ch:= Readkey ;
Case Ch of
Up : If N - ColNum > 0 then
begin
For i := ColNum dgwnto 1 do
p := p^.Pre;
Dec(N,ColNum);
end
Else
If (N = 1) and (Top<>First) then
begin
Top := Top^.Pre;
DisplayTable(Max);
P := Top;
end;
Down : If N + ColNum <= Max then
begin
For i := 1 to colnum do
Begin
p := P^.Next ;
Inc(N,1);
End;
end
Else
If (N=Max) and (P<>Last) then
begin
Top := Top^.Next;
DisPlayTable(Max);
P:=Top;
For i := 1 to Max-1 do
P:=P^.Next;
end;
Left : If N>1 then
Begin
P:=P^.Pre;
Dec N);
End
Else
If (Top<>First) then
begin
Top := Top^.Pre;
DisplayTable(Max);
Trang 109
P := Top;
end;
Right: If N < Max then
Begin
P:=P^.Next;
Inc(N);
End
Else
If (P<>Last) then
begin
Top := Top^.Next;
DisPlayTable(Max);
P:=Top;
For i := 1 to Max-1 do
P:=P^.Next;
end;
Home : Begin
P:=Top;
N:=1;
End;
EndKey : Begin
P:=Bot;
N:=Max;
End;
PgUp : If Top <> First then
Begin
i:=0;
While (i<ColNum*RowNum) and
(Top^.Pre<>Nil) do
Begin
Inc(i);
Top:=Top^.Pre;
End;
DisplayTable(Max);
P:=Top;
If N>Max then N:=Max;
i:=1;
While i<N do
Begin
P:=P^.Next;
Inc(i);
End;
End;
PgDn : If Bot <> Last then
Begin
Top := Bot^.Next;
Trang 110
DisPlayTable(Max);
P:=Top;
If N>Max then N:=Max;
i:=1;
While i<N do
Begin
P:=P^.Next;
Inc(i);
End;
End;
End; { Case }
End; { If }
Until Ch in [Esc,Enter]
Else { First = Nil }
begin
WriteStr(col+2,row+1,NAttr,'File Not Found');
Repeat until keypressed;
end;
Release(Heap);
If P <> Nil then
GetItem:= P^.Name
else
GetItem := '';
End;
Trang 111
Trang 112
Trang 113
Trang 114
Procedure SMALLCURSOR ;
Procedure BIGCURSOR ;
(*--------------------------------------------------------*)
Function EGAInstalled : Boolean ;
Function PS2 : Boolean ;
{$F-}
{--------------------------------------------------------------}
IMPLEMENTATION
{--------------------------------------------------------------}
Uses Crt,Dos ;
{---------------------------------------}
Function RPad(St:String;N:Byte):String;
Begin
While Byte(St[0]) < N do St:=St+#32;
RPad:=St;
End;
{---------------------------------------}
Function LPad(St:String;N:Byte):String;
Begin
While Byte(St[0]) < N do St:=#32+St;
LPad:=St;
End;
{---------------------------------------}
Function LTrim(St:String):String;
Var i :Byte ;
Begin
i:=1;
While St[i]=#32 do Inc(i);
Delete(St,1,i-1);
LTrim:=St;
End;
{----------------%----------------------}
Function RTrim(St:String):String;
Var i :Byte ;
Begin
i:=Byte(St[0]);
While St[i]=#32 do Dec(i);
Byte(St[0]):=i;
RTrim:=St;
End;
{---------------------------------------}
Function UpStr(St:String):String;
Var i :Byte ;
Begin
For i:= 1 to Byte(St[0]) do St[i]:=Upcase(St[i]);
Trang 115
UpStr:=St;
End;
{---------------------------------------}
Function LoStr(St:String):String;
Var i :Byte ;
Begin
For i:= 1 to Byte(St[0]) do
If (St[i]>='A') and (St[i]<='Z')then
Inc(St[i],32);
LoStr:=St;
End;
{---------------------------------------}
Function Proper(St:String):String;
Var i :Byte ;
Begin
St:= LoStr(LTrim(Rtrim(St)));
i:=Pos(#32#32,St);
While i<>0 do
Begin
Delete(St,i,1);
i:=Pos(#32#32,St);
End;
St[i]:=Upcase(St[i]);
For i := 2 to Byte(St[0])-1 do
If St[i]=#32 then St[i+1]:=UpCase(St[i+1]);
Proper:=St;
End;
{---------------------------------------}
Function GetKey:Word;
Var N : Word ;Ch:Char ;
Begin
N:= Ord(Readkey);
If N = 0 then
N:= (Word(Ord(Readkey)) Shl 8) + N ;
GetKey := N 3
End;
{---------------------------------------}
Function Bin(N:Byte):String;
Var Temp,Yst : String ;
Begin
Temp := '';
Repeat
Str(N Mod 2,YSt);
Temp := YSt+Temp;
N := N div 2 ;
Until N = 0 ;
Trang 116
Trang 117
Function GetChar(Col,Row:Byte):Word;
Begin
GetChar := MemW[VidSeg:Ofset(Col,Row)]
End;
{-------------------------------------------}
Procedure WriteChar(x,y,Attr,Len : Byte ; Ch :Char );
Var
VSeg,VOfs : Word ;
i
: Byte ;
Begin
VSeg := VidSeg ;
VOfs := Ofset(x,y) ;
For i := 1 to len do
Begin
MemW[VSeg:VOfs]:=(Attr Shl 8) + Ord(Ch);
VOfs := VOfs + 2 ;
End;
End;
{-------------------------------------------}
Procedure WriteStr(x,y,Attr :Byte ; St :String );
Var
VSeg,VOfs : Word ;
i
: Byte ;
Begin
VSeg := VidSeg ;
VOfs := Ofset(x,y) ;
For i := 1 to length(St) do
Begin
MemW[VSeg:VOfs]:=(Attr Shl 8)+Ord(St[i]);
VOfs := VOfs + 2 ;
End;
End;
{-------------------------------------------}
Procedure WriteColo(x,y,Att1,Att2:Byte;St:String);
Var i,Att,Col : Byte ;
Begin
Att := Att2;Col := x ;
For i := 1 to Length(St) do
Begin
If St[i]='~' then
if att=att2 then
att := att1
else
att := att2
else
Begin
Trang 118
WriteChar(Col,y,Att,1,St[i]);
Inc(Col);
End;
End;
End;
{-------------------------------------------}
Function NSt(N : Longint) : String ;
Var Temp : String ;
I : Byte ;Am : Boolean ;
Begin
Am := N < 0 ;
If Am then N := - N ;
Str(N,Temp);
i := Length(Temp);
While i >= 4 do
Begin
Insert(',',Temp,i-2);
Dec(i,3);
End;
If Am then Nst := '-'+Temp
Else
Nst := Temp ;
End;
{-------------------------------------------}
Procedure WriteInt(x,y,Att,Len:Byte;Int:Longint);
Var Temp : String;
Begin
Temp := NSt(Int);
While Length(Temp) < Len do Temp := #32 + Temp;
WriteStr(x,y,Att,Temp);
end;
{------------%------------------------------}
Function RSt(R : Real;N : Byte ) : String ;
Var Temp : String ;
I : Byte ;Am : Boolean ;
Begin
Am := R < 0 ;
If Am then R := - R ;
Str(R:N:N,Temp);
If N = 0 then
i:=Byte(Temp[0])
Else
i := Pos('.',Temp)-1;
While i >= 4 do
Begin
Insert(',',Temp,i-2);
Dec(i,3);
Trang 119
End;
If Am then Rst := '-'+Temp
Else
Rst := Temp ;
End;
Trang 120
{-------------------------------------------}
Procedure WriteReal(x,y,Att,Len,Frac:Byte;R : Real);
Var Temp : String;
Begin
Temp := RSt(R,Frac);
While Length(Temp) < Len do Temp := #32 + Temp;
WriteStr(x,y,Att,Temp);
end;
{-------------------------------------------}
Procedure ReadInt (x,y,Attr,L : Byte ; Var Lvar );
Var Tempo : String ;
Result : Integer ;
Lmem : Longint absolute LVar ;
OAttr : Byte ;
Begin
OAttr := TextAttr ;
TextAttr := Attr ;
Repeat
Writechar(x,y,Attr,L,#32);
Gotoxy(x,y);Readln(Tempo);
Val(Tempo,Lmem,Result);
Until (Result = 0 );
WriteInt(x,y,Attr,L,LMem);
TextAttr := OAttr ;
End;
{-------------------------------------------}
Procedure ReadWord (x,y,Attr,L : Byte ; Var Lvar );
Var Tempo : String ;
Result : Integer ;
p,OAttr: Byte ;
Wmem : Word absolute LVar ;
Begin
OAttr := TextAttr ;
TextAttr := Attr ;
Repeat
Writechar(x,y,Attr,L,#32);
Gotoxy(x,y);Readln(Tempo);
Val(Tempo,Wmem,Result);
p := pos('-',tempo)
Until (Result = 0 ) and (p = 0);
WriteInt(x,y,Attr,L,Wmem);
TextAttr := OAttr ;
End;
{-------------------------------------------}
Procedure ReadReal (x,y,Attr,L,N: Byte ; Var Rvar:Real );
Var Tempo : String ;
Trang 121
Result : Integer ;
OAttr : Byte ;
Begin
OAttr := TextAttr ;
TextAttr := Attr ;
Repeat
Writechar(x,y,Attr,L,Chr(32));
Gotoxy(x,y);Readln(Tempo);
Val(tempo,RVar,Result);
Until Result = 0 ;
WriteReal(x,y,Attr,L,N,RVar);
TexTAttr := OAttr ;
End;
{-------------------------------------------}
Prgcedure ReadSt (x,y,Attr,L : Byte ; Var St);
Var
Str : String absolute St ;
Thoat : Boolean;
Ch: Char ;i,j:Byte;
Cot:Byte;
Begin
i:=1;Thoat:=False;
Writechar(x,y,Attr,L,Chr(32));
WriteStr(x,y,Attr,Copy(Str,1,L));
Repeat
Cot:=x+i-1;
GotoXy(Cot,y);
Ch:=ReadKey;
Case Ch Of
#32..#127:If i<=L then
Begin
Insert(Ch,Str,i);
Inc(i); If i>L Then i:=L;
End;
#13 :Thoat:=True;
#27 :Begin
Thoat:=True;
Str:='';
End;
#8
:Begin
Delete(Str,i-1,1);
Dec(i);
End;
#0
:Begin
Ch:=Readkey;
Case Ch of
Trang 122
#71 : i:=1;
#75 : If i>1 Then Dec(i);
#77 : If i<L Then
Begin
j:=Byte Str[0]);
While Str[j]=#32 do Dec(j);
If i>j then
Insert(#32,Str,i);
Inc(i);
End;
#79 : Begin
i:=Byte(Str[0])+1;
While Str[i-1]=#32 do Dec(i);
If i>L then i:=L;
End;
#83 : Delete(Str,i,1);
End;
End;
End;
Writechar(x,y,Attr,L,Chr(32));
WriteStr(x,y,Attr,Copy(Str,1,L));
Until Thoat;
Str:=RTrim(Copy(Str,1,L));
End;
{-------------------------------------------}
Procedure CenterStr( y,StAttr :Byte;St : String);
Var x : Integer ;
Begin
x := ( 80 - Length(St) ) div 2 ;
WriteStr(x,y,StAttr,St);
End;
{-------------------------------------------}
Procedure BoxStr (x,y,BAttr,Lane,StAttr:Byte;St:String );
Begin
Box(x,y,x+Length(St)+3,y+2,BAttr,Lane,ShadeOff);
WriteStr(x+2,y+1,StAttr,St);
End;
{-------------------------------------------}
Procedure SetAttr(x1,y1,x2,y2 , Attr :Byte );
Var
VSeg,VOfs : Word ;
x,y
: Byte ;
Begin
VSeg := VidSeg ;
For y := y1 to y2 do
For x:= x1 to x2 do
Trang 123
Begin
VOfs := Ofset(x,y) ;
Mem[VSeg:VOfs+1]:= Attr ;
End;
End;
{-------------------------------------------}
Procedure FillFrame(x1,y1,x2,y2,Attr:Byte;Ch:Char );
Var y : byte;
Begin
For y := y1 to y2 do
WriteChar(x1,y,Attr,x2-x1+1,Ch);
End;
{-------------------------------------------}
Procedure Clear(x1,y1,x2,y2,Attr:Byte );
Var y : byte;
Begin
For y := y1 to y2 do
WriteChar(x1,y,Attr,x2-x1+1,#32);
End;
Trang 124
{-------------------------------------------}
Procedure Box(x1,y1,x2,y2,Attr,Lane:Byte;Shade:Boolean);
Const Bound : Array[0..4] of String[6]
=(#32#32#32#32#32#32
,#218#196#191#179#217#192,
#201#205#187#186#188#200,#213#205#184#179#190#212,
#214#196#183#186#189#211);
Var
Border : String[6];
y : integer;
Begin
If Lane > 4 then Lane := 0 ;
Border := Bound[Lane];
If Shade then
SetAttr(x1+ShadeX,y1+ShadeY,
x2+ShadeX,y2+ShadeY,ShadeAtt);
WriteStr(x1,y1,Attr,Border[1]+Repl(Border[2],x2-x1-1)+
Border[3]);
For y := y1 + 1 to y2 -1 do
WriteStr(x1,y,Attr,Border[4]+Repl(#32,x2-x1-1)+
Border[4]);
WriteStr(x1,y2,Attr,Border[6]+Repl(Border[2],x2-x1-1)+
Border[5]);
End;
{-------------------------------------------}
Procedure Frame(x1,y1,x2,y2,Attr,Lane:Byte);
Const Bound : Array[0..4] of String[6]
=(#32#32#32#32#32#32
,#218#196#191#179#217#192,
#201#205#187#186#188#200,#213#205#184#179#190#212,
#214#196#183#186#189#211!;
Var
Border : String[6];
y : integer;
Begin
If Lane > 4 then Lane := 0 ;
Border := Bound[Lane];
WriteStr(x1,y1,Attr,Border[1]+Repl(Border[2],x2-x1-1)+ Border[3]);
For y := y1 + 1 to y2 -1 do
Begin
WriteStr(x1,y,Attr,Border[4]);
WriteStr(x2,y,Attr,Border[4]);
End;
WriteStr(x1,y2,Attr,Border[6]+Repl(Border[2],x2-x1-1)+ Border[5]);
End;
{-------------------------------------------}
Procedure FillBox(x1,y1,x2,y2,FrAttr,Lane:Byte;Ch:Char;
Shade:Boolean);
Begin
Box(x1,y1,x2,y2,FrAttr,Lane,Shade);
Trang 125
FillFrame(x1+1,y1+1,x2-1,y2-1,FrAttr,Ch);
End;
{-------------------------------------------}
Procedure StrBox(x1,y1,x2,y2,FrAttr,Lane : Byte ;
St : String; Shade : Boolean);
Var x : Integer ;
Begin
BOX(x1,y1,x2,y2,FrAttr,Lane,Shade);
x := x1 + ((x2-x1-Length(St)-2) div 2);
WriteStr(x,y1,FrAttr,#32+St+#32);
End;
{-------------------------------------------}
Procedure StrLBox(x1,y1,x2,y2,FrAttr,Lane : Byte ;
St : String; Shade : Boolean);
Var x : Integer ;
Begin
BOX(x1,y1,x2,y2,FrAttr,Lane,Shade);
WriteStr(x1+3,y1,FrAttr,#32+St+#32);
End;
{-------------------------------------------}
Procedure StrFillBox(x1,y1,x2,y2,FrAttr,Lane : Byte ;
Ch:Char ; St : String;Shade : Boolean);
Var x : Integer ;
Begin
FILLBOX(x1,y1,x2,y2,FrAttr,Lane,Ch,Shade);
x := x1 + ((x2-x1-Length(St)-2) div 2);
WriteStr(x,y1,FrAttr,#32+St+#32);
End;
{-------------------------------------------}
Procedure DrawStr(SRow,Attr:Byte;St:string);
Type Charfont = Array[1..8] Of Byte;
Var CharTable : Array[0..255] of CharFont
Absolute $F000:$FA6E;
N,Len,SCol,CCol : Byte;
{---------------------------------------}
Procedure DrawChar(Entry:Charfont);
Var X,Y : Byte;
BinSt : String[8];
Begin
For Y := 1 to 8 do
Begin
BinSt := Bin(Entry [Y]);
For x := 1 to Length(BinSt) do
If BinSt[x]= '1' then
WriteStr(CCol+x,SRow+Y,Attr,#176);
End
Trang 126
End;
{------------------------------------------}
BEGIN
If SRow > 17 then SRow := 17;
St := Copy(St,1,10);
Len := Length(St);
SCol := (40 - 4*len) and $00FF;
For N := 1 to Len do
Begin
CCol := SCol + 8*( N - 1) + 1 ;
DrawChar(CharTable[Ord(St[N])]);
End;
End;
{------------------------------------------}
Procedure ScrollUp(x1,y1,x2,y2,Att,N:Byte);
Var y : Byte ;
Begin
For y := y1 to y2-n do
Move(Ptr(VidSeg,Ofset(x1,y+N))^,
Ptr(VidSeg,Ofset(x1,y) )^,2*(x2-x1+1));
Clear(x1,y2-N+1,x2,y2,Att);
End;
{------------------------------------------}
Procedure ScrollDn(x1,y1,x2,y2,Att,N:Byte);
Var y : Byte ;
Begin
For y := y2 Downto y1+n do
Move(Ptr(VidSeg,Ofset(x1,y-N))^,
Ptr(VidSeg,Ofset(x1,y) )^,2*(x2-x1+1));
Clear(x1,y1,x2,y1+N-1,Att);
End;
{------------------------------------------}
Procedure ScrollLf(x1,y1,x2,y2,Att,N:Byte);
Var y : Byte ;
Begin
For y := y1 to y2 do
Move(Ptr(VidSeg,Ofset(x1+N,y))^,
Ptr(VidSeg,Ofset(x1,y))^,2*(x2-x1-N+1));
Clear(x2-N,y1,x2,y2,Att);
End;
{------------------------------------------}
Procedure ScrollRt(x1,y1,x2,q2,Att,N:Byte);
Var y : Byte ;
Begin
For y := y1 to y2 do
Move(Ptr(VidSeg,Ofset(x1,y))^,
Trang 127
Ptr(VidSeg,Ofset(x1+N,y))^,2*(x2-x1-N+1));
Clear(x1,y1,x1+N-1,y2,Att);
End;
{-----------------------------------------}
Procedure ShiftUp(x1,y1,x2,y2,Att:Byte);
Var y : Byte ;
Begin
for y :=y1 to y2 do
Begin
ScrollUp(x1,y1,x2,y2,Att,1);
Delay(ScrollDelay);
end;
End;
{------------------------------------------}
Procedure ShiftDn(x1,y1,x2,y2,Att:Byte);
Var y : Byte ;
Begin
for y :=y1 to y2 do
Begin
ScrollDn(x1,y1,x2,y2,Att,1);
Delay(ScrollDelay);
end;
End;
{------------------------------------------}
Procedure ShiftLf(x1,y1,x2,y2,Att:Byte);
Var x : Byte ;
Begin
for x :=x1 to x2 do
Begin
ScrollLf(x1,y1,x2,y2,Att,1);
Delay(ScrollDelay);
end;
End;
{--------%---------------------------------}
Procedure ShiftRt(x1,y1,x2,y2,Att:Byte);
Var x : Byte ;
Begin
for x :=x1 to x2 do
Begin
ScrollRt(x1,y1,x2,y2,Att,1);
Delay(ScrollDelay);
end;
End3
{------------------------------------------}
Procedure SaveBox(x1,y1,x2,y2:Byte ; Var Bf : ScreenPtr);
Var NBytes,BSeg,BOfs : Word ;
Trang 128
y : Byte ;
Begin
NBytes := 2*(x2-x1+1);
New(Bf);
Bf^.x1 := x1; Bf^.y1:= y1;Bf^.x2 := x2; Bf^.y2:= y2;
Bf^.Cx := WhereX ; Bf^.Cy := WhereY ;
GetMem(Bf^.Buf,NBytes*(y2-y1+1));
BSeg := Seg(Bf^.Buf^);
BOfs := Ofs(Bf^.Buf^);
For y := y1 to y2 do
Begin
Move(Ptr(VidSeg,Ofset(x1,y))^,Ptr(BSeg,BOfs)^,
NBytes);
Inc(BOfs,NBytes);
end;
End;
Trang 129
{------------------------------------------}
Procedure RestoreBox(Var Bf : ScreenPtr);
Var NBytes,BSeg,BOfs : Word ;
y : Byte ;
Begin
With Bf^ do
Begin
NBytes := 2*(x2-x1+1);
BSeg := Seg(Buf^);
BOfs := Ofs(Buf^);
For y := y1 to y2 do
Begin
Move(Ptr(BSeg,BOfs)^,
Ptr(VidSeg,Ofset(x1,y))^,NBytes);
Inc(BOfs,NBytes);
end;
GotoXy(Cx,Cy);
{FreeMem(Buf,NBytes*(y2-y1+1));}
End;
DisPose(Bf);
End;
{------------------------------------------}
Procedure SaveAtt(x1,y1,x2,y2:Byte ; Var Bf : ScreenPtr);
Var NBytes,BSeg,BOfs : Word ;
y : Byte ;
Begin
NBytes := (x2-x1+1);
New(Bf);
Bf^.x1 := x1; Bf^.y1:= y1;Bf^.x2 := x2; Bf^.y2:= y2;
GetMem(Bf^.Buf,NBytes*(y2-y1+1));
BSeg := Seg(Bf^.Buf^);
BOfs := Ofs(Bf^.Buf^);
For y := y1 to y2 do
Begin
Move(Ptr(VidSeg,Ofset(x1,y)+1)^,Ptr(BSeg,BOfs)^,
NBytes);
Inc(BOfs,NBytes);
end;
End;
{------------------------------------------}
Procedure RestoreAtt(Var Bf : ScreenPtr);
Var NBytes,BSeg,BOfs : Word ;
x,y : Byte ;
Begin
With Bf^ do
Begin
NBytes := (x2-x1+1);
BSeg := Seg(Buf^);
BOfs := Ofs(Buf^);
For y := y1 to y2 do
Begin
For x := x1 to x2 do
Move(Ptr(BSeg,BOfs)^,
Ptr(VidSeg,Ofset(x,y)+1)^,1);
Inc(BOfs,NBytes);
end;
End;
End;
{------------------------------------------}
Procedure DeInitBox(Var Bf : ScreenPtr);
Begin
With Bf^ do
FreeMem(Buf,2*(x2-x1+1)*(y2-y1+1));
DisPose(Bf);
End;
{------------------------------------------}
Procedure DeInitAtt(Var Bf : ScreenPtr);
Begin
With Bf^ do
FreeMem(Buf,(x2-x1+1)*(y2-y1+1));
DisPose(Bf);
End;
Trang 130
Move(Ptr(BSeg,BOfs)^,
Trang 131
{------------------------------------------}
Procedure SaveScreen(Var Sc : ScrPtr);
Var Mode : Byte Absolute $0:$0449;
Screen : ScrPtr;
Begin
If Mode = 7 then
Screen := Ptr($B000,$0000)
Else
Screen := Ptr($B800,$0000);
New(Sc);
SC^:=Screen^
End;
{------------------------------------------}
Procedure ReStoreScreen(Var Sc : ScrPtr);
Var Mode : Byte Absolute $0:$0449;
Screen : ScrPtr;
Begin
If Mode = 7 then
Screen := Ptr($B000,$0000)
Else
Screen := Ptr($B800,$0000);
Screen^:=Sc^;
Dispose(Sc);
End;
{------------------------------------------}
Function GetCurSor : Word ;
Var Regs : Registers ;
Begin
Regs.AH := $03;
Regs.BH := 0;
Intr($10,Regs);
GetCursor := Regs.CX ;
End;
{------------------------------------------}
Procedure SetCurSor (Size : Word );
Var Regs : Registers;
Begin
Regs.AH := 1;
Regs.CX := Size;
Intr(16,Regs);
End;
{------------------------------------------}
Procedure CursorOff ;
Begin
SetCursor($2020);
End;
Trang 132
{------------------------------------------}
Procedure SmallCurSor ;
Var Vmode : Byte Absolute $0:$0449;
Begin
If VMode = 7 then
SetCursor($0C0D)
else
SetCursor($0607);
End;
{------------------------------------------}
Procedure BigCurSor ;
Var Vmode : Byte Absolute $0:$0449 ;
Begin
If VMode = 7 then
SetCursor($000D)
else
SetCursor($0007);
End;
{------------------------------------------}
Function EGAInstalled : Boolean ;
{ Xc nhn mn hnh EGA,VGA %-> True }
{
CGA,MCGA -> False }
Var Regs : Registers ;
Begin
Regs.AX := $1200;
Regs.BX := $0010;
Regs.CX := $FFFF;
Intr($10,Regs);
EGAInstalled := Regs.CX <> $FFFF;
End;
{------------------------------------------}
Function PS2 : Boolean ;
{ Xc nhn mn hnh VGA,MCGA --> True }
{
EGA,CGA --> False }
Var Regs : Registers ;
Begin
Regs.AX := $1A00;
Intr($10,Regs);
PS2 := ((Regs.AL and $FF) = $1A) and
((Regs.BL and $FF) in [$07,$08,$0B,$0C]);
End;
{--------------------------------------------------------------}
END.
Trang 133
Trang 134
(0,0,0,0,48,24,12,12,12,12,12,24,48,0,0,0),
(0,0,0,0,0,0,102,60,255,60,102,0,0,0,0,0),
(0,0,0,0,0,0,24,24,126,24,24,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,24,24,24,48,0,0),
(0,0,0,0,0,0,0,0,254,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,24,24,0,0,0),
(0,0,0,0,2,6,12,24,48,96,192,128,0,0,0,0),
(0,0,0,0,124,198,206,222,246,230,198,198,124,0,0,0),
(0,0,0,0,24,56,120,24,24,24,24,24,126,0,0,0),
(0,0,0,0,124,198,6,12,24,48,96,198,254,0,0,0),
(0,0,0,0,124,198,6,6,60,6,6,198,124,0,0,0),
(0,0,0,0,12,28,60,108,204,254,12,12,30,0,0,0),
(0,0,0,0,254,192,192,192,252,6,6,198,124,0,0,0),
(0,0,0,0,60,96,112,192,252,198,198,198,124,0,0,0),
(0,0,0,0,254,198,6,12,24,48,48,48,48,0,0,0),
(0,0,0,0,124,198,198,198,124,198,198,198,124,0,0,0),
(0,0,0,0,124,198,198,198,126,6,6,12,120,0,0,0),
(0,0,0,0,0,24,24,0,0,0,24,24,0,0,0,0),
(0,0,0,0,0,24,24,0,0,0,24,24,48,0,0,0),
(0,0,0,0,6,12,24,48,96,48,24,12,6,0,0,0),
(0,0,0,0,0,0,0,126,0,0,126,0,0,0,0,0),
(0,0,0,0,96,48,24,12,6,12,24,48,96,0,0,0),
(0,0,0,0,124,198,198,12,24,24,0,24,24,0,0,0),
(0,0,0,0,124,198,198,222,222,222,220,192,124,0,0,0),
(0,0,0,0,16,56,108,198,198,254,198,198,198,0,0,0),
(0,0,0,0,252,102,102,102,124,102,102,102,252,0,0,0),
(0,0,0,0,60,102,194,192,192,192,194,102,60,0,0,0),
(0,0,0,0,248,108,102,102,102,102,102,108,248,0,0,0),
(0,0,0,0,254,102,98,104,120,104,98,102,254,0,0,0),
(0,0,0,0,254,102,98,104,120,104,96,96,240,0,0,0),
(0,0,0,0,60,102,194,192,192,222,198,102,58,0,0,0),
(0,0,0,0,198,198,198,198,254,198,198,198,198,0,0,0),
(0,0,0,0,60,24,24,24,24,24,24,24,60,0,0,0),
(0,0,0,0,30,12,12,12,12,12,204,204,120,0,0,0),
(0,0,0,0,230,102,108,108,120,108,108,102,230,0,0,0),
(0,0,0,0,240,96,96,96,96,96,98,102,254,0,0,0),
(0,0,0,0,198,238,254,254,214,198,198,198,198,0,0,0),
(0,0,0,0,198,230,246,254,222,206,198,198,198,0,0,0),
(0,0,0,0,56,108,198,198,198,198,198,108,56,0,0,0),
(0,0,0,0,252,102,102,102,124,96,96,96,240,0,0,0),
(0,0,0,0,124,198,198,198,198,214,222,124,12,14,0,0),
(0,0,0,0,252,102,102,102,124,108,102,102,231,0,0,0),
(0,0,0,0,124,198,198,96,56,12,198,198,124,0,0,0),
(0,0,0,0,126,126,90,24,24,24,24,24,60,0,0,0),
(0,0,0,0,198,198,198,198,198,198,198,198,124,0,0,0),
(0,0,0,0,198,198,198,198,198,198,108,56,16,0,0,0),
Trang 135
(0,0,0,0,198,198,198,198,214,214,254,124,108,0,0,0),
(0,0,0,0,198,198,108,56,56,56,108,198,198,0,0,0),
(0,0,0,0,102,102,102,102,60,24,24,24,60,0,0,0),
(0,0,0,0,254,198,140,24,48,96,194,198,254,0,0,0),
(0,0,0,0,60,48,48,48,48,48,48,48,60,0,0,0),
(0,0,0,0,128,192,224,112,56,28,14,6,2,0,0,0),
(0,0,0,0,60,12,12,12,12,12,12,12,60,0,0,0),
(0,0,16,56,108,198,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,0,255,0,0),
(0,0,48,48,24,0,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,120,12,124,204,204,118,0,0,0),
(0,0,0,0,224,96,96,120,108,102,102,102,124,0,0,0),
(0,0,0,0,0,0,0,124,198,192,192,198,124,0,0,0),
(0,0,0,0,28,12,12,60,108,204,204,204,118,0,0,0),
(0,0,0,0,0,0,0,124,198,254,192,198,124,0,0,0),
(0,0,0,0,56,108,100,96,240,96,96,96,240,0,0,0),
(0,0,0,0,0,0,0,118,204,204,204,124,12,204,120,0),
(0,0,0,0,224,96,96,108,118,102,102,102,230,0,0,0),
(0,0,0,0,24,24,0,56,24,24,24,24,60,0,0,0),
(0,0,0,0,6,6,0,14,6,6,6,6,102,102,60,0),
(0,0,0,0,224,96,96,102,108,120,108,102,230,0,0,0),
(0,0,0,0,56,24,24,24,24,24,24,24,60,0,0,0),
(0,0,0,0,0,0,0,236,254,214,214,214,198,0,0,0),
(0,0,0,0,0,0,0,220,102,102,102,102,102,0,0,0),
(0,0,0,0,0,0,0,124,198,198,198,198,124,0,0,0),
(0,0,0,0,0,0,0,220,102,102,102,124,96,96,240,0),
(0,0,0,0,0,0,0,118,204,204,204,124,12,12,30,0),
(0,0,0,0,0,0,0,220,118,102,96,96,240,0,0,0),
(0,0,0,0,0,0,0,124,198,112,28,198,124,0,0,0),
(0,0,0,0,16,48,48,252,48,48,48,54,28,0,0,0),
(0,0,0,0,0,0,0,204,204,204,204,204,118,0,0,0),
(0,0,0,0,0,0,0,102,102,102,102,60,24,0,0,0),
(0,0,0,0,0,0,0,198,198,214,214,254,108,0,0,0),
(0,0,0,0,0,0,0,198,108,56,56,108,198,0,0,0),
(0,0,0,0,0,0,0,198,198,198,198,126,6,12,248,0),
(0,0,0,0,0,0,0,254,204,24,48,102,254,0,0,0),
(0,0,0,0,14,24,24,24,112,24,24,24,14,0,0,0),
(0,0,0,0,24,24,24,24,0,24,24,24,24,0,0,0),
(0,0,0,0,112,24,24,24,14,24,24,24,112,0,0,0),
(0,0,0,0,118,220,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,16,56,108,198,198,254,0,0,0,0),
(0,0,0,0,0,0,124,198,192,192,198,124,24,12,248,0),
(0,0,0,0,204,204,0,204,204,204,204,204,118,0,0,0),
(0,0,0,0,108,108,0,120,12,124,204,204,118,0,0,0),
(0,0,48,72,72,48,0,120,12,124,204,204,118,0,0,0),
(0,0,0,0,108,108,0,124,198,254,192,198,124,0,0,0),
Trang 136
(0,0,0,0,108,108,0,56,24,24,24,24,60,0,0,0),
(0,0,0,24,60,102,0,56,24,24,24,24,60,0,0,0),
(0,0,0,0,108,222,26,26,126,216,216,218,108,0,0,0),
(0,0,0,0,204,204,0,124,198,198,198,198,124,0,0,0),
(0,0,0,48,120,204,0,204,204,204,204,204,118,0,0,0),
(0,0,0,0,198,198,0,198,198,198,198,126,6,12,120,0),
(0,0,24,24,24,124,198,192,192,198,124,24,24,24,0,0),
(0,0,0,56,108,100,96,240,96,96,102,230,188,0,0,0),
(0,0,0,102,102,102,60,24,126,24,60,24,24,0,0,0),
(0,0,0,252,102,102,124,98,102,111,102,102,243,0,0,0),
(0,0,0,0,118,220,0,220,102,102,102,102,102,0,0,0),
(0,0,0,0,0,0,54,108,216,108,54,0,0,0,0,0),
(0,0,0,0,0,0,216,108,54,108,216,0,0,0,0,0),
(0,0,0,0,24,24,24,126,24,24,24,0,126,126,0,0),
(0,0,0,0,96,48,24,12,24,48,96,0,124,124,0,0),
(0,0,0,0,12,24,48,96,48,24,12,0,124,124,0,0),
(24,24,24,60,60,126,126,255,24,24,24,24,24,24,24,24),
(24,24,24,24,24,24,24,24,255,126,126,60,60,24,24,24),
(0,0,0,0,0,64,112,124,255,124,112,64,0,0,0,0),
(0,0,0,0,0,2,14,62,255,62,14,2,0,0,0,0),
(0,0,108,56,0,56,108,198,198,254,198,198,198,0,0,0),
(0,16,56,108,0,56,108,198,198,254,198,198,198,0,0,0),
(0,16,56,68,254,102,98,104,120,104,98,102,254,0,0,0),
(0,16,56,68,56,108,198,198,198,198,198,108,56,0,0,0),
(0,0,3,1,58,108,198,198,198,198,198,108,56,0,0,0),
(0,0,3,1,199,198,198,198,198,198,198,198,124,0,0,0),
(0,0,0,0,248,108,102,102,254,102,102,108,248,0,0,0),
(0,0,0,0,108,56,0,120,12,124,204,204,118,0,0,0),
(0,0,0,0,56,108,0,120,12,124,204,204,118,0,0,0),
(0,0,0,0,56,108,0,124,198,254,192,198,124,0,0,0),
(0,0,0,0,56,108,0,124,198,198,198,198,124,0,0,0),
(0,0,0,0,0,3,1,126,198,198,198,198,124,0,0,0),
(0,0,0,0,0,3,1,206,204,204,204,204,118,0,0,0),
(0,0,0,0,12,62,12,60,108,204,204,204,118,0,0,0),
(0,0,192,96,48,0,0,120,12,124,204,204,118,0,0,0),
(0,0,56,8,16,0,0,120,12,124,204,204,118,0,0,0),
(0,0,0,118,220,0,0,120,12,124,204,204,118,0,0,0),
(0,0,6,12,24,0,0,120,12,124,204,204,118,0,0,0),
(0,0,0,0,0,0,0,120,12,124,204,204,118,0,48,48),
(0,0,96,16,76,56,0,120,12,124,204,204,118,0,0,0),
(0,0,7,1,110,56,0,120,12,124,204,204,118,0,0,0),
(0,0,118,220,108,56,0,120,12,124,204,204,118,0,0,0),
(0,0,12,16,108,56,0,120,12,124,204,204,118,0,0,0),
(68,17,68,17,68,17,68,17,68,17,68,17,68,17,68,17),
(170,85,170,85,170,85,170,85,170,85,170,85,170,85,170,85),
(119,221,119,221,119,221,119,221,119,221,119,221,119,221,119,221),
Trang 137
(24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24),
(24,24,24,24,24,24,24,24,248,24,24,24,24,24,24,24),
(0,0,0,0,108,56,0,120,12,124,204,204,118,0,48,48),
(0,0,192,96,56,108,0,120,12,124,204,204,118,0,0,0),
(0,0,7,1,58,108,0,120,12,124,204,204,118,0,0,0),
(0,0,118,220,56,108,0,120,12,124,204,204,118,0,0,0),
(54,54,54,54,54,54,54,246,6,246,54,54,54,54,54,54),
(54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54),
(0,0,0,0,0,0,0,254,6,246,54,54,54,54,54,54),
(54,54,54,54,54,54,54,246,6,254,0,0,0,0,0,0),
(0,0,6,12,56,108,0,120,12,124,204,204,118,0,0,0),
(0,0,0,0,56,108,0,120,12,124,204,204,118,0,48,48),
(0,0,0,0,0,0,0,0,248,24,24,24,24,24,24,24),
(24,24,24,24,24,24,24,24,31,0,0,0,0,0,0,0),
(24,24,24,24,24,24,24,24,255,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,255,24,24,24,24,24,24,24),
(24,24,24,24,24,24,24,24,31,24,24,24,24,24,24,24),
(0,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0),
(24,24,24,24,24,24,24,24,255,24,24,24,24,24,24,24),
(0,0,192,96,48,0,0,124,198,254,192,198,124,0,0,0),
(0,0,56,8,16,0,0,124,198,254,192,198,124,0,0,0),
(54,54,54,54,54,54,54,55,48,63,0,0,0,0,0,0),
(0,0,0,0,0,0,0,63,48,55,54,54,54,54,54,54),
(54,54,54,54,54,54,54,247,0,255,0,0,0,0,0,0),
(0,0,0,0,0,0,0,255,0,247,54,54,54,54,54,54),
(54,54,54,54,54,54,54,55,48,55,54,54,54,54,54,54),
(0,0,0,0,0,0,0,255,0,255,0,0,0,0,0,0),
(54,54,54,54,54,54,54,247,0,247,54,54,54,54,54,54),
(0,0,0,118,220,0,0,124,198,254,192,198,124,0,0,0),
(0,0,6,12,24,0,0,124,198,254,192,198,124,0,0,0),
(0,0,0,0,0,0,0,124,198,254,192,198,124,0,24,24),
(0,0,192,96,56,108,0,124,198,254,192,198,124,0,0,0),
(0,0,7,1,58,108,0,124,198,254,192,198,124,0,0,0),
(0,0,118,220,56,108,0,124,198,254,192,198,124,0,0,0),
(0,0,6,12,56,108,0,124,198,254,192,198,124,0,0,0),
(0,0,0,0,56,108,0,124,198,254,192,198,124,0,24,24),
(0,0,192,96,48,0,0,56,24,24,24,24,60,0,0,0),
(0,0,56,8,16,0,0,56,24,24,24,24,60,0,0,0),
(24,24,24,24,24,24,24,24,248,0,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,31,24,24,24,24,24,24,24),
(255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255),
(0,0,0,118,220,0,0,56,24,24,24,24,60,0,0,0),
(0,0,6,12,24,0,0,56,24,24,24,24,60,0,0,0),
(0,0,0,0,24,24,0,56,24,24,24,24,60,0,24,24),
(0,0,192,96$48,0,0,124,198,198,198,198,124,0,0,0),
(0,0,0,0,62,96,192,192,254,192,192,96,62,0,0,0),
Trang 138
(0,0,56,8,16,0,0,124,198,198,198,198,124,0,0,0),
(0,0,118,220,0,0,0,124,198,198,198,198,124,0,0,0),
(0,0,6,12,24,0,0,124,198,198,198,198,124,0,0,0),
(0,0,0,0,0,0,0,124$198,198,198,198,124,0,24,24),
(0,0,192,96,56,108,0,124,198,198,198,198,124,0,0,0),
(0,0,7,1,58,108,0,124,198,198,198,198,124,0,0,0),
(0,0,118,220,56,108,0,124,198,198,198,198,124,0,0,0),
(0,0,6,12,56,108,0,124,198,198,198,198,124,0,0,0),
(0,0,0,0,56,108,0,124,198,198,198,198,124,0,24,24),
(0,0,192,96,48,3,1,126,198,198,198,198,124,0,0,0),
(0,0,56,8,16,3,1,126,198,198,198,198,124,0,0,0),
(0,0,118,220,0,3,1,126,198,198,198,198,124,0,0,0),
(0,0,6,12,24,3,1,126,198,198,198,198,124,0,0,0),
(0,0,0,0,0,3,1,126,198,198,198,198,124,0,24,24),
(0,0,192,96,48,0,0,204,204,204,204,204,118,0,0,0),
(0,0,0,0,0,254,0,0,254,0,0,254,0,0,0,0),
(0,0,56,8,16,0,0,204,204,204,204,204,118,0,0,0),
(0,0,118,220,0,0,0,204,204,204,204,204,118,0,0,0),
(0,0,6,12,24,0,0,204,204,204,204,204,118,0,0,0),
(0,0,0,0,0,0,0,204,204,204,204,204,118,0,48,48),
(0,0,192,96,48,3,1,206,204,204,204,204,118,0,0,0),
(0,0,56,8,16,3,1,206,204,204,204,204,118,0,0,0),
(0,0,118,220,0,3,1,206,204,204,204,204,118,0,0,0),
(0,0,6,12,24,3,1,206,204,204,204,204,118,0,0,0),
(0,0,0,0,0,3,1,206,204,204,204,204,118,0,48,48),
(0,0,192,96,48,0,0,198,198,198,198,126,6,12,248,0),
(0,0,56,8,16,0,0,198,198,198,198,126,6,12,248,0),
(0,0,0,118,220,0,0,198,198,198,198,126,6,12,248,0),
(0,0,6,12,24,0,0,198,198,198,198,126,6,12,248,0),
(0,0,0,0,0,0,0,198,198,198,198,126,4,12,251,3),
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0));
Th vin ny khi kch hot s chim mt phn b nh v np Font ting
Vit vo b Font chun ca my. C ngha l ta c th s dng, hin th ting
Vit trong chng trnh chnh.