ĐỒ ÁN MÔN HỌC
GVHD : TRẦN NGUYÊN BẢO TRÂN
BỘ CÔNG THƯƠNG
I Hui
^ TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP
Wầ HO CHI MINH
LỜITPHCM
MỞ ĐÂU
UHVER3ĨY 0f
INDUSTRY
KHOÀ CÔNG NGHỆ ĐIỆN TỬ
—oOo—
Hòa nhịp vào sự phát triển chung của xã hội, ngành điện tử
cũng
không
nằm ngoài qui luật phát triển chung đó. Ngoài những sản phẩm
ĐÊ TÀI: ffixồ> ẤN M<Ô>N nẹc
phục
vụ
cho
nhu cầu đời sống, ngành điện tử đã và đang có những bước tiến
trong
THỐNGngười.
GIÁM SÁT VÀ ĐIỀU KHIỂN
dụng thay thế hoạt độngHỆcon
ứng
THIẾTsuy
BỊ TRONG
Lấy ý tưởng đó, emCÁCđã
nghĩPHÒNG
ra một ứng dụng thực tế
trong
việc
quản lí khách sạn. Bằng những kiến thức đã học, em đã thiết kế ra
một
hệ
thống điều khiển và giám sát phòng trong khách sạn. Đề tài của em
sử
dụng
GVHD : Th.s TRẦN NGUYÊN BẢO
TRÂN
SVTH : DƯƠNG LÊ KÔNG ĐẠT
LỚP : ĐHĐT1ALT
TP.HCM 12/2007
Vn.360plus.yahoo.com/phamcongl58
Trang 1
ĐỒ ÁN MÔN HỌC
GVHD : TRẦN NGUYÊN BẢO TRÂN
LƠI CAM ƠN
—oOo—
" Không thây đố mày làm nêti' , đó ià một câu tục ngữ đã
được
truyền tụng từ đời này sang đời khác mà không ai có thể quên
được.
Thật
vậy,
qua hơn bốn năm học ở trường, nhờ sự tận tình dạy bảo của Quý
thầy
cô
đã
giúp em tích lũy được những kiến thức quí báu cho bản thân mình.
Nhờ
những
kiến thức đó mà em đãa thể hiện được ý tưởng của mình ở đồ án
này.
Hơn
thế
Em xin chân thành cản ơn!
Vn.360plus.yahoo.com/phamcongl58
Trang 2
ĐỒ ÁN MÔN HỌC
GVHD : TRẦN NGUYÊN BẢO TRÂN
Nhận xét của giáo viên hướng dân
ỂS
t
Ngày. . .tháng.....năm
2011
Giáo Viên Hướng
Vn.360plus.yahoo.com/phamcongl58
Trang 3
ĐỒ ÁN MÔN HỌC
GVHD : TRẦN NGUYÊN BẢO TRÂN
Nhận xét của giáo viên phản biện
Ngày...tháng.....năm
2011
Giáo Viên Phản Biện
Vn.360plus.yahoo.com/phamcongl58
Trang 4
ĐỒ ÁN MÔN HỌC
GVHD : TRẦN NGUYÊN BẢO TRÂN
MỤC LỤC
—oOo—
PHÂN A : LÝ THUYẾT LIÊN QUAN
CHƯƠNG I : GIỚI THIỆU VĐK 89C51....................................7
CHƯƠNG II : GIỚI THIỆU GIAO TIẾP NỐI TIẾP.....................12
CHƯƠNG III : VB VỚI TRUYỀN THÔNG NỐI TIẾP..................15
PHÂN B : THựC HIỆN MÔ HÌNH
CHƯƠNG I : MẠCH CẢM BIẾN HỒNG NGOẠI.........................23
CHƯƠNG II : GIAO TIẾP MÁY TÍNH......................................26
2.1
GIAO DIỆN VB...........................................................26
2.2
LƯU ĐỒ GIẢI THUẬT.................................................27
2.3
CHƯƠNG TRÌNH VB...................................................28
2.4
CHƯƠNG TRÌNH VI xử LÝ..........................................34
Vn.360plus.yahoo.com/phamcongl58
Trang 5
ĐỒ ÁN MÔN HỌC
GVHD : TRẦN NGUYÊN BẢO TRÂN
NỘI DUNG
Vn.360plus.yahoo.com/phamcongl58
Trang 6
ĐỒ ÁN MÔN HỌC
GVHD : TRẦN NGUYÊN BẢO TRÂN
PHÂN A :
LÝ THUYẾT LIÊN QUAN
Chương 1 : Giới thiệu VĐK 89C51
1.1 Giới thiệu:
Bộ vi điều khiển viết tắt là Micro-Controller, là mạch tích hợp trên
một
chip
có thể lập trình được, dùng để điều khiển hoạt động của một thiết
bị,
hệ
thống
... Theo các tập lệnh của người lập trình, VĐK có thể đọc, lưu trử,
xử
lí
thông
1.2 Khảo sát bộ VĐK 89C51:
IC vi điều khiển 89C51 thuộc họ MCS-51 có các đặc điểm sau:
•
Bộ nhớ chương trình bên trong: 4 KB (ROM)
•
Bộ nhớ dữ liệu bên trong: 128 byte (RAM)
•
Bộ nhớ chương trình bên ngoài: 64 KB (ROM)
Vn.360plus.yahoo.com/phamcongl58
Trang 7
GVHD : TRẦN NGUYÊN BẢO TRÂN
ĐÕ ÀN MỒN HỌC
1.2.1 Cấu trúc bên trong của 89C51:
INT\*1
-INT\*0
PORTnối tiếp
EA\ RST PSENALE
p° P! P2 P3
TXD* RXD*
Hình 1.1: sơ đồ khối của 89C51
Vn.360plus.yahoo.com/phamcongl58
Trang 8
ĐỒ
ĐỒ ÁN
ÁN MÔN
MÔN HỌC
HỌC
GVHD
NGUYÊN
BẢOBẢO
TRÂN
GVHD : :TRẦN
TRẦN
NGUYÊN
TRÂN
1.2.2
Sơ đô chân của
• Port 3
: từ chân 10 đến 17, các chân của port này có nhiều
89C51
3()
p
—1hịị
30p
40
19
18
2
9
3
0
3
2.
3
1
Vcc
Po.7
XTAL1
XTAL2
PSEN\
ALE
Po.6
Po.5
^4
Po.3
Po.2
Po.l
Po.O
34
AD
7
AD
6
AD
5
AD
4
AD
3
P2.7
1
EA\
P2-6
3
31
RET
P2-5
1
P2.4
1
P2.3
1
RD\
1
P2.2
• Chân—
EA\ : truy
chân số 331.
1 xuất ngoài, P2.1
WR
8
P2.0
411
2
P1.7
A1
TI
8
P1.6
5
Chức năng
— :
2
P1.5
A1
TO
7
P1.4
4
n
—
2 chương
A1 trình (ROM)
- Là tín hiệu cho phép truy xuất bộ nhớ
INT6
3
P1.3
ngoài
2
A1
5
2
2
AI
-
Là tín hiệu nhập, tích cực mức thấp.
21
Hình 1.2 : sơ dô chân của 89C51
EA\ = 0 : Chip 8951 sử dụng chương trình ROM ngoài.
•
Port 0 : từ chân 32 đến 39, trong những thiết kế nhỏ nó
có
2
chức
năng
EA\ = 1 : Chip 8951 sử dụng chương trình ROM trong.
như các đường 10, trong những thiết kế lớn (với bộ nhớ
mở
rộng)
hợp PSEN\
kênh giữa
bus.bộ
•kết
Chân
: chocác
phép
nó
được
nhớ chương trình,
chân số 29
Chức năng :
Vn.360plus.yahoo.com/phamcongl58
Vn.360plus.yahoo.com/phamcongl58
Trang 910
25 Chân 9 Chân
Lôi
Tên gọi
Chức năng
ĐỒ
ĐỒ ÁN
ÁN MÔN
MÔN HỌC
HỌC
GVHD :: TRẦN
TRÂN
TRẦNNGUYÊN
NGUYÊNBẢO
BẢO
TRÂN 2:
Chương
Khi lập
trình
cho ROM
chân ALE đóng vai trò là
Giới
Thiệu
Giaotrong
Tiếp chip
Nối thì
Tiếp
ngõ vào
của xung lập trình.
2.1 Lập trình qua cổng COM:
4
7
Out
5
8
In
6
In
6
Chân XTAL1, XTAL2: tinh thể thạch anh,
Yêu cầu
gởi ;bộ truyền đặt đường
RTS,Request
to
chân
18-19
VB
lên: mức hoạt động khi sẵn
Send Delph Chứcnày
năng
i
sàng Windows
vc
truyền dữ liệu
Matla
CTS,Ciear
to
Send
- Dùng để
thạch
mạch đặt
dao đường
động tạo xung
d nối vớiXoá
để anh
gởi hoặc
;bộ nhận
Pascal
này clock bên
ngoài,Qbasi
cung cấp tín
chođểchip
hoạt động.
lênhiệu
mứcxung
hoạtclock
động
thông
Dos
c
báo
Mrbol
•
cho bộ truyền là nó sẵn sàng
DSR,
Data
SetDữ liệu sẵn sàng ;tính hoạt động
giống với CTS nhưng được kích
Ready
2.2 Cấu trúc cổng COM:
hoạt
bởi bộ truyền khi nó sẵn sàng
7
5
-
SG, Signal GroundĐất của tín hiệu
8
1
In
Phát hiện tín hiệu mang dữ liệu
DCD, Data Carrier
Detect
20
4
Out
DTR,
Đầu cuối dữ liệu sẵn sàng ; tính
Data hoạt
Terminal Ready
động giống với RTS nhưng
được
kích
hoạt bởi bộ nhận khi muốn
22
9
truyền
Trang 13
11
12
Vn.360plus.yahoo.com/phamcongl58
In
RI, Ring Indicate
Báo chuông , cho biết là bộ nhận
đang
chuông
nhận
tín
hiệu
rung
ĐỒ
ĐỒ ÁN
ÁN MÔN
MÔN HỌC
HỌC
GVHD : TRẦN NGUYÊN BẢO TRÂN
3.1.1 Đặc tính Settings:
General
Các đặc tính Settings đặt và trả lại các thông số truyền thông
Chương 3:
cho
cổng
RS232, như tốc độ baud , chẵn lẻ , số bit dữ liệu và các bit dừng.
VB Với Truyền Thông Nối Tiếp
Để
xuất của
dữ liệu
máy
Cú pháp
câu từ
lệnh
là :tính xuống cổng Com thì ta phải sử
dụng
chương
Settings
trình để
đó.các
Ở đây
sửtruyền
dụng chương
Đặtlàm
và điều
trả lại
thamtasố
thông trình VB để thực
[form.]MSComm.Setting [=param.string$]
như
:
Project <=>
Component
Ctrl-T) theo bit, chẵn
tốc độ
truyền , ( truyền
- Nếu paramString không có khi mở cổng thì điều khiển truyền
Hình 3.2 Toolbox chỉ ra các thành phần Comm
thông phát
3.1 Các đặc tính:
sinh lỗi 380
Thành phần Comm được bổ sung vào biểu mẫu (form) bất cứ
lúc
nào
cần đến việc truyền thông nối tiếp. Theo mặc định thì cổng thứ
nhất
tạo
ra
đối
tượng có tên MSComml, đối tượng ứng với cổng thứ 2 được gọi là
Các đặc tính điều khiển truyền thông :
Bẳng sau đây mô tả các giá trị chẵn lẻ hợp lệ :
Hình 3.1 -
Vn.360plus.yahoo.com/phamcongl58
14
16
Trang 15
ĐỒ ÁN MÔN HỌC
GVHD : TRẦN NGUYÊN BẢO TRÂN
Bảng liệt kê số bit dữ liệu hợp lệ trong một lần truyền (khung truyền)
Bảng liệt kê số bit stop hợp lệ :
3.1.2 Đặc tính CommPort:
Đặc tính này đặt và trả lại số cổng truyền thông .
Cú pháp của câu lệnh là :
[form.]MSComm. CommPort[=port number%]
Vn.360plus.yahoo.com/phamcongl58
Trang 17
ĐỒ ÁN MÔN HỌC
3.1.3 Đặc
PortOpen:
GVHD : TRẦN NGUYÊN BẢO TRÂN
tính
Đặc tính PortOpen đặt và trả lại trạng thái của cổng truyền
thông
(đóng
hoặc mở) . Đặc tính này không có trong thời gian thiết kế chương
trình .
Cú pháp của câu lệnh là :
[form.]MSComm.PortOpen [={True/False}]
Thông số thiết lập là True để mở cổng, còn False là đóng cổng
và
xoá
nội dung các bộ đệm truyền và nhận (tác động này tự động xảy ra
khi
ứng
dụng được đóng).
Trước khi sử dụng đặc tính này phải đặt số cổng bằng đặc
tính
Comport
, nếu ta quên đi đặc điểm này thì sẽ phát sinh lỗi 68.
3.1.4 Nhập dữ liệu :
Ba đặc tính chính được sử dụng để đọc dữ liệu từ bộ đệm
nhận
Input,
InputBufferCount và InputBufferSize.
a)
InPut ( Nhập vào)
Đặc tính Input trả và xoá bỏ một sâu ký tự từ bộ đệm nhưng
trạng
thái
này không có trong [form]MSComm.Input
Vn.360plus.yahoo.com/phamcongl58
Trang 18
ĐỒ
ĐỒ ÁN
ÁN MÔN
MÔN HỌC
HỌC
GVHD
GVHD :: TRẦN
TRẦN NGUYÊN
NGUYÊN BẢO
BẢO TRÂN
TRÂN
ứng dụng
co còn
thể đọc
chúng từ bộ
khikích
ta làm
vịêccủa
ở chế
đệm
truyền,
OutBufferSize
quiđệm
địnhtrừ
tổng
thước
bộ
độ truyền.
bắt
đệm
tay( hand shaking). Kiểu dữ liệu của đặc tính này là sô'
nguyên( integer).
• Không để kích thước bộ đệm truyền quá lớn . Tuy nhiên nếu
để c) InBufferCount
quá
nhỏ
thì xảy ra tình trạng tràn dữ liệu ( trừ khi làm việc ở chế độ bắt
tay).
Đặc
InBufferCuont trả lại số kí tự trong bộ đệm nhận. Nò
b) tính
Inputlen
Thông thường nên bắt đầu vớicókích thước bộ đệm truyềnthể
là
cũng
Đặt
và sử
trả dụng
lại sốđểkí xóa
tự mà
đặcbyte.
tính
bộ kí
đệm
512
Nếu
được
bộ đệm
bằngInput
cáchđọc
đặt được
số củatừcác
tự
nhận.
Giá
trị
lỗi
tràn xảy thì phải tăng kích thước
bộ đệm cho thích hợp Dặc
với
bằng
0.
mặc
dặccó
tính
này thời
bằnggian
0 . Đặt
= 0trình,
để dụng
điều
ứng
tínhđịnh
này của
không
trong
thiếtInputlen
kế chương
cú
khiểntruyền
hiện tại.
pháp
của
câu
thông
đọc hết nội dung bộ đệm nhận.
lệnh là:
c)
OutBufferCount
pháp
[form.]
MSComm. InBuííerCount
Đặc tính
OutBufferCount
trả Cú
lại số
kí :tự[=count%]
trong bộ đệm truyền.
Nhờ
đặc
tính
Ta
bộ dung
đệmbộnhận
bằng bằng
cách cách
đặt đặt
đặcgiátính
này có
ta cóthể
thể xóa
xóa nội
đệm truyền
trị
[íorm.] MSComm. Inputlen [=numchars%]
InBufferCount=0
.Kiểu
của
dử
liệu của của đặc. tính này là số nguyên (integer).
OutBufferCount=0
Đặc tính này rất có ích khi đọc dữ liệu từ các máy có lối ra bị cố
dịnh
3.1.5 Xuất dữ liệu :
chiều
dài khối
Cú pháp
: dữ liệu.
c)
về
Hàm Cominput
Có
sử đệm
dụngnhận.
để viết dữ liệu vào bộ đệm truyền
Trảbalạiđặc
và tính
xóa chính
xâu kí được
tự ở bộ
là
Cú pháp :
a)
Output, OutBufferCount, OutBufferSize.
Output
Cominput (ByVal hwnd As Integer, LpData As Anyỵ ByVal do Data
Đặc tính Output sẽ viết 1 xâu kí tự vào bộ đệm truyền, đặc tính
As
này
không
Trang 21
19
20
Vn.360plus.yahoo.com/phamcongl58
<—-PV—1=1-
Si
ãí
L
f
^ > /N
\ĩ
Ịịí
Ún
u
ĐỒ
ĐỒ ÁN
ÁN MÔN
MÔN HỌC
HỌC
3.1.7 sư
OnComm:
đặc
GVHD : TRẦN NGUYÊN BẢO TRÂN
kiện
Sự kiện OnCom được phát sinh vào bất cứ khi nào giá trị của
Thực Hiện MÔ Hình
tính
CommEvent thay đổi.
Chương
1 : Mạch
cảm biến hồng ngoại
Sự kiện
:
+
1
Vn.360plus.yahoo.com/phamcongl58
Trang 22
ĐỒ ÁN MÔN HỌC
GVHD : TRẦN NGUYÊN BẢO
TRÂN
1.1.1 Giới thiệu linh kiện :
IC 555 là một IC rất đa năng, có nhiều công dụng trong
thực
tiễn.
IC 555 dùng làm bộ định thời(Timer), bi65 tạo xung (Pulse
XV L
Generator),
tầng
so
áp (Comparator)... Sau đây là công dụng các chân:
•
Chân sô' 1 (GND)
XVL
Cho nối mass để lấy dòng cấp cho IC, dòng điện tử sẽ từ
mass chảy
vào IC.
•
Chân sô' 2 (TRIGGER)
Ngõ vào của một tầng so áp 2.
•
Chân sô' 3 (OUTPUT)
Vn.360plus.yahoo.com/phamcongl58
Xung ngõ ra.
Trang 23
Control Alam
ĐỒ ÁN
ÁNMÔN
MÔN
HỌC
HỌC
b) Led phát hồng
Chương ngoại
2
GVHD : TRẦN NGUYÊN BẢO TRÂN
GIAO TIẾP MÁY TÍNH
Vật liệu dùng để chế tạo Led hồng ngoại là GaAs với vùng
cấm
có
độ
rộng khoảng 1.43eV tương ứng với bức xạ khoảng 900nm. Led hồng
2.1 Giao diện VB
ngoại
có
hiệu suất lượng tử cao hơn so với led phát ra ánh sáng trông thấy
được.
Một
số
thông số kĩ thuật:
Do An Giao Tiep May Tinh
T rường Dại Học Công Nghiệp TPHCM
•
Bước sóng : 850 - 900nm
Khoa Diện Tử
•
cường độ bức xạ : 40 - 50 mW/sr
•
Độ dài xung đến 9.6 Kbaud : 1.41 - 22.13 uS
Vn.360plus.yahoo.com/phamcongl58
0000
Trang 25
ĐỒ ÁN MÔN HỌC
GVHD : TRẦN NGUYÊN BẢO TRÂN
2.2 Lưu đô giải thuật:
Set
Baud
yes
GVHD: TrầnNguyên Bảo Trán
Vn.360plus.yahoo.com/phamcongl58
Vn.360plus.yahoo.com/phamcongl58
Trang26
27
Trang
ĐO AN MON HỌC
GVHD : TRAN NGUYÊN BAO TRAN
2.3 Chương trình VB
Dim Baud, Com, i, Sele, Inc, Data, j, k, xn As
Byte
Dim b As Double
Dim Comsetting, Dataln As string
Dim a As String
Private Sub Combol_Click()
'If Combo2.Text = "" Then
' If MsgBox("Save all changes?", vbOKOnly) = vbOK Then
Conibo2.SetFocus
'Else
' Textl.Text = Combol.Text
' MSComml.CommPort = Combol.Text
' Text2.Text = Combo2.Text
' MSComml.Settings = "9600, E, 8,1"
' MSComml.CommPort =
2
Com = Combol.Text
Private Sub Combo2_Click()
On Error GoTo
X_Error
Baud = Combo2.Text
' If Timerl.Enabled = True Then Timerl.Enabled = False
Vn.360plus.yahoo.com/phamcongl58
Trang 28
ĐỒ ÁN MÔN HỌC
GVHD : TRẦN NGUYÊN BẢO TRÂN
Comsetting = CStr(Baud) &
",N,8,1"
MSComml.InputLen = 0 ' Read all buffer on input
MSComml.InBufferSize = 1024
'MSComml.RThreshoId = 0 ' khong tim kiem ky tu nhan
duoc
MSComml.RThreshold = 1 ' phat hien tung ky tu nhan
duoc
MSComml.InputMode = comlnputModeText
MSComml.OutBufferSize = 1024 ' Read all buffer on
input
MSComml.SThreshold = 0
MSComml.Handshaking = comNone
' If Tinierl.Enabled = False Then Tinierl.Enabled = True
If MSComml.PortOpen = False Then MSComml.PortOpen =
True
Command2.EnabIed
=
True
Command3.Enabled
=
X_Error:
If MsgBox("Please select Coni Port againt and then select Baud Rate ",
vbOKOnly) = vbOK Then
Combol.Enabled = True
Combo2.Enabled = False
Combol.SetFocus
Vn.360plus.yahoo.com/phamcongl58
Trang 29
ĐỒ ÁN MÔN HỌC
Command2.Enabled
GVHD : TRẦN NGUYÊN BẢO TRÂN
=
False
Command3.Enabled
=
False
Command4.Enabled
=
False
Command5.Enabled
=
False
Tinierl.Enabled = False
End
If
KT:
End Sub
Private Sub Commandl_Click()
xn = MsgBox("Do you want to exit ? ",
vbOKCancel)
If xn = vbOK Then
Unload Me
End
End Sub
Private Sub Command2_CIick()
If Command2.Caption = "OFF" Then
End Sub
Vn.360plus.yahoo.com/phamcongl58
Trang 30
Đồ ÁN MÔN HỌC
TRÂN
GVHD : TRẦN NGUYÊN BẢO
Private Sub Command3_Click()
If Command3.Caption = "OFF" Then
MSComml.Output = Chr$(2)
Conưnand3.Caption = "ON"
Shapel(l).BackColor = &HFF&
Else
MSComml.Output = Chr$(6)
Command3.Caption = "OFF"
Shapel(l).BackColor =
&HFFFFFF
End Sub
Private Sub Command4_Click()
If Command4.Captỉon = "OFF"
Then
MSConinil.Output = Chr$(3)
Command4.Caption = "ON"
Shapel(2).BackColor = &HFF&
Else
MSComml.Output = Chr$(7)
Command4.Caption = "OFF"
Shapel(2).BackColor =
&HFFFFFF
End If
End Sub
Private Sub Command5_Click()
Vn.360plus.yahoo.com/phamcongl58
Trang 31
ĐÔ ÁN MÔN HỌC
GVHD : TRẦN NGUYÊN BẢO TRÂN
Else
MSComml.Output = Chr$(8)
Command5.Caption = "OFF"
Shapel(3).BackCoIor =
&HFFFFFF
End Sub
Private Sub Form_Load()
Combo2.Enabled =
False
i = 60
Sele = 2
Inc = 0
Command2.Caption = "OFF"
Command3.Caption
=
"OFF"
Command4.Caption
=
"OFF"
Command5.Caption
=
MOFF"
For j = 0 To 3
Shapel(j).BackColor =
&HFFFFFF
Next j
Comniand2.Enabled
=
False
Vn.360plus.yahoo.com/phamcongl58
Trang 32
ĐỒ ÁN MÔN HỌC
GVHD : TRẦN NGUYÊN BẢO TRÂN
Case comEvReceive
Dataln =
MSComml.Input
Data = Asc(Dataln)
If Data = 255
Then
Inc = Inc + 1
Text2.Text = Inc
End If
If Data = 0 Then
End
Selet
End Sub
Private Sub Timerl_Timer()
If Inc = 0 Then
For k = 0 To
3
Shapel(k).BackColor =
&HFFFFFF
Next k
Command2.Caption
=
"OFF"
Command3.Caption
=
"OFF"
Command4.Caption
=
Vn.360plus.yahoo.com/phamcongl58
Trang 33
ĐỒ ÁN MÔN HỌC
GVHD : TRẦN NGUYÊN BẢO TRÂN
2.4 Chương trình VXL
#include <reg51.h>
#include <stdio.h>
#define XTAL 11059200
#define baudrate 9600
sbit Ledl = P0A0;
sbit Led2 = P0A1;
sbit Led3 = P0A2;
sbit Led4 = P0A3;
sbit
Sensorl
=
Sensor2
=
P2A0;
sbit
P2A1;
/*
* Program Delay
*/
void Delayms(unsigned char mmSecond)
{
}
}
Vn.360plus.yahoo.com/phamcongl58
Trang 34