Tải bản đầy đủ (.doc) (32 trang)

dùng máy vi tính thiết kế máy chấm thi trắc nghiệm

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (199.98 KB, 32 trang )

TRƯỜNG ĐẠI HỌC BÁCH KHOA TP. HỒ CHÍ MINH
KHOA CÔNG NGHỆ THÔNG TIN
BỘ MÔN PHẦN CỨNG
________♣________
LUẬN VĂN TỐT NGHIỆP

ĐỀ TÀI :
DÙNG MÁY VI TÍNH THIẾT KẾ MÁY
CHẤM THI TRẮC NGHIỆM
GVHD : PHAN ĐÌNH MÃI
SVTH : TÔ OAI HÙNG
TRẦN NGỌC TRÁC
LỚP : KỸ SƯ II
- 1997 -
LỜI CẢM TA
Ï

Xin chân thành cảm ơn thầy
Phan Đình Mãi đã tận tình
hướng dẫn và giúp đỡ chúng
em để hoàn thành bài thực
tập tốt nghiệp này .

Xin chân thành cảm ơn q
thầy cô trong khoa Công Nghệ
Thông Tin đã tận tình dạy dỗ
chúng em .
2
NỘI DUNG

l TÌM HIỂU NGUYÊN LÝ


l ĐƯA RA THIẾT KẾÁ MÔ HÌNH TỔNG QUÁT
l THIẾT KẾ MẠCH CHI TIẾT
l THI CÔNG HOÀN CHỈNH MẠCH ĐIỆN & CƠ
l VIẾT CHƯƠNG TRÌNH CHẤM THI
3
CHƯƠNG I :
MỤC ĐÍCH THIẾT KẾ
MÁY CHẤM THI TRẮC NGHIỆM
I . MỤC ĐÍCH :
Hiện nay, do số lượng sinh viên, học sinh của các trường đại học, cao đẳng, trung học, . . .
mỗi năm một tăng . Việc chấm bài thi vào những kỳ tuyển sinh, thi học kỳ, thi lại, . . . là một công việc
nặng nhọc cho giáo viên . Vì phải đòi hỏi kết quả của việc chấm thi phải đáp ứng về độ chính xác và về
thời gian .
Như vậy, với các yếu tố :
- Số lượng bài thi nhiều .
- Thời gian chấm thi không kéo dài .
- Kết quả chấm thi cần chính xác .
từ đây, ta thấy rằng :
. Nếu hình thức là thi viết, thì chắc rằng khó mà đạt được cả hai yêu cầu song song là thời
gian và sự chính xác .
. Nếu hình thức thi là trắc nghiệm, thì với cách chấm thủ công trước đây cũng phải vất vã về
thời gian .
. Vã lại hiện nay do sự tiến triển của máy vi tính thì hầu hết các cơ quan, trường học, xí
nghiệp, . . . đều sử dụng máy vi tính trong công việc quản lý, tính toán, thiết kế, . . . Hầu hết các trường
học, người ta đều dùng máy vi tính để quản lý hồ sơ, điểm, học bạ, . . . của sinh viên . Do vậy, với hai
hình thức chấm thi ở trên thì công việc đòi hỏi là phải nhập điểm của từng thí sinh vào máy . Công đoạn
nầy mất thời gian và có nhiều sai sót trong quá trình nhập điểm .
Như vậy, nếu ta thiết kế một máy chấm thi trắc nghiệm sao cho kết quả chấm thi đó tự ghi vào dữ
liệu điểm của từng thí sinh tương ứng thì thật là thú vò - đây cũng là mục đích của việc thiết kế . Đối với
mạch thiết kế nầy, giáo viên chấm thi có thể ghi điểm trên bài làm của thí sinh để lưu trữ nhờ vào dữ

liệu điểm trên máy vi tính hoặc sự thể hiện của LED 7 đoạn trên máy chấm thi .
So với việc chấm thi trước đây thì máy chấm thi có những ưu điểm sau :
- Nhanh .
- Kết quả điểm được ghi chính xác vào vi tính .
- Rất ít tốn công .
Tuy nhiên, để đạt được các điều trên, thí sinh phải làm bài trên một mẫu giấy nhất đònh và phải
tuân theo một số qui tắc khi làm bài . Xét cho cùng, những yêu cầu nầy không có gì phiền toái và khó
thực hiện mà chúng ta sẽ thấy dưới đây .
II . NHỮNG YÊU CẦU VÀ LƯU Ý :
Sau đây là những yêu cầu đối với thí sinh :
1. Phải đánh dấu câu trả lời trên mẫu được qui đònh sẵn như trang sau :
4
Hoù vaứ teõn :
Soỏ kyự danh :
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
l
O O O O O O O O O O O O O O O O O O O O
l

l
O O O O O O O O O O O O O O O O O O O O
l

l
O O O O O O O O O O O O O O O O O O O O
l
a b c d a b c d a b c d a b c d
l
1
O O O O

26
O O O O
51
O O O O
76
O O O O
l
l
2
O O O O
27
O O O O
52
O O O O
77
O O O O
l
l
3
O O O O
28
O O O O
53
O O O O
78
O O O O
l
l
4
O O O O

29
O O O O
54
O O O O
79
O O O O
l
l
5
O O O O
30
O O O O
55
O O O O
80
O O O O
l
l
6
O O O O
31
O O O O
56
O O O O
81
O O O O
l
l
7
O O O O

32
O O O O
57
O O O O
82
O O O O
l
l
8
O O O O
33
O O O O
58
O O O O
83
O O O O
l
l
9
O O O O
34
O O O O
59
O O O O
84
O O O O
l
l
10
O O O O

35
O O O O
60
O O O O
85
O O O O
l
l
11
O O O O
36
O O O O
61
O O O O
86
O O O O
l
l
12
O O O O
37
O O O O
62
O O O O
87
O O O O
l
l
13
O O O O

38
O O O O
63
O O O O
88
O O O O
l
l
14
O O O O
39
O O O O
64
O O O O
89
O O O O
l
l
15
O O O O
40
O O O O
65
O O O O
90
O O O O
l
l
16
O O O O

41
O O O O
66
O O O O
91
O O O O
l
l
17
O O O O
42
O O O O
67
O O O O
92
O O O O
l
l
18
O O O O
43
O O O O
68
O O O O
93
O O O O
l
l
19
O O O O

44
O O O O
69
O O O O
94
O O O O
l
l
20
O O O O
45
O O O O
70
O O O O
95
O O O O
l
l
21
O O O O
46
O O O O
71
O O O O
96
O O O O
l
l
22
O O O O

47
O O O O
72
O O O O
97
O O O O
l
l
23
O O O O
48
O O O O
73
O O O O
98
O O O O
l
l
24
O O O O
49
O O O O
74
O O O O
99
O O O O
l
l
25
O O O O

50
O O O O
75
O O O O
100
O O O O
l
5
2. Điền họ và tên trên mẫu, sau đó ghi mã thí sinh trên 3 hàng đầu tiên (gồm sáu
dãy ô) của mẫu . Với 6 dãy ô nầy cho phép phân biệt được 1.000.000 sinh viên . Nghóa
là dữ liệu của một trường có thể là 1 triệu sinh viên đang thi . Cách ghi mã thí sinh là
chỉ việc tô đen những ô có số tương ứng phía trên mỗi dãy .
Ví dụ : Thí sinh có tên là Nguyễn Văn A, mã số là 012345 . Có thể ghi như sau :
Họ và tên : Nguyễn Văn A
Số ký danh :
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
Hoặc có thể ghi :
Họ và tên : Nguyễn Văn A
Số ký danh :
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
Như vậy, trong mã thí sinh số 0 có thể tô đen hay bỏ trống, và việc tô số
theo thứ tự từ trên xuống và từ dãy ô phía trái sang phía phải, mỗi dãy chỉ ghi 1 số mà
thôi - tương ứng với các ký số trong mã thí sinh từ trái sang phải . Ta có thể mô tả các vò
trí số trong sáu dãy ô như sau :

hàng trăm ngàn

hàng chục ngàn

hàng ngàn hàng trăm


hàng chục hàng đơn vò
Sau khi đã ghi mã thí sinh xong, thí sinh có thể chọn câu trả lời là a, b, c hay d ứng
với câu có thứ tự đã ghi bên cạnh .
Ví dụ : Với câu số 1, nếu câu trả lời được chọn là b thì ta làm như sau :
a b c d
1
6
3. Thí sinh khi thi phải đem theo bút chì loại 2B, tẩy và chuốt chì .
4. Khi tô mã thí sinh hoặc chọn câu trả lời nên lưu ý các kiểu tô như sau :
Đúng Sai Sai Sai Sai
Các hình thức sai :
- : Tô ngoài vòng tròn của ô .
- : Không nên tô chọn kiểu nầy .
- : Khi bỏ tô chọn lúc trước không nên đánh tréo mà phải tẩy .
- : Khi tô không nên chừa vùng trắng phía trong ô .
Việc tô đậm ô được chọn nhằm đảm bảo cho LED hồng ngoại hoạt động tốt, tránh
trường hợp sai khi mạch hoạt động .
5 . Khi câu trả lời bò bỏ trống hoặc có từ hai đánh dấu chọn trở lên ( ) sẽ
không được tính điểm .
Khi một câu được chọn, nếu đúng với đáp án thì điểm của thí sinh tăng lên 1 . Như
vậy với số lượng là 100 câu, điểm tối đa của thí sinh là 100 điểm . Việc qui đổi ra thang
điểm 10 hay những hình thức cho khác cũng dễ dàng thực hiện bằng phần mềm .
7
CHƯƠNG II
SƠ LƯC VỀ LED HỒNG NGOẠI
LED hồng ngoại còn được gọi là nguồn phát sóng hồng ngoại (Infrared
emitters) . Vật liệu dùng để chế tạo nó là GaAs . LED hồng ngoại có hiệu suất lượng tử
cao hơn so với LED phát ra ánh sáng thấy được . Mặt dưới của diốt được chế tạo sao
cho như một gương để phản chiếu tia hồng ngoại phát ra từ lớp chuyển tiếp pn .

p
n-GaAs Si
n-GaAs
Trong phổ tần số của sóng điện từ, sóng hồng ngoại chiếm một khoảng rộng nhất .
Nhưng cho đến nay nó chưa được ứng dụng rộng rãi như các sóng khác có tần số thấp
hơn . Từ ánh sáng ta đến hồng ngoại gần, hồng ngoại trung bình, hồng ngoại xa và hồng
ngoại rất xa .
Sóng hồng ngoại rất xa Sóng HN xa TB Gần
1mm 500 200 100 50 20 10 5 2 1µm
Từ 770 nm . . . 1 mm

I . ÁNH SÁNG MẶT TRỜI VÀ TIA HỒNG NGOẠI :
Tia nằng ấm, bao gồm chủ yếu là ánh sáng thấy được, thành phần hồng
ngoại gần như rất ít, hồng ngoại bò bầu khí quyễn hấp thu phần lớn . Sóng hồng ngoại
có độ dài (1.2µm; 1.6µm; 2.2µm và 4µm) xuyên suốt bầu khí quyễn đến mặt đất, trong
khi các độ dài sóng khác , sóng hồng ngoại bò hấp thu gần như hoàn toàn .
II . NGUỒN PHÁT SÓNG HỒNG NGOẠI :
Hồng ngoại gần được ứng dụng rộng rãi trong công nghệ thông tin hiện đại,
trong sự tự động hoá trong công nghiệp . Các nguồn sóng nhân tạo thường chứa nhiều
sóng hồng ngoại . Sóng hồng ngoại cũng có những đặc tính quang học giống như ánh
sáng ( Sự hội tụ qua thấu kính, tiêu cự . . .) . Ánh sáng và sóng hồng ngoại khác nhau
rất rõ qua sự xuyên suốt vật chất . Có những vật mắt ta thấy (phản chiếu ánh sáng thấy
được) nhưng với tia hồng ngoại nó là những vật phản chiếu rất ít (hay không phản
chiếu) . Có những vật ta thấy nó có màu xám đục nhưng với ánh sáng hồng ngoại nó trở
nên trong suốt . Điều nầy giải thích tại sao LED hồng ngoại có hiệu suất cao hơn so với
LED phát ra ánh sáng thấy được . Vì rằng vật liệu bán dẫn “trong suốt” đối với sóng
hồng ngoại, tia hồng ngoại không bò yếu đi khi nó phải vượt qua các lớp bán dẫn để đi
ra ngoài .
Đời sống của LED hồng ngoại dài đến 100.000 giời (hơn 11 năm) . LED
hồng ngoại không phát sáng nên nó cho lợi điểm trong các thiết bò kiểm soát vì không

gây sự chú ý . Trong mạch thiết kế, chúng ta dùng LED hồng ngoại nhằm tránh nhiễu
dẫu có ánh sáng mặt trời hay ánh sáng của đèn lọt qua máy chấm thi .
8
III . ĐẶC TRƯNG KỸ THUẬT CỦA MỘT SỐ LED HỒNG NGOẠI :
9
IV . LINH KIỆN THU SÓNG HỒNG NGOẠI :
Người ta có thể dùng quang điện trở, phototransistor, photodiôt để thu sóng
hồng ngoại gần . Để thu sóng hồng ngoại trung bình và xa phát ra từ cơ thể con người,
vật nóng người ta dùng loại detector với vật liệu Lithiumtitanat hay tấm chất dẽo PVDF
(polyvinyl - Lidendifluorid) . Cơ thể con người phát ra tia hồng ngoại với độ dài sóng từ
8 . . . 10 µm .
1 . PHOTODIÔT :
Tùy theo chức năng và cấu trúc, có thể phân photodiot ra làm nhiều loại :
1. Diôt quang pn .
2. Diôt quang pin .
3. Diôt quang loại Schockley .
Photodiôt có các đặc tính :
- Rất tuyến tính .
- Ít nhiễu .
- Dải tần số rộng .
- Nhẹ và có sức bền cơ học cao .
- Có đời sống dài .
2. MỘT SỐ PHOTODIỐT THÔNG DỤNG :
10
CHƯƠNG III
CƠ CHẾ HOẠT ĐỘNG CỦA MẠCH
I. SƠ ĐỒ KHỐI :
1. Bộ phận đèn LED hồng ngoại (1) :
Bộ phận đèn LED hồng ngoại sẽ thay đổi mức điện áp ở những ô
có đánh dấu đen hoặc không có của từng hàng trên tờ giấy thi . Mức điện áp thay đổi nầy

được truyền về bộ phận Chỉnh xung thành tín hiệu số (2) . Tín hiệu truyền về (2) có 2
loại là dữ liệu và mã điều khiển .
- Dữ liệu : Bao gồm mã số thí sinh dự thi và nội dung bài thi .
- Mã điều khiển : Bao gồm mã kiểm tra đầu hàng và cuối hàng, mã phân
biệt hàng nào là mã số thí sinh hàng nào là nội dung bài làm, và mã kết thúc bài thi .
Giấy thi
LED hồng
ngoại(1)
Chỉnh
Dữ liệu xung Tín hiệu
thành dữ liệu
tín Computer
Mã đkhiển hiệu (4)
số Tín hiệu
(2) điều khiển
Tín
hiệu Điều
đkhiển khiển

Kiểm soát
- Loa và
- Mô tơ điều khiển
- Đèn (3) Đòa chỉ
11
2. Bộ phận chỉnh xung thành tín hiệu số (2) :
Nhận tín hiệu từ LED hồng ngoại chỉnh dạng thành tín hiệu số. Sau đó
truyền một số tính hiệu điều khiển như: tín hiệu kiểm tra đầu hàng và cuối hàng, tính
hiệu phân biệt mã số thí sinh về bộ phận Kiểm soát và điều khiển (3) . Còn tín hiệu kết
thúc bài thi, tín hiệu dữ liệu được đưa vào Máy vi tính (4) để xử lý .
3. Bộ phận kiểm soát và điều khiển (3) :

Bộ phận nầy sẽ báo về loa, mô tơ và đèn báo nếu giấy thi bò lệch hàng
(xéo), khi đó dữ liệu sẽ không đựơc đưa về máy tính . Hoặc chấp nhận nếu trường hợp
ngược lại .
4 . Máy vi tính (4) :
Nhận tín hiệu dữ liệu và một số tín hiệu điều khiển của (2) kiểm tra và xử
lý . Sau đó xuất ra tín hiệu điều khiển về (3) tại đòa chỉ xác đònh để (3) thực hiện các chức
năng của nó .
II . SƠ ĐỒ TỔNG QUÁT VÀ HOẠT ĐỘNG CỦA MẠCH :
1. Sơ đồ tổng quát :
12
2. Hoạt động của mạch : (Xem sơ đồ tổng quát )
Bài thi được đưa vào máy, ô có tô đen cho mạch mức 1, ngược lại
là mức 0 . Nếu mép giấy đưa vào máy chưa nằm ngang sẽ làm cho cổng AND
1 có mức ra 0, khi đó đèn ERROR sẽ sáng (có mức 1 nhờ cổng NOT 1 ) và
làm IC 555 dao động ( với chu kỳ T =
0 693 1010 8200 2 15000
6
. * . * ( ( * ))

+
=
0.265 ≈ 1/4 giây) phát tín hiệu ra loa . Như vậy, khi không có giấy hoặc đưa
giấy vào chưa cân bằng hai mép thì đèn ERROR sáng và loa phát tiếng kêu .
Trong trường hợp ngược lại, hai mép giấy đã thẳng hàng thì cổng AND 1
có mức ra là 1 khi đó đèn READY sáng . Điều nầy sẽ làm cho cổng AND 2
có một đường vào với mức là 1, như vậy nếu đường vào còn lại có mức là 1 nữa
thì sẽ làm cho mô tơ quay (để cuộn giấy lên) nhờ cổng OR 1 . Ta xét cổng vào
còn lại nầy : cổng nầy được nối với mã đầu và cuối hàng qua cổng ĐẢO 2
, nếu mã đầu hàng và cuối hàng thẳng hàng thì cổng AND 3 có mức ra là 1 .
Trong trường hợp ngược lại, nghóa là khi mã đầu hàng và cuôí hàng không

thẳng hàng hoặc khi LED hồng ngoại ở bất kỳ vò trí nào trên các vùng trống
giữa các hàng với nhau sẽ làm cho cổng AND 3 có mức ra là 0, lúc đó
NOT 2 có mức ra là 1 - đây cũng là mức của cổng vào còn lại nầy . Như vậy
mức ra của cổng AND 2 nầy là 1 sẽ làm cho mô tơ quay đẩy giấy lên . Vậy, sau
khi đưa giấy vào ngay ngắn, thì mô tơ sẽ tự động đẩy giấy lên , và nó sẽ dừng
khi gặp phải bất kỳ dấu đầu hàng và cuối hàng đầu tiên . ( lúc đó cổng VÀ 2
2 có mức ra là 0 và hẳn nhiên là ta phải dùng lệnh xuất OUT PC
6
, 0 trong
chương trình để làm cho mức ra của cổng HOẶC 1 chỉ phụ thuộc vào mức ra
của cổng VÀ 2 mà thôi) .
Tóm lại : Sau khi đưa giấy ngay ngắn thì mô tơ tự động đẩy giấy lên
và dừng lại khi gặp dấu đầu và cuối hàng đầu tiên để CPU đọc dữ liệu .
Trong mạch, ta dùng IC 8255 để giao tiếp với CPU, nó được lập trình ở
MODE 0 với cổng A,B và C thấp là nhập và C cao là xuất . CPU sẽ tạo một
vòng lặp kiểm tra xem nếu PC
0
có mức là 1 (ngay dấu đầu và cuối hàng) thì sẽ
lấy dữ liệu từ cổng A và B . Nhưng để phân biệt được dữ liệu nào là mã thí
sinh , dữ liệu nào là nội dung bài thi ta chỉ cần thêm một dấu hiệu - tạm gọi là
“dấu mã thí sinh” ở đầu những hàng dàng riêng cho việc ghi mã thí sinh (có 3
hàng) . Khi gặp dấu mã thí sinh thì cổng AND 4 có mức ra là 1 sẽ điều khiển
hai IC 74245 làm cho IC 74245(1) đưa dữ liệu từ đường ra của hai IC 74147
vào CPU và vô hiệu hóa IC 74245(2) .
Khi không còn dấu hiệu mã thí sinh nữa (từ hàng thứ 4 trở đi) thì dữ liệu
chỉ qua IC 74245(2) và đi vào CPU mà thôi .
Sau mỗi lần đọc dữ liệu từ cổng A và B của IC 8255, CPU sẽ xuất ra PC
6
mức 1 để mô tơ đẩy giấy hoạt động . Và nó sẽ kiểm tra xem vò trí của LED
hồng ngoại có lệch khỏi dấu đầu và cuối hàng chưa thông qua PC

0
. Nếu PC
0
=
0 thì CPU sẽ xuất mức 0 cho PC
6
. Vì rằng nếu không xuất lại mức 0 cho PC
6
thì
cổng HOẶC 1 sẽ luôn luôn có mức ra là một sau khi CPU đọc dữ liệu lần đầu
tiên, điều đó sẽ làm cho mô tơ quay mãi mà nó sẽ không dừng lại dẫu có gặp
dấu đầu và cuối hàng .
Tóm lại : Ở giai đoạn nầy là sự dừng lại của mô tơ khi gặp dấu đầu và cuối hàng
để đọc dữ liệu, sau đó đẩy giấy lên hàng kế . Quá trình cứ diễn ra như thế cho đến khi
gặp dấu kết thúc bài thi .
13
Dấu kết thúc bài thi sẽ làm cho cổng VÀ 5 có mức ra là 1 đi vào PC
1
, vậy
nếu PC
1
= 1 thì kết quả điểm của bài thi đó sẽ được ghi vào mẫu tin hiện thời từ bộ nhớ .
Khi đó CPU sẽ bắt đầu cho vòng lặp mới .
Trong quá trình đọc dữ liệu, nếu có câu nào đó của thí sinh đúng với đáp án thì
CPU sẽ kích cho IC 7490 một xung âm qua cổng PC
7
để làm tăng giá trò điểm trên mặt
đèn LED 7 đoạn . Giáo viên chấm thi có thể không cần nhìn trên màn hình máy vi tính để
ghi điểm lên bài thi mà chỉ cần nhìn trên các LED nầy . Với mỗi lần gặp dấu mã thí sinh
của bài mới thì giá trò của các IC 7490 được thiết lặp bằng 0 .

3 . Phát thảo chương trình cho CPU :
a) Chương trình chấm diểm :
- Đầu vòng lặp .
- Xuất PC
6
mức 0 .
- Nếu PC
0
=1 đọc từ cổng A và B của IC 8255 .
- Mỗi khi đọc xong 1 hàng (2 byte) xuất ra PC
6
mức 1 để kích mô tơ quay
và xét xem PC
0
có bằng 0 chưa . Nếu PC
0
= 0 (lệch khỏi mã đầu hàng và cuối hàng) thì
xuất lại PC
6
mức 0 để giao điều khiền cho mạch của máy .
- Nếu bộ đệm đủ 6 byte đầu tiên (mã thí sinh) thì xử lý và truy tìm mã
trong cơ sở dữ liệu . Nếu không có báo lỗi lên màn hình, nếu có nhảy đến mẫu tin đó .
- Từ byte thứ 7 trở đi là nội dung bài làm, mỗi hàng (2 byte) có 4 câu, nếu
câu trả lời đúng với đáp án thì kích xung cho PC
7
và tăng 1 vào biến điểm trong bộ đệm .
- Nếu PC
1
= 1 thì ghi trò của biến điểm vào mẫu tin hiện thời và xuất PC
6

lên mức 1 để đẩy mô tơ và kết thúc một bài thi.
- Trở lại đầu vòng lặp .
b) Chương trình đọc đáp án :
- Xuất PC
6
mức 0 .
- Khởi tạo biến đếm = 0 .
- Đầu vòng lặp (để bỏ qua phần mã thí sinh - không đọc).
- Đếm >=3 chưa ? Nếu thoả thì nhảy đến READATA, nếu không thoả thì
làm các lệnh kế .
- Xét xem PC
0
= 1 chưa, nếu PC
0
= 1 (có mã đầu hàng và cuối hàng) xuất
PC
6
mức 1 để kích mô tơ quay.
- Xét PC
0
= 0 chưa, nếu PC
0
= 0 thì xuất PC
6
mức 0 .
- Đếm = đếm +1 .
- Cuối vòng lặp
- READATA : Đọc dữ liệu từ cổng A và B của IC 8255 mỗi khi có PC
0
= 1 .

Tương tự như phần chấm điểm nhưng không truy tìm câu nào đúng hay sai mà chỉ đọc
vào khi đũ số byte cần thiết (hay PC
1
= 1 - mã cho biết cuối giấy) sau đó ghi lên thành tập
tin trên điã .
Phần chương trình nầy sẽ được viết cụ thể ở các trang sau .
III . SƠ ĐỒ CHI TIẾT :
14
15
PHAÀN CHÖÔNG TRÌNH CHINH
Set Talk Off
Set Default To C:\Test
Set Safe Off
Close All
Clear All
!Lt8255
Do While .T.
Clear
@0,0 To 24,79 Double Color Gr+
Tua='CHUONG TRINH TEST PHAN CUNG CHAM THI TRAC NGHIEM'
@ 3,(80-Len(Tua))/2-2 To 5,(80-Len(Tua))/2+Len(Tua)+2 Double Color R+/B
@ 4,(80-Len(Tua))/2 Say Tua Color G+
@ 11,28 To 15,50 Double Color RB/W
@ 12,30 Prompt ' 1- NHAP DAP AN '
@ 13,30 Prompt ' 2- CHAM DIEM THI '
@ 14,30 Prompt ' 3- KET THUC '
Menu To C
Do Case
Case C=1
Do Dapan

Case C=2
Do Chamdiem
Case C=3
Do Exit
EndCase
EndDo
Set Talk On
Return
*
Procedure Dapan
!Dung
i=1
Do While i<=3
!PC0_1
!Dayhang
i=i+1
EndDo
i=1
Z=''
Wait " BAT DAU DOC NOI DUNG BAI THI!" Windows Timeout 1
Do While i<=25
!Doc_da
W=Fopen('CauDA.txt')
U=Fgets(W)
=Fclose(W)
??U
Z=Z+U
16
!Dayhang
i=i+1

EndDo
W=Fcreate('Dapan.txt')
=Fwrite(W,Z)
=Fclose(W)
Wait "DAY PHIM BAT KY DE TIEP TUC !" Window
!Day
Return
*
Procedure Chamdiem
Use Diem
Index On Masv To Mssv
Do While .T.
!Dung
M_diem=0
i=1
M=''
Do While i<=3
!Docma
X=Fopen('Masv.Txt')
K=Fgets(X)
=Fclose(X)
M=M+K
!Dayhang
i=i+1
EndDo
@22,1 Say M
Ma=Val(M)
Seek(Ma)
If Found()
@16,20 Say " MASV"+Space(8)+"HO"+Space(9)+"TEN"

@18,20 Say " "+Str(Masv,6)+' '+Ho+Ten
Do Traloi
Repl Diem With M_diem
@18,20 Say " "+Str(Masv,6)+' '+Ho+Ten+Str(Diem,3)
Else
Wait "KHONG CO MA SINH VIEN NAY!" Windows
EndIf
Wait "CHAM DIEM TIEP KHONG ?(Y/N)" To Tiep Windows
If Upper(Tiep)='N'
Clear
Exit
EndIf
Clear
@0,0 To 24,79 Double Color Gr+
Tua='DANG CHAM DIEM TIEP TUC'
17
@ 3,(80-Len(Tua))/2-2 To 5,(80-Len(Tua))/2+Len(Tua)+2 Double Color
R+/B
@ 4,(80-Len(Tua))/2 Say Tua Color G+
EndDo
Return
*
Procedure Traloi
Cau=1
Y=Fopen('Dapan.Txt')
T=Fgets(Y)
=Fclose(Y)
Do While Cau<=25
!Bailam
X=Fopen('Traloi.Txt')

D=Fgets(X)
=Fclose(X)
CauDA=SubStr(T,((Cau-1)*4)+1,4)
i=1
Do While i<=Len(D)
TL=SubStr(D,i,1)
DA=SubStr(CauDA,i,1)
If TL=DA
!Chodiem
M_diem=M_diem+1
EndIf
i=i+1
EndDo
If Cau=25
Wait " " Timeout 2
EndIf
!Dayhang
Cau=Cau+1
EndDo
!Day
Return

*
Procedure Exit
!Dung
Set Talk On
Close All
Quit
Return


PHAÀN CHÖÔNG TRÌNH BANG ASSEMBLY
DOC_DA.ASM:
18
Include Macro.Asm
Code Segment Para Public 'Code'
Assume CS:Code,DS:Data
PC0_1 Proc
Lap:
Mov DX,PortC
In AL,DX
And AL,01
Mov DL,AL
Add DL,30h
Cmp DL,31h
Je Thoat
Jmp Lap
Thoat:
Ret
PC0_1 EndP
DELAY Proc
Mov CX,1000
Dela:
Loop Dela
DELAY EndP
DOC Proc
Mov DX,PortA
In AL,DX
Mov BL,AL
Mov Xport,'A'
Bitthap:

Mov Bcao,'0'
Mov DL,AL
And DL,0FH
Sosanh:
Cmp DL,00000001B
Je Luu_a
Cmp DL,00000010B
Je Luu_b
Cmp DL,00000100B
Je Luu_c
Cmp DL,00001000B
Je Luu_d
Jmp Luu_?
Luu_a:
Mov DL,'a'
Mov [SI],DL
Jmp Xetbit
Luu_b:
Mov DL,'b'
Mov [SI],DL
Jmp Xetbit
19
Luu_c:
Mov DL,'c'
Mov [SI],DL
Jmp Xetbit
Luu_d:
Mov DL,'d'
Mov [SI],DL
Jmp Xetbit

Luu_?:
Mov DL,'?'
Mov [SI],DL
Xetbit:
Inc SI
Cmp Bcao,'1'
Je XetportB
Mov Bcao,'1'
Mov DL,BL
Mov CL,4
Shr DL,CL
Jmp Sosanh
XetportB :
Cmp Xport,'B'
Je Hetdoc
Mov DX,PortB
In AL,DX
Mov BL,AL
Mov Xport,'B'
Jmp Bitthap
Hetdoc: Ret
DOC EndP
Main Proc
Mov AX,Data
Mov DS,AX
Mov SI,Offset Buffer
Call PC0_1
Mov AX,Data
Mov DS,AX
Call DELAY

Mov AX,Data
Mov DS,AX
Call DOC
Taofile:
Create Finame,20h
JB Error
Mov Handle,AX
Write Handle,Buffer,Buflen
JB Error
Close BX
20
JB Error
Exit:
Mov AX,4C00h
Int 21h
Ret
Error:
Puts ErrMess
Jmp Short Exit
Main EndP
Code EndS
Data Segment Public 'Data'
Finame DB 'C:\Test\CauDA.txt',0
ErrMess DB 'LOI TAO/GHI FILE !$'
Handle DW ?
BasAdr Equ 300H
PortA Equ BasAdr
PortB Equ BasAdr+1
PortC Equ BasAdr+2
Xport DB ?

Bcao DB ?
Buflen Equ 4
Buffer DB Buflen Dup(?)
Data EndS
End Main

DOCMA.ASM:
Include Macro.asm
Code Segment Para Public 'Code'
Assume CS:Code,DS:Data
PC0_1 Proc
Lap:
Mov DX,PortC
In AL,DX
And AL,01
Mov DL,AL
Add DL,30h
Cmp DL,31h
Je Thoat
Jmp Lap
Thoat:
Ret
PC0_1 EndP
DELAY Proc
Mov CX,1000
Dela:
Loop Dela
21
Ret
DELAY EndP

DOCMA Proc
Mov DX,PortA
In AL,DX
Not AL
Mov BL,AL
Mov DL,BL
And DL,7FH
Mov CL,4
Shr DL,CL
Add DL,30h
Mov [SI],DL
Inc SI
Mov DL,BL
And DL,07H
Add DL,30h
Mov [SI],DL
Inc SI
Ret
DOCMA EndP
Main Proc
Mov AX,Data
Mov DS,AX
Mov SI,Offset Buffer
Lapdem:
Call PC0_1
Mov AX,Data
Mov DS,AX
Call DELAY
Mov AX,Data
Mov DS,AX

Call DOCMA
Create Finame,20h
JB Error
Mov Handle,AX
Write Handle,Buffer,Buflen
JB Error
Close BX
JB Error
Exit : Mov AX,4C00h
Int 21h
Ret
Error : Puts Errmess
JMP Short Exit
Main EndP
Code EndS
Data Segment Para Public 'Data'
22
Finame DB 'C:\Test\Masv.txt',0
Errmess DB 'File I/O Error !$'
Buflen Equ 2
Buffer DB Buflen Dup(?)
Handle DW ?
BasAdr EQU 300H
PortA EQU BasAdr
PortC EQU BasAdr+2
Data EndS
End Main

BAILAM.ASM:
Include Macro.Asm

Code Segment Para Public 'Code'
Assume CS:Code,DS:Data
PC0_1 Proc
Lap:
Mov DX,PortC
In AL,DX
And AL,01
Mov DL,AL
Add DL,30h
Cmp DL,31h
Je Thoat
Jmp Lap
Thoat:
Ret
PC0_1 EndP
DELAY Proc
Mov CX,1000
Dela:
Loop Dela
Ret
DELAY EndP
DOC Proc
Mov DX,PortA
In AL,DX
Mov BL,AL
Mov Xport,'A'
Bitthap:
Mov Bcao,'0'
Mov DL,AL
And DL,0FH

Sosanh:
Cmp DL,00000001B
Je Luu_a
Cmp DL,00000010B
23
Je Luu_b
Cmp DL,00000100B
Je Luu_c
Cmp DL,00001000B
Je Luu_d
Jmp Luu_?
Luu_a:
Mov DL,'a'
Mov [SI],DL
Jmp Xetbit
Luu_b:
Mov DL,'b'
Mov [SI],DL
Jmp Xetbit
Luu_c:
Mov DL,'c'
Mov [SI],DL
Jmp Xetbit
Luu_d:
Mov DL,'d'
Mov [SI],DL
Jmp Xetbit
Luu_?:
Mov DL,'?'
Mov [SI],DL

Xetbit:
Inc SI
Cmp Bcao,'1'
Je XetportB
Mov Bcao,'1'
Mov DL,BL
Mov CL,4
Shr DL,CL
Jmp Sosanh
XetportB :
Cmp Xport,'B'
Je Hetdoc
Mov DX,PortB
In AL,DX
Mov BL,AL
Mov Xport,'B'
Jmp Bitthap
Hetdoc: Ret
DOC EndP
Main Proc
Mov AX,Data
Mov DS,AX
Mov SI,Offset Buffer
24
Doccau:
Call PC0_1
Mov AX,Data
Mov DS,AX
Call DELAY
Mov AX,Data

Mov DS,AX
Call DOC
Create Finame,20h
JB Error
Mov Handle,AX
Write Handle,Buffer,Buflen
JB Error
Close BX
JB Error
Exit:
Mov AX,4C00h
Int 21h
Ret
Error:
Puts ErrMess
Jmp Short Exit
Main EndP
Code EndS
Data Segment Public 'Data'
Finame DB 'C:\Test\Traloi.txt',0
ErrMess DB 'LOI TAO/GHI FILE !$'
Handle DW ?
BasAdr Equ 300H
PortA Equ BasAdr
PortB Equ BasAdr+1
PortC Equ BasAdr+2
Xport DB ?
Bcao DB ?
Buflen Equ 4
Buffer DB Buflen Dup(?)

Data EndS
End Main

DAYHANG.ASM:
Code Segment Para Public 'Code'
Assume CS:Code,DS:Data
DAY Proc
Mov DX,PortC
In AL,DX
Or AL,01000000B
Mov CX,5
25

×