CHƯƠNG 1
KHÁI QUÁT VỀ CÔNG NGHỆ ĐIỀU KHIỂN BÃI ĐỖ XE TỰ ĐỘNG
1.1. MỞ ĐẦU
Hiện nay, các bãi đỗ xe công cộng nhu ở các khu phố, khu chung cư, hội
chợ việc quản lý gặp nhiều khó khăn. Số lượng xe vào và xe ra là ngẫu nhiên,
có lúc nhiều xe, có lúc ít xe, nhiều khi lại ách tắc quá tải. Công việc quản lý
tưởng chừng như đơn giản song lại tốn nhiều nhân lực: người thì bán vé, người
thu vé người thì phải thường xuyên giám sát số lượng xe có trong bãi bên cạnh
đó việc kiểm soát vé là cũng khó khăn.
Ngày nay cùng với sự phát triển của các ngành khoa học kỹ thuật, kỹ
thuật điện tử mà trong đó là kỹ thuật số đóng vai trò quan trọng trong mọi lĩnh
vực khoa học kỹ thuật, quản lí, công nghiệp tự động hóa, cung cấp thông tin….
do đó chúng ta phải nắm bắt và vận dụng nó một cách có hiệu quả nhằm góp
phần vào sự phát triển nền khoa học kỹ thuật thế giới nói chung và trong sự phát
triển kỹ thuật điện tử nói riêng.
Áp dụng những thành tựu khoa học ta có thể sử dụng các phương tiện
hoàn toàn tự động để điều khiển bãi đỗ xe tự động, không những giảm được
nhân lực , đáp ứng được kinh tế mà còn có thể kiểm soát được số lượng vé trong
ngày, tháng quý
Trong giới hạn đề tài em chỉ thiết kế hệ thống điều khiển bãi đỗ xe với
việc đếm số lượng xe ra vào hay quản lý số chỗ đỗ xe, số xe có trong bãi và điều
khiển thanh chắn ra vào.
Để thực hiện được điều đó cần phải thiết kế hai phần chính sau: bộ phận
cảm biến và bộ phận đếm.
* Bộ phận cảm biến: gồm phần phát và phần thu. Thông thường người ta
sử dụng phần phát là led hồng ngoại để phát ra ánh sáng hồng ngoại mục đích để
1
chống nhiễu so với các loại ánh sáng khác, còn phần thu là transistor quang để
thu ánh sáng hồng ngoại.
* Bộ phận đếm: có nhiều phương pháp thực thi đó la
-Lắp mạch dùng kỹ thuật số với các IC đếm, chốt, so sánh ghép lại
-Lắp mạch dùng kỹ thuật vi xử lí
-Lắp mạch dùng kỹ thuật vi điều khiển
1.2. LỰA CHỌN PHƯƠNG ÁN THIẾT KẾ
1.2.1. Với mạch đếm sản phẩm dùng IC rời
• Ưu điểm:
-Cho phép tăng hiệu suất lao động
-Đảm bảo độ chính xác cao
-Tần số đáp ứng của mạch nhanh, cho phép đếm với tần số cao
-Khoảng cách đặt phần phát và phần thu xa nhau cho phép đếm những sản
phẩm lớn.
-Tổn hao công suất bé, mạch có thể sử dụng pin hoặc accu
-Khả năng đếm rộng
-Giá thành hạ
-Mạch đơn giản dễ thực hiện
Với việc sử dụng kỹ thuật số khó có thể đáp ứng được việc thay đổi số
đếm. Muốn thay đổi một yêu cầu nào đó của mạch thì buộc lòng phải thay đổi
phần cứng. Do đó mỗi lần phải lắp lại mạch dẫn đến tốn kém về kinh tế mà
nhiều khi yêu cầu đó không thực hiện được bằng phương pháp này.
Với sự phát triển mạnh của nghành kỹ thuật số đặc biệt là cho ra đời các
họ vi xử lí và vi điều khiển rất đa chức năng do đó việc dùng kỹ thuật vi xử lí,
kỹ thuật vi điều khiển đã giải quyết những bế tắc và kinh tế hơn mà phương
pháp dùng IC rời kết nối lại không thực hiện được.
1.2.2. Với mạch đếm sản phẩm dùng kỹ thuật vi xử lí
2
Ngoài những ưu điểm như đã liệt kê trong phương pháp dùng IC rời thì
mạch đếm sản phẩm dùng kỹ thuật vi xử lí còn có những ưu điểm sau:
-Mạch có thể thay đổi số đếm một cách linh hoạt bằng việc thay đổi phần
mềm, trong khi đó phần cứng không cần thay đổi mà mạch dùng IC rời không
thể thực hiện được mà nếu có thể thực hiện được thì cũng cứng nhắc mà người
công nhân cũng khó tiếp cận, dễ nhầm.
- Số linh kiện sử dụng trong mạch ít hơn.
-Mạch đơn giản hơn so với mạch đếm sản phẩm dùng IC rời và có phần
cài đặt số đếm ban đầu
-Mạch có thể lưu lại số liệu của các ca sản xuất
-Mạch có thể điều khiển đếm được nhiều dây chuyền sản xuất cùng lúc
bằng phần mềm
-Mạch cũng có thể kết nối giao tiếp được với máy tính thích hợp cho những
người quản lí tại phòng kỹ thuật nắm bắt được tình hình sản xuất qua màn
hình của máy vi tính.
Nhưng trong thiết kế người ta thường chọn phương pháp tối ưu nhưng kinh
tế do đó chúng em chọn phương pháp đếm sản phẩm dùng kỹ thuật vi điều khiển
1.2.3. Phương pháp đếm sản phẩm dùng vi điều khiển
Ngoài những ưu điểm có được của hai phương pháp trên, phương pháp này
còn có những ưu điểm :
-Trong mạch có thể sử dụng ngay bộ nhớ trong đối với những chương trình
có quy mô nhỏ, rất tiện lợi mà vi xử lí không thực hiện được.
-Nó có thể giao tiếp nối tiếp trực tiếp với máy tính mà vi xử lí cũng giao
tiếp được với máy tính nhưng là giao tiếp song song nên cần có linh kiện
chuyển đổi dữ liệu từ song song sang nối tiếp để giao tiếp với máy tính.
1.3. MỤC ĐÍCH YÊU CẦU CỦA ĐỀ TÀI
Trong bài tập này em thực hiện mạch đếm số lượng xe ra vào bằng phương
pháp đếm xung. Như vậy mỗi xe đi qua cửa phải có một thiết bị để cảm nhận xe
ra vào, thiết bị này gọi là cảm biến. Khi một xe đi qua cảm biến sẽ nhận và tạo
3
ra một xung điện đưa về khối xử lí để tăng dần số đếm hoặc giảm dần số đếm.
Tại một thời điểm tức thời, để xác định được số đếm cần phải có bộ phận hiển
thị. Tuy nhiên mỗi bãi đỗ xe lại yêu cầu với số đếm khác nhau vì thế phải có sự
linh hoạt trong việc chuyển đổi số đếm. Bộ phận chuyển đổi trực quan nhất là
bàn phím. Khi cần thay đổi số đếm người sử dụng chỉ cần nhập số đếm ban đầu
vào và mạch sẽ tự động đếm. Khi số xe được đếm bằng với số đếm ban đầu thì
mạch sẽ tự động dừng. Từ đây suy ra mục đích yêu cầu của đề tài:
-Số đếm phải chính xác, và thay đổi việc cài đặt số đếm ban đầu một cách
linh hoạt.
-Bộ phận hiển thị phải rõ ràng ( led 7 vạch)
-Mạch điện không quá phức tạp, bảo đảm được sự an toàn, dễ sử dụng.
-Giá thành không quá đắt
4
CHƯƠNG 2
SƠ ĐỒ KẾT NỐI PHẦN CỨNG
2.1. CẤU TRÚC HỆ THỐNG
Sơ đồ cấu trúc tổng quát
Hệ thống gồm 4 khối chính:
- Khối cảm biến: Khối cảm biến có nhiệm vụ phát hiện đối tượng (xe ra vào)
- Khối xử lý: Khối xử lý có nhiệm vụ nhận tín hiệu từ khối cảm biến, nhận biết
đối tượng và đưa ra các lệnh điều khiển tới khối chấp hành.
- Khối hiển thị: Khối hiện thị có nhiệm vụ hiển thị trạng thái của hệ thống (led
7 vạch).
2.1.1. Khối cảm biến
A. Hệ thống phát hồng ngoại
Để có thể nhận biết được sản phẩm có rất nhiều phương pháp như siêu âm,
laser hay hồng ngoại mỗi phương pháp có ưu và nhược điểm riêng. Với ưu điểm
giá thành và dễ dàng thiết kế và thi công phương pháp cảm biến bằng hồng
ngoại được chọn. Tuy nhiên phương pháp này cho ta độ ổn định và tin cậy
không cao.
Với hồng ngoại có rất nhiều cách có thể được sử dụng để cảm biến. Với các
sản phẩm có độ bóng cao có thể ứng dụng đặc tính phản xạ của hồng ngoại để
5
KHỐI XỬ
LÝ
CẢM BIẾN
BÀN PHÍM
KHỐI HIỂN THỊ
Chấp hành
cm bin, bng phng phỏp ny chỳng ta s b trớ cp thu phỏt cựng mt
phớa, rt d cho lp t, nhng vi cỏc sn phm cú phn x khụng cao thi ta
s b trớ cp thu phỏt hai phớa, phng phỏp ny cho chỳng ta tin cy cao
hn tuy nhiờn khi lp t thit b s phc tp hn.
H2.1: Mch to dao ng
Hoạt động của mạch điện này nh sau:
Ngay khi cung cấp điện lần đầu cho mạch này, điện áp trên tụ C1 bằng 0V
nên mạch ở trạng thái ban đầu nh sau: R = 0, S = 1 Q của FF ở mức logic cao
Q bù của FF ở mức logic thấp (0V) dẫn đến T1 tắt mức điện áp ra ở chân 3 ở
mức cao. Tụ C1 bắt đầu nạp điện qua điện trở R1, R2 cho đến khi điện áp trên
C1 tăng đến trị số 2/3Vcc ( lúc điện áp trên tụ C1 tăng quá Vcc/3, mạch so sánh
2 đổi trạng thái R = S = 0 nên FF vẫn giữ nguyên trạng thái cũ chân 3 vẫn ở mức
cao) ở thời điểm này mạch so sánh 1 đổi trạng thái nên R = 1, S = 0 FF đổi trạng
thái tức là Q bù ở mức cao phân cực cho T1 dẫn bão hoà làm cho chân 3 chuyển
trạng thái về mức thấp, tụ C1 phóng điện qua R1, chân 7 và T1cho đến khi điện
áp trên tụ giảm xuống còn 1/3Vcc mạch so sánh 2 đổi trạng thái S = 1, R = 0 Q
bù của FF chuyến lên mức điện áp cao T1 tắt tụ C1 lại bắt đầu nạp đến điện áp
2/3Vcc. Chu trình cứ lặp đi lặp lại tại chân 3 sẽ tạo dao động xung vuông. Vì R2
6
rất lớn hơn R1 nên thời gian nạp lớn hơn rất nhiều thời gian phóng nên một chu
kỳ của bộ định thời t = R2.C1 = 0,01 s Vậy tần số phát là f = 1/t = 100Hz.
B. H thng thu
Phớa thu ta dựng mch in nh sau:
H2.2: Mch in phớa thu
Mch in phớa thu gm cú ba khi chớnh nh sau:
Khi 1: cú nhim v to dao ng theo tớn hiu ca Diot thu hng ngoi,
lc v khuch i s b tớn hiu thu c.
Nh vy khi mt s gm cỏc linh kin: Diot thu D2, b khuch i thut
toỏn (IC1), t C2, C3, in tr R4, R5.
Trong ú IC1, in tr R4, t C2 úng vai trũ l b lc tớch cc thụng thp
mt cc dựng hi tip õm.
Khi 2: Cú nhim v khuch i tớn hiu gm IC 2 , t C4, R6, R7.
Vi h s khuch i tớnh theo cụng thc:
Yờu cu cn h s khuch i c 150 ln ta chn R7 = 330K,
R6 = 1K, t C4 = 1àF suy ra Z 2K.
Tớn hiu sau khi c khuch i qua t ni tng C5 a vo khi 3.
7
Z
R
1K
6
u
+=
Khối 3: Có nhiệm vụ tách sóng tạo tín hiệu một chiều để đưa vào bộ so sánh
tạo mức điện áp ra một chiều ở mức logic 0, 1 có thể tích hợp với bộ xử lý số.
Để thực hiện tách sóng ta dùng một Diot D3 (1N4148) và tụ lọc C6(1µF).
D4(1n4148), R8(1K), R9(1K) tạo thành một mạch phân áp có nhiệm vụ bù sụt
áp tín hiệu xoay chiều được chỉnh lưu bởi D3.
• Hoạt động phát hiện xe ra vào của khối Cảm biến
Trong hệ thống sử dụng 2 bộ thu phát hồng ngoại (bộ 1 và bộ 2) để nhận
biết sự xuất hiện và chiều di chuyển của xe (đi vào hay đi ra). Căn cứ vào thứ tự
chắn các đèn hồng ngoại mà ta có thể kết luận rằng xe đó đi vào hay đi ra .
Cụ thể như sau:
H2.3: Sơ đồ bố trí cảm biến
Như vậy đối tượng đi vào và đi ra theo 2 chu trình khác hẳn nhau, ta sử
dụng sự khác biệt này để lập trình cho Vi diều khiển nhận ra chúng.
2.1.2. Khối hiển thị
Khối hiển thị gồm 4 led 7 vạch, ngoài ra con có các led chỉ báo như ( chỉ
báo có xe vào, chỉ báo mở thanh chắn, chỉ báo không còn chỗ để xe…).
Đầu thu 1 Đầu phát 2
Đầu phát 1 Đầu thu 2
Vµo
Ra
8
Ở đây chủ đạo là led 7 vạch được ghép nối với khối xử lý theo nhiều cách
khác nhau.
Để điều khiển được các đèn LED này sáng, bộ vi xử lý hoặc các mạch
cổng của nó cần được tăng khả năng tải bằng các mạch khuếch đại đệm ( bằng
transitor, bằng mạch SN7400hay SN7406) hoặc các mạch điều khiển đèn LED 7
nét chuyên dụng ( như SN7447) để đảm bảo đưa ra được tín hiệu với công suất
nhất định cần thiết cho đèn LED.
• Ghép nối có SN7447 - LED 7 nét ở chế độ tĩnh
Một trong các phối ghép giữa vi xử lý và đèn LED 7 nét thường thấy là
dùng mạch SN7447 để giải mã số BCD ra 7 nét . Đây là kiểu điều khiển đèn
LED ở chế độ hiển thị tĩnh với đặc điểm là khá đơn giản về kết cấu nhưng lại rất
tốn năng lượng: để thắp sáng các nét của đèn LED thì phải có dòng điện liên tục
đi qua.
H2.4: Phối ghép vi xử lý với LED 7 nét thông qua mạch SN7447.
Ta có thể tính sơ bộ để có thể thấy sự tiêu tốn năng lượng của việc hiển
thị theo cách này. Một đèn LED 7 nét tiêu tốn năng lượng nhiều nhất khi nó phải
hiện ra số 8 và lúc này nó tiêu thụ doing điện khoảng 140 mA (khoảng
20mA/nét tuỳ theo chủng loại0. Bản than một mạch SN7447 khi hoạt đọng cũng
tiêu thụ doing điện khoảng 14mA. Nếu tadùng đèn LED này để hiển thị 8 chử số
(địa chỉ và dữ liệu) thì riêng mạch chỉ thị ta phải cung cấp khoảng 1.5mA.
9
a
B
b
B c
C ’47 d
D e
LT f
RBI BI g
8051
P2.0-
P2.7
MAN7
a
f b
g
e c
d
150 Ω
• CPU 7447 - LED 7 nét ở chế độ động - dồn kênh
R1
10k
R2
10k
R3
10k
R4
10k
XTAL2
18
XTAL1
19
ALE
30
EA
31
PSEN
29
RST
9
P0.0/AD0
39
P0.1/AD1
38
P0.2/AD2
37
P0.3/AD3
36
P0.4/AD4
35
P0.5/AD5
34
P0.6/AD6
33
P0.7/AD7
32
P1.0
1
P1.1
2
P1.2
3
P1.3
4
P1.4
5
P1.5
6
P1.6
7
P1.7
8
P3.0/RXD
10
P3.1/TXD
11
P3.2/INT0
12
P3.3/INT1
13
P3.4/T0
14
P3.7/RD
17
P3.6/WR
16
P3.5/T1
15
P2.7/A15
28
P2.0/A8
21
P2.1/A9
22
P2.2/A10
23
P2.3/A11
24
P2.4/A12
25
P2.5/A13
26
P2.6/A14
27
U1
AT89C51
Q1
2N2905
Q2
2N2905
Q3
2N2905
Q4
2N2905
A
7
QA
13
B
1
QB
12
C
2
QC
11
D
6
QD
10
BI/RBO
4
QE
9
RBI
5
QF
15
LT
3
QG
14
U2
7447
H2.5: Phối ghép led 7 vạch với SN7447 chế độ động
Để khắc phục nhược điểm của mạch phối ghép hiển thị tĩnh như đã được
nêu ở trên, người ta thường sử dụng mạch phối ghép hiển thị động làm việc theo
nguyên tắc dồn kênh: toàn bộ cá đèn hiển thị dùng chung một bộ điều khiển
SN7447 và các đèn LED không được thắp sáng liên tục mà luân phiên nhau
sáng theo một chu kỳ nhất định. Công suất tiêu thụ nhờ thế mà giảm đi rất nhiều
mà vẫn đạt được hiệu quả hiển thị.
Nguyên tắc hoạt động
Giá trị số cần hiển thị của mỗi con số được gửi đến cổng P2 từ CPU dưới
dạng mã BCD. Từ đây BCD được mạch SN7447 giải mã và tạo ra các tín hiệu
điều khiển thích hợp đưa đến các chân catốt a.b, g của LED. Mỗi giá trị cần
hiển thị được đưa đến cổng P2cứ mỗi 2ms một lần cho một đèn.
Giá trị số nói trên được hiện ra trên chử số thập phân nào lại là do các bit
của byte dữ liệu từ CPU đưa đến cổng PA của mạch 8255A quyết định.
Như vậy cứ mỗi 2ms thì ta phải đưa dữ liệu ra PB rồi PA và cho hiện ra
một giá trị số trên một đèn. Nếu cả thảy có 8 LED 7 nét thì ta mất 16ms để cho
hiện số ra cả dãy đèn. Quá trình trên lặp đi lặp lại làm cho ta có cảm giác là đèn
sáng liên tục mặc dù trong thực tế chúng được điều khiển để sáng không liên
tục.
Một phương pháp phối ghép giống như trên nhưng không dùng mạch giải
mã SN7447 cũng rất hay được sử dụng. Thay vì mạch SN7447 như trên, tại đây
10
ta dùng một bộ khuếch đại đệm chỉ để nâng cao khả năng tải của cổng PB. Vì
thế trong trường hợp này CPU phải đưa đến PB không phải là 4 bit mã BCD của
giá trị số hiển thị mà là các mẫu 7 bit để làm sáng các nét tương ứng với giá trị
số đó. Như vậy CPU phải để thì giờ để chuyển đổi từ giá trị số hệ 16 sang mẫu
bit dành cho các nét của LED.
2.1.3. Khối chấp hành
Đầu vào : Lấy từ 89C51.
Đầu ra : Nối với động cơ.
• Nhiệm vụ khối chấp hành:
Khối này nhận tín hiệu điều khiển từ 89C51 để điều khiển chiều quay
động cơ (chiều dịch chuyển của thanh chắn).
Sơ đồ khối.
Sơ đồ mạch điều khiển chiều quay động cơ.
H2.6: Sơ đồ mạch điều khiển động cơ truyền động thanh chắn
• Nguyên lý hoạt động :
11
VI ĐIỀU
KHIỂN
Điều khiển
chiều quay
động cơ
Động cơ
Đầu A, B lấy tín hiệu từ 89C51.
+Khi A=1, B=0 , thì đầu ra của mạch điều khiển sẽ đặt lên động cơ một
điện áp 1 chiều 7V Làm động cơ quay theo 1 chiều nhất định.
+Khi A=0, B=1 , thì đầu ra của mạch điều khiển sẽ đặt lên động cơ một
điện áp 1 chiều 7V ngược cực tính với trường hợp trước Làm động cơ quay
theo chiều ngược với trường hợp trước.
Như vậy, với việc điều khiển mức tín hiệu ra của vi điều khiển ta đã điều
khiển được chiều quay của động cơ theo ý muốn.
Động cơ được lựa chọn trong mạch ứng dụng này là động cơ 1 chiều. Động
cơ quay khi điện áp đặt vào nó từ 5V-12V. Chiều quay của động cơ thay đổi khi
đổi vị trí 2 cực điện áp đặt vào.
2.1.4. Khối xử lý
R1
10k
R2
10k
R3
10k
R4
10k
C1
33pF
X2
CRYSTAL
C2
33pF
C3
10u
R5
8.2k
XTAL2
18
XTAL1
19
ALE
30
EA
31
PSEN
29
RST
9
P0.0/AD0
39
P0.1/AD1
38
P0.2/AD2
37
P0.3/AD3
36
P0.4/AD4
35
P0.5/AD5
34
P0.6/AD6
33
P0.7/AD7
32
P1.0
1
P1.1
2
P1.2
3
P1.3
4
P1.4
5
P1.5
6
P1.6
7
P1.7
8
P3.0/RXD
10
P3.1/TXD
11
P3.2/INT0
12
P3.3/INT1
13
P3.4/T0
14
P3.7/RD
17
P3.6/WR
16
P3.5/T1
15
P2.7/A15
28
P2.0/A8
21
P2.1/A9
22
P2.2/A10
23
P2.3/A11
24
P2.4/A12
25
P2.5/A13
26
P2.6/A14
27
U1
AT89C51
H2.7 : Khối xử lý
A. chức năng , hoạt động
• Mạch tạo dao động.
Ta dùng thạch anh 11,0592 MHz ghép thêm hai tụ gốm 33pF để tạo xung
clock đồng bộ cho toàn hệ thống.
12
• Mạch Reset.
Trong ứng dụng này chúng em thực hiện cơ chế Reset nguồn, tức là khi cấp
nguồn cho hệ thống vi điều khiển sẽ được Reset để chuẩn hoá hoạt động. Mạch
Reset thực hiện thông qua mạch RC, khi cấp nguồn, sẽ có xung mức cao đưa
vào chân RS của 89C51 trong hơn 2 chu kỳ máy khi đó vi điều khiển Reset hoạt
động.
• Nhận dữ liệu vào từ khối cảm biến.
Khối cảm biến có 2 bộ thu phát tín hiệu hồng ngoại làm nhiệm vụ phát hiện
đối tượng. Hai đầu báo hiệu của 2 bộ thu phát được đưa vào vi điều khiển (Chân
P3.0 và chân P3.1). Như đã trình bày ở trên đối đi vào hay đi ra theo 2 chu trình
khác nhau, nhờ đó mà phân biệt được. Sau khi được nối với vi điều khiển, các
thông tin về 2 quá trình này được đưa vào khối xử lý nhận biết và ra quyết định
cho khối chấp hành.
• Kết nối với khối hiển thị.
Dùng Port 2 (8 bit )của 89C51 để xuất dữ liệu cần hiển thị. Dữ liệu cần hiển
thị chính là số vị trí còn trống trong bãi đỗ. Đây là 8 bit nhị phân sau đó được
giải mã thành BCD rồi đưa ra khối hiển thị.
• Kết nối với khối chấp hành:
Dùng 2 chân của 89C51 để điều khiển khối chấp hành (điều chỉnh chiều quay
động cơ).
P3.2
P3.3
Khi có xe qua cửa hai bit này sẽ nhận các giá trị 0 1 khác nhau qua đó đưa
lên hoặc hạ xuống thanh chắn.
• Kết nối với bàn phím
Vì đây là mạch đếm số lượng vị trí còn trống trong bãi đỗ xe thông qua số
lượng xe ra vào nên ta cần phải cài đặt số lượng ban đầu cho thiết bị. Hơn nữa
mỗi bãi đỗ xe lại có khả năng chứa khác nhau nên vì vậy việc cập nhật giá trị
13
ban đầu cho bộ đếm là rất cần thiết. Ứng với 4led cho phép ta hiển thị tối đa
9999 vì vậy có thể nhập vào số đếm trong phạm vi từ 0 đến tối đa 9999, do đó
trong mạch sử dụng 10 phím số từ 0 đến 9. Và mỗi lần nhập số vào để nhận biết
là nhập mấy số hoặc đã nhập xong và muốn biết cho phép đếm chưa hoặc hủy
bỏ số vừa nhập phải cần sử dụng thêm các phím chức năng, nên em dùng thêm 6
phím chức năng từ A đến F. Do đó bàn phím gồm 16 phím được kết nối vào port
1 của 8051:
Sơ đồ khối kết nối như sau:
H2.8 : Sơ đồ khối kết nối bàn phím
2.2. SƠ ĐỒ HOÀN CHỈNH
C1
33pF
X2
CRYSTAL
C2
33pF
C3
10u
R5
8.2k
XTAL2
18
XTAL1
19
ALE
30
EA
31
PSEN
29
RST
9
P0.0/AD0
39
P0.1/AD1
38
P0.2/AD2
37
P0.3/AD3
36
P0.4/AD4
35
P0.5/AD5
34
P0.6/AD6
33
P0.7/AD7
32
P1.0
1
P1.1
2
P1.2
3
P1.3
4
P1.4
5
P1.5
6
P1.6
7
P1.7
8
P3.0/RXD
10
P3.1/TXD
11
P3.2/INT0
12
P3.3/INT1
13
P3.4/T0
14
P3.7/RD
17
P3.6/WR
16
P3.5/T1
15
P2.7/A15
28
P2.0/A8
21
P2.1/A9
22
P2.2/A10
23
P2.3/A11
24
P2.4/A12
25
P2.5/A13
26
P2.6/A14
27
U1
AT89C51
R1
10k
R2
10k
R3
10k
R4
10k
A
7
QA
13
B
1
QB
12
C
2
QC
11
D
6
QD
10
BI/RBO
4
QE
9
RBI
5
QF
15
LT
3
QG
14
U2
7447
A
7
QA
13
B
1
QB
12
C
2
QC
11
D
6
QD
10
BI/RBO
4
QE
9
RBI
5
QF
15
LT
3
QG
14
U3
7447
A
7
QA
13
B
1
QB
12
C
2
QC
11
D
6
QD
10
BI/RBO
4
QE
9
RBI
5
QF
15
LT
3
QG
14
U4
7447
A
7
QA
13
B
1
QB
12
C
2
QC
11
D
6
QD
10
BI/RBO
4
QE
9
RBI
5
QF
15
LT
3
QG
14
U5
7447
R6
10k
R7
10k
R8
10k
R9
10k
R10
10k
R11
10k
H2.7 : Sơ đồ kết nối phần cứng
14
8051
BÀN PHÍM
PORT 1
CHƯƠNG 3
THIẾT KẾ PHẦN MỀN
3.1. LƯU ĐỒ THUẬT TOÁN
3.1.1. Chương trình chính
Để hệ thống đi vào hoạt động trước hết ta phải cấp nguồn khởi động các
phần tử trong hệ thống. Tiếp đó ta tiến hành cài đặt thông số ban đầu cho hệ
thống. Đó là số lượng xe được phép vào bãi. Số liệu này được cài đặt thông qua
bàn phím. Sau đó khởi động bộ đếm, nhận dữ liệu từ khối cảm biến. Dữ liệu
nhận từ khối cảm biến sẽ được xử lý và hiển thị trên led số lượng vị trí còn trống
trong bãi thông qua việc so sánh số lượng cài đặt ban đầu với số lượng xe ra vào
bãi. Khi số lượng xe trong bãi đã đầy hệ thống ngừng hoạt động, báo hiệu cho
người quản lý biết không cho phép xe vào bãi nữa.
Lưu đồ thuật toán cho chương trình chính
15
Có xe qua
Nạp các giá trị ban đầu
Nhập số liệu từ bàn phím
Hết chỗ để
xe
S
Hiển thị số liêu đã nhập
Nâng thanh chắn
Gọi chương trình đếm
Chờ xe qua
Hạ thanh chắn
Kiểm tra chu
trình xe ra
vào
Không
có xe
Hiển thị
Hạ thanh chắn
End
Begi
n
Đ
16
3.1.2. Chương trình con
a) Chương trình nhập số liệu từ bàn phím
• Chương trình con nhấn số
Chương trình này cho phép nhập số thập phân. Nếu phím nhấn từ 0 đến 9
thì nhận số còn phím từ A đến F thì xóa số. Số nhận thì bit YES = [0], NO = [0].
Sau khi nhập số liệu xong nếu thấy qua led hiển thị đúng số liệu đã nhập vào thì
nhấn phím A tức là đặt bit YES = 1 (7E = 1) để kết thúc quá trình nhập số liệu.
Còn đang nhập nếu muốn bỏ số liệu vừa nhập vào thì nhấn phím phím B tức là
đặt bit NO = 1 (7D = 1).
• Chương trình con kiểm tra phím ấn: kiểm tra phím ấn
Nếu như có phím được ấn thì bit C = 1. Vì có khoảng thời gian nhấn phím nên gọi chương
trình dò tìm mã phím ấn 50 lần bằng việc nạp 50 vào R3 và giảm R3. Khi R3 = 0 thì cất mã
phím vào ngăn xếp. Trong lúc đợi phím được nhả ra gọi chương trình dò tìm mã phím ấn 50
17
Bắt đầu
C = 1
A = # 0AH
S
Xóa bit YES
Xoá bit NO
Gọi chương trình dò phím
Đ
Đặt bit YES
Xóa A
A = # 0BH
Đặt bit NO
Xóa cờ C
A - # 0AH
S
Đ
S
Đ
Ret
lần để xem phím có còn được nhấn nữa hay không. Khi R3 = 0 thì lấy mã phím trao cho thanh
ghi A.
• Chương trình dò mã phím ấn:
8051 luôn đọc dữ liệu từ Port 1 để dò tìm mã phím. Khi có một phím được ấn thì cờ
C= 1 và mã của phím ấn được lưu tạm thời vào thanh ghi R6. Sau đó tăng dần R6 lên 4 đơn vị
để dò mã phím tiếp theo, (mã phím )→ (A)
#50→ (R3)
Gọi CT dò mã
phím
C=0
S
R3 - 1
Có phím ấn
Đ
Đ
R3=0
S
Cất ACC
50 → R3
Gọi CT dò mã phím
C=1
Đ
R3 - 1
S
R3=
0
S
Đ
Lấy ACC
RET
18
Bắt đầu
Không có phím ấn
Đ
Đ
• Chương trình nhập số
Chương trình cho phép nhập các số từ 1 đến 9999. Nếu số được nhấn từ A đến F thì yêu
cầu nhập lại. Khi số được nhấn lưu vào thanh ghi A từ 1 đến 9: nếu chấp nhận số thì các bit
YES, NO = 0 và khi bit NO = 1 thì yêu cầu nhập lại sô khi bit YES = 1 thì thoát khỏi chương
19
Đ
R6 =0
#FE → A
# 4 → R6
A → R7
#4 → A
Xóa C
A –R6
A → R6
R7 → A
R7 → A
Xoay A
R6 - 1
Bắt đầu
A → R7
A → P1
Đọc port 1
A AND #0F0H
Xoay A
Xoay phải A qua C
Xóa C
A = # 0F0H
R6 + 4
R5 - 1
Đặt cờ c; R6 → A
R6 → A
Đ
S
C = 0
Đ (3)
S
S
(3)
Đ
(3)
R5 = 0
S
RET
Đ
trình. Các giá trị được nhập này được lưu vào các ô nhớ 7C (soluong1:lưu soluong byte thấp),
7D (soluong2: lưu soluong byte cao). Nếu đồng ý với số đã nhập thì nhấn A ngược lại là B
(xóa số đã nhập)
20
Bắt đầu
A = 0
Đ
S
bit 7D = 1
Đ
S
hiển thị “nhập 0”
nghin,tram,chuc,donvi ← # 00H
xóa yes,no
p0 ← #0h
p2 ← #0h
Gọi nhấn số thứ nhất
swap a
nghin,#a
p0,a
Gọi nhấn số thứ 2
bit 7E = 1
Đ
S
bit 7D = 1
Đ
RET
(1)
b) Chương trình con kiểm tra chu trình xe ra vào
Chu trình xe đi vào sẽ trải qua các giai đoạn sau:
+ Giai đoạn 1: P3.0 = 1; P3.1 = 1 (chờ xe đi qua)
+ Giai đoạn 2: P3.0 = 0; P3.1 = 1 ( Vào 1 )
21
tram,a
a + nghin
caidat2,a
p0,a
Gọi nhấn số thứ 3
(2)
bit 7E = 1
Đ
S
Đ
bit 7E = 1
S
donvi,a
a + chuc
caidat1,a
p2, caidat1
RET
A=#0AH
S
S
A=#0BH
Đ
Gọi chương trình dò phím
bit 7D = 1
S
swap a
chuc,a
p2,a
Gọi nhấn số thứ 4
Đ (1)
bit 7D = 1
Đ (1)
S
+ Giai đoạn 3: P3.0 = 0; P3.1 = 0 ( Vào 2 )
+ Giai đoạn 4: P3.0 = 1; P3.1 = 0 ( Vào 3 )
+ Giai đoạn 5: P3.0 = 1; P3.1 = 1 ( Vào 4 )
Chu trình xe ra cũng trải qua các giai đoạn sau:
+ Giai đoạn 1: P3.1 = 1; P3.0 = 1 ( chờ xe qua )
+ Giai đoạn 2: P3.1 = 0; P3.0 = 1 ( Ra1 )
+ Giai đoạn 3: P3.1 = 0; P3.0 = 0 (Ra2 )
+ Giai đoạn 4: P3.1 = 1; P3.0 = 0 ( Ra3 )
+ Giai đoạn 5: P3.1 = 0; P3.0 = 1 ( Ra4 )
Khi kiểm tra đúng chu trình đi vào bộ đếm giảm một giá trị, khi kiểm tra đúng
chu trình đi ra bộ đếm tăng lên một giá trị.
22
Ra4
Ra3
Ra2
Ra1
Vao4
Vao3
Vao2
Vao1
Wait
S
S
S
S
S
S
S
S
S
S
S
S
S
Đ
BEGIN
1,1
11
1,0
0,1
1,0
1,0
0,0
0,1
0,1
00
0,1
00
00
1,0
00
1,0
00
0,1
0,1
1,1
1,0
11
Đ
Đ
Đ
Đ
Đ
Đ
Đ
Đ
Đ
Đ
Đ
Đ
Đ
Đ
3.2. PHẦN MỀM
#include <sfr51.inc>
;=====================================================
;======================Khaibao==========================
;======================================================
soluong1 equ 02h
soluong2 equ 03h
caidat1 equ 25h
caidat2 equ 26h
nghin equ 21h
tram equ 22h
chuc equ 23h
donvi equ 24
yes bit 7dh
no bit 7eh
;=======================================
;=========chuong trinh chinh============
;=======================================
org 0h
main:
setb p3.0
setb p3.1
clr p3.6
clr p3.7
acall nhapso
mov a,chuc
swap a
mov b,#10
mul ab
add a,donvi
mov soluong1,a
mov a,nghin
swap a
mov b,#10
mul ab
add a,tram
mov soluong2,a
ljmp wait
;========================================
;=============chuong trinh nhap so=======
nhapso:
mov nghin,#0
mov tram,#0
mov chuc,#0
23
mov donvi,#0
clr yes
clr no
mov p2,#0
mov P0,#0
so1: lcall nhanso
jbc yes,thoat1
jbc no,nhapso
swap a
mov nghin,a
mov p0,a
so2: lcall nhanso
jbc yes,thoat1
jbc no,nhapso
mov tram,a
add a,nghin
mov caidat2,a
mov p0,a
so3: lcall nhanso
jbc yes,thoat1
jbc no,nhapso
swap a
mov chuc,a
mov p2,a
so4: lcall nhanso
jbc yes,thoat1
jbc no,nhapso
mov donvi,a
add a,chuc
mov caidat1,a
mov p2,caidat1
kt_nhapso: lcall kt_phiman
cjne a,#0ah,xoanhapso
ljmp thoat1
xoanhapso: cjne a,#0bh,kt_nhapso
ljmp nhapso
thoat1: ret
;*******************************************
;****CHUONG TRINH CON NHAN SO***************
;*******************************************
nhanso: clr yes
clr no
lcall kt_phiman
cjne a,#0ah,xoaso
setb yes
24
clr a
ljmp thoat0
xoaso: cjne a,#0bh,loaitru
setb no
ljmp thoat0
loaitru:
push acc
clr c
subb a,#0ah
pop acc
jnc nhanso
thoat0: ret
;*********************************************
;***CHUONG TRINH CON KIEM TRA CO PHIM NHAN****
;*********************************************
kt_phiman: mov r3,#50
back1: lcall domaphim
jnc kt_phiman
djnz r3,back1
push acc
back2: mov r3,#50
back3: lcall domaphim
jc back2
djnz r3,back3
pop acc
ret
;********************************************
;**** CHUONG TRINH DO MA PHIM ***************
;********************************************
domaphim:
mov a,#0feh
mov r6,#4
kiemtra:
mov p1,a
mov r7,A
mov a,p1
anl a,#0f0h
cjne a,#0f0h,cophiman
mov a,r7
rl a
djnz r6,kiemtra
clr c
sjmp thoat
cophiman:
mov r7,a
25