Tải bản đầy đủ (.docx) (27 trang)

Mạch đèn giao thông có giao tiếp với máy tính sử dụng PIC16F887

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 (753.28 KB, 27 trang )

Mạch Đèn Giao Thông Có Giao Tiếp Với Máy
Tính Sử Dụng PIC16F887

Mục Lục

Lời Nói Đầu
Từ khi ngành khoa học điện và điện tử ra đời đã mang lại rất nhiều thành công cho nhân
loại, góp phần thúc đẩy và phát triển rất nhiều ngành khác khi ứng dụng các thành tựu của khoa
học điện và điện tử đã tạo nên.
Trong đời sống hằng ngày cũng như trong công nghiệp, y tế, giáo dục, vận tải,… các ứng
dụng của điện tử mà đặc biệt là các hệ thống tự động hoá đã mang lại rất nhiều tiện ích và giúp
cho con người trong nhiều công việc từ đơn giản như việc đóng mở cửa tự động cho đến các hệ
thống phức tạp như trong các dây chuyền sản xuất trong công nghiệp.
Với đam mê và hiếu kỳ về các hệ thống điều khiển tự động cũng như sự lý thú của các ứng
dụng các mạch điện và điện tử, em đã chọn theo học ngành điện và điện tử cũng như rất thích tìm
hiểu về các môn học có liên quan đến lập trình và điều khiển.
Trong dịp này vừa là làm đồ án môn học 2 cũng vừa là cơ hội để em tìm hiểu thêm về các
loại IC điều khiển như họ 89, PIC, AVR, ARM,... Trước đây với đồ án môn học 1 em đã được
tiếp cận với IC 89S51 cho nên lần này em sẽ tìm hiểu về dòng PIC mà cụ thể là PIC16F887.
Và ngày nay việc giao tiếp giữa máy tính và thiết bị ngoại ngày quan trọng và phổ biến
hơn. Thế cho nên em đã chọn đề tài có giao tiếp giữa vi điều khiển và máy tính để tìm hiểu, học
hỏi, bổ sung kiến thức cũng như ứng dụng vào thực tế.
Đây mới là lần đầu làm về đề tài giao tiếp giữa vi điều khiển với máy tính cũng như lần đầu
sử dụng PIC16F887 làm mạch thực tế nên chắc chắn sẽ có nhiều hạn chế và sai sót mong quý
thầy cô và các bạn góp ý kiến để em được bổ sung nhiều kiến thức hơn cho học tập và nghiên
cứu. Chân thành cảm ơn


2



ĐỒ ÁN MÔN HỌC 2

Đề tài: Mạch Đèn Giao Thông Có Giao Tiếp Với Máy Tính

Chương 1 : Thiết Kế - Khảo Sát Sơ Đồ Khối
I. Giới Thiệu Về Đề Tài :
Trước đây em đã được làm một số mạch ứng dụng với vi điều khiển 89S51 cũng như đã
được thực tập về các module ứng dụng của IC này. Nay với mục đích tìm hiểu về một ứng dụng
có tính chất thực tế sử dụng vi điều khiển PIC16F887 để hiểu thêm về dòng IC này nên em quyết
định chọn đề tài để làm đồ án lần này là “mạch đèn giao thông sử dụng vi điều khiển
PIC16F887 có giao tiếp với máy tính”.
Trong cuộc sống hằng ngày, mọi chúng ta khi tham gia giao thông trên các tuyến đường thì
đều đã thấy qua các trụ đèn giao thông. Nó quá phổ biến đến mức trở nên quen thuộc với người
tham gia giao thông và cũng chính là công cụ giúp giao thông được thông suốt với trật tự và lề lối
của khuôn khổ pháp luật quy định xanh chạy, đỏ dừng, vàng là chuẩn bị chuyển sang đỏ.
Như đã quan sát các trạm đèn giao thông tại các giao lộ, em thấy có trạm có hộp điều khiển
để chọn chế độ tự động hay điều khiển bằng tay hay chọn chế độ cho đường ưu tiên hơn, có trạm
không cần hộp điều khiển, cũng có trạm khi đến 23h mỗi ngày thì đèn chuyển sang trạng thái 2
đèn vàng ở 2 bên cùng chớp tắt vì giờ đó tình trạng giao thông không còn đông đúc nữa. Chính vì
vậy với mạch đèn giao thông em thiết kế và thực hiện lần này sẽ cố gắng mô phỏng một cách gần
nhất với thực tế và cũng có thêm phần giao tiếp giữa mạch và máy tính để việc cài đặt và điều
khiển tiện lợi và nhanh chóng hơn.
Mặc dù em đã tìm hiểu qua hình thức cũng như cách vận hành của các trạm đèn giao thông
và có mong muốn làm cho mạch của mình gần với thực tế nhất nhưng với mạch đèn giao thông
có giao tiếp với máy tính sử dụng vi điều khiển PIC16F887 của em chỉ ở mức độ mô phỏng một
phần nhỏ của ứng dụng.Cũng từ đây em nghĩ nếu có thể nghiên cứu nhiều hơn thì em sẽ phát
triển đề tài theo hướng điều khiển qua internet. Vì internet ngày nay thật sự là một công cụ hữu
ích cho nhân loại. Khi mạch được điều khiển từ internet thì sẽ rất tiện lợi cho việc điều khiển, vận
hành và giám sát một cách nhanh chóng.


II. Sơ Đồ Khối :
Từ yêu cầu đặt ra cho đề tài, ta thấy một trạm đèn giao thông trước tiên cần nhất chính là
phần hiển thị. Đó chính là các đèn tín hiệu xanh, đỏ, vàng và các led hiển thị thời gian còn lại của
mỗi bên. Kế đến phải nhắc tới là bộ phận xử lý, đây là bộ não của hệ thống vì nếu không có nó hệ
thống sẽ không thể làm việc được. Tiếp theo là phần điều khiển dùng để cài đặt thiết lập hay lựa
chọn chế độ. Chính vì đây là mạch có giao tiếp với máy tính nên không thể thiếu khối giao tiếp
giữa máy tính với vi điều khiển. Và một khối cực kỳ quan trọng mà trong bất kỳ mạch điện nào
cũng không thể thiếu đó chính là khối nguồn, nhưng do sử dụng nguồn riêng nên em xin không
trình bày về phần nguồn của mạch.
Từ đó, ta có thể mô tả mô hình mạch cho đề tài bằng sơ đồ khối như sau:

3
GVHD : Cô TRƯƠNG THỊ BÍCH NGÀ


ĐỒ ÁN MÔN HỌC 2

Đề tài: Mạch Đèn Giao Thông Có Giao Tiếp Với Máy Tính

Chức năng của các khối:

• Hiển thị: sử dụng led 7 đoạn hiển thị thời gian cho đèn giao thông.
• Đèn giao thông: các led đèn tín hiệu giao thông xanh, đỏ, vàng.
• Điều khiển: là các phím nhấn dùng để cài đặt tinh chỉnh thời gian hay chuyển chế độ ưu
tiên cho mỗi bên và công tắc để chuyển chế độ điều khiển tự động hay điều khiển bằng
tay.

• Giao tiếp: sử dụng cổng COM và qua IC chuyển đổi mức điện áp MAX232 để truyền
thông tin giữa vi điều khiển và máy tính.


• Vi điều khiển: sử dụng PIC16F887 để lập trình điều khiển cho mạch đèn giao thông, giải
mã hiển thị thời gian, xử lý tín hiệu điều khiển để chuyển chế độ khi có yêu cầu, giao tiếp
truyền nhận dữ liệu điều khiển từ máy tính.

• Máy tính: lập trình giao diện điều khiển và truyền dữ liệu điều khiển đến vi điều khiển để
thực hiện các chức năng theo yêu cầu.

4
GVHD : Cô TRƯƠNG THỊ BÍCH NGÀ


ĐỒ ÁN MÔN HỌC 2

Đề tài: Mạch Đèn Giao Thông Có Giao Tiếp Với Máy Tính

III. Thiết Kế Các Khối :
1) Khối Đèn Giao Thông :
Đây là các led đơn xanh, đỏ, vàng dùng làm các đèn tín hiệu để điều khiển các phương tiện
lưu thông trên đường theo đúng luật giao thông quy định. Theo đó, khi tín hiệu đèn xanh bên
phần đường nào sáng thì các phương tiện bên đó được phép lưu thông. Ngược lại với đèn đỏ thì
phải dừng lại. Còn tín hiệu đèn vàng báo hiệu cho người đi đường biết rằng sắp chuyển sang đèn
đỏ để chuẩn bị dừng lại. các trạng thái sáng tắt của các đèn tín hiệu này sẽ được điều khiển thông
qua vi điều khiển.

D1
330
V1
330
X1
330

Điện áp mà mỗi Led chịu được là 2V mà nguồn cung cấp của chúng ta là nguồn 5V nên cần
phải có điện trở hạn dòng và được tính chọn như sau:

+ Dòng qua mỗi led : 10mA
+ Nguồn cung cấp: 5 V
+ Áp rơi trên mỗi led: 2V
⇾ R⇾chọn R=330 � (giá trị điện trở có bán trên thị trường)

2) Khối Hiển Thị :
Khối hiển thị chính là các led 7 đoạn dùng để hiện thị giá trị thời gian còn lại của các trạng
thái của các tín hiệu xanh, đỏ, vàng đã được xử lý qua bộ vi điều khiển để cho ra các mã tương
ứng của led 7 đoạn.

5
GVHD : Cô TRƯƠNG THỊ BÍCH NGÀ


ĐỒ ÁN MÔN HỌC 2

Đề tài: Mạch Đèn Giao Thông Có Giao Tiếp Với Máy Tính

Bảng mã cho led 7 đoạn loại Anode chung :

Led 7 đoạn thật ra là 8 led đơn ghép lại nên việc tính chọn led hạn dòng cho led 7 đoạn
cũng như led đơn :

+ Dòng qua mỗi led : 10mA
+ Nguồn cung cấp: 5 V
+ Áp rơi trên mỗi led: 2V
⇾ R⇾chọn R=330 � (giá trị điện trở có bán trên thị trường)

Để việc hiển thị được hiệu quả hơn ta sử dụng phương pháp quét, nghĩa là tại một thời điểm
chỉ cho phép 1 led sáng nhưng do tính chất lưu ảnh của mắt nên ta thấy các led đều sáng. Để sử
dụng phương pháp quét ta phải dùng transistor và điều khiển bởi phần mềm. Vì ta dùng led 7

6
GVHD : Cô TRƯƠNG THỊ BÍCH NGÀ


ĐỒ ÁN MÔN HỌC 2

Đề tài: Mạch Đèn Giao Thông Có Giao Tiếp Với Máy Tính

đoạn loại anode chung nên chọn transistor loại pnp A1015 để quét. Led sẽ được phép sáng khi
cấp mức “0” cho A1015.

3) Khối Điều Khiển :

Ta sử dụng công tắc để chọn chế độ tự động hay điều khiền bằng tay khi có yêu cầu ví dụ
như trong giờ cao điểm giữa đường ưu tiên và đường ít ưu tiên hơn thì các con đường chính có
lượng xe lưu thông nhiều hơn thì cần phải có thời gian nhiều hơn hoặc do người cảnh sát giao
thông điều khiển sao cho các phương tiện lưu thông tốt nhất để tránh ùn tắc giao thông. Với nút
nhấn dùng để chuyển trạng thái giữa các bên. Ta chọn tín hiệu điều khiển mức “0” nên công tắc
và nút nhấn nối với mass, điện trở kéo lên nguồn dùng hạn dòng vào pic và cho mức “1” khi
không tác động.

10k
RC0

10k
RC1


4) Khối Vi Điều Khiển :

7
GVHD : Cô TRƯƠNG THỊ BÍCH NGÀ


ĐỒ ÁN MÔN HỌC 2

Đề tài: Mạch Đèn Giao Thông Có Giao Tiếp Với Máy Tính

Ta sử dụng vi điều khiển PIC16F887 dùng để lập trình và điều khiển hệ thống hoạt động
cũng như nhận dữ liệu điều khiển truyền từ máy tính xuống để xử lý và điều khiển. Hiện nay có
rất nhiều họ vi điều khiển khác nhau và mỗi họ là có rất nhiều dòng khác nhau. Ở đây, em chọn
PIC16F887 vì nó hầu như giống với PIC16F877A mà giá rẻ hơn nên rất phù hợp cho việc nghiên
cứu của sinh viên. Việc chọn PIC mà không chọn các họ khác như ATMEGA, 89X, ARM,… vì
em đã được học cơ bản qua nó mà chưa được làm mạch thực tế nên lần này quyết định làm đề tài
với PIC.

 Một số thông số cơ bản về PIC16F887:
-

Vi điều khiển 8-bit của Microchip, thuộc dòng Low-power.

-

Kiến trúc Harvard (vs. Von Neumann), tập lệnh RISC (Reduced Instructions Set
Computer) (vs. Complexed Instructions Set Computer) với 35 lệnh.

-


Thạch anh gắn ngoài tối đa 20MHz.

-

Tầm điện áp hoạt động 2.0V- 5.5V.

-

Dòng điện vào/ ra tối đa: 25 mA.

-

5 port, 35 chân xuất nhập (I/O pins)

-

Có đầy đủ các chức năng cần thiết của Vi điều khiển 8-bit: Timer (3 bộ), ADC (14 kênh
ADC 10-bit), EUSART, SPI, I2C, PWM, Compare, …

-

Bộ nhớ chương trình 8192 word FLASH, 368 byte SRAM, 256 byte EEPROM.

-

Có thể ghi/xoá EEPROM khoảng 1.000.000 lần.

-


Bộ nhớ lưu trữ trên 40 năm.

 Sơ đồ chân của PIC16F887:

8
GVHD : Cô TRƯƠNG THỊ BÍCH NGÀ


ĐỒ ÁN MÔN HỌC 2

Đề tài: Mạch Đèn Giao Thông Có Giao Tiếp Với Máy Tính

 Sơ đồ nối dây cơ bản để PIC16F887 hoạt động:
VC C

MAIN MCU
PIC16F887

R _R S
10K
SW _R S

0

PVN 1
1

SS*

2

3
4
5
6
7

J_PA
1
2
3
4
5
6

PO R T A

SW R ESET

VC C

PO R T C

J_PC 1
2
3
4
5
6
7
8


0
VC C

SC L
SD A
TX
R X

C _X1

5
6
7
8
3
4
5
6

13
22p
4M hz
XTA L

0
C _X2

0


14

22p

12
31

A
A
A
A
A
A

0
1
2
3
4
5

/A N 0
/A N 1
/A N 2 /V R E F -/C V R E F
/A N 3 /V R E F +
/T 0 C K I/C 1 O U T
/A N 4 /S S * /C 2 O U T

R
R

R
R
R
R
R
R

C
C
C
C
C
C
C
C

0 /T 1 O S O /T 1 C K I
1 /T 1 O S I/C C P 2
2 /C C P 1
3 /S C K /S C L
4 /S D I/S D A
5 /S D O
6 /T X/C K
7 /R X /D T

R
R
R
R
R

R
R
R

D
D
D
D
D
D
D
D

0
1
2
3
4
5
6
7

/P
/P
/P
/P
/P
/P
/P
/P


S
S
S
S
S
S
S
S

P
P
P
P
P
P
P
P

0
1
2
3
4
5
6
7

1
2

3
4
5
6
7
8

J_PB

19
20
21
22
27
28
29
30

1
2
3
4
5
6
7
8

J_PD

8

9
10

1
2
3

33
34
35
36
37
38
39
40

PG C
PG D

J_PE

O S C 1 /C L K IN
R E 0 /R D * /A N 5
R E 1 /W R * /A N 6
R E 2 /C S * /A N 7
O S C 2 /C L K O U T
VSS
VSS

VD D

VD D
P IC 1 6 F 8 8 7

0

 Để thực hiện xuất / nhập trên 1 chân (Pin):

9
GVHD : Cô TRƯƠNG THỊ BÍCH NGÀ

11
32

VC C

PO R T E

C _3231
104

SC K
SD I
SD O

1
1
1
1
2
2

2
2

R
R
R
R
R
R

R B 0 /IN T
R B1
R B2
R B 3 /P G M
R B4
R B5
R B 6 /P G C
R B 7 /P G D

PO R T D

C _1112
104

M C L R * /V P P

PO R T B

M C LR



ĐỒ ÁN MÔN HỌC 2

Đề tài: Mạch Đèn Giao Thông Có Giao Tiếp Với Máy Tính

-

Cài đặt đúng giá trị cho thanh ghi TRISx (hoặc bit TRISx-n), với x/n là A,B,C,D,E.

-

Đặt kiểu tín hiệu của pin là Analog hay Digital qua 2 thanh ghi ANSEL và ANSELH.

-

Xuất tín hiệu bằng cách ghi giá trị “0” hoặc “1” vào port tương ứng (bit: Rx-n hay port:
PORTx)

-

Đọc giá trị của chân bằng cách đọc mức logic trên port tương ứng.

5) Khối Giao Tiếp :
Khối giao tiếp có chức năng giao tiếp giữa máy tính với vi điều khiển PIC16F887 hay nói
cách khác nó có nhiệm vụ truyền nhận dữ liệu điều khiển giữa vi điều khiển với máy tính. Ở đây
ta dùng chuẩn giao tiếp nối tiếp RS232 qua cổng COM và sử dụng IC chuyển đổi mức tín hiệu
MAX232 vì nó đơn giản và dễ cho người mới làm quen với việc lập trình giao tiếp máy tính.

 Giới thiệu về cổng COM : có 2 dạng là DP25, có 25 chân thường dùng trong công nghiệp và
DP9, có 9 chân và thường dùng nhất. Trong ứng dụng này ta chỉ sử dụng 2 chân TXD và RXD để

truyền nhận dữ liệu và chân 5 nối mass chung.

- Hình dáng và sơ đồ chân của cổng COM:

-

Tên và chức năng các chân:

10
GVHD : Cô TRƯƠNG THỊ BÍCH NGÀ


ĐỒ ÁN MÔN HỌC 2

Đề tài: Mạch Đèn Giao Thông Có Giao Tiếp Với Máy Tính

Vì tín hiệu cổng COM thường ở mức +12V, -12V nên không tương thích với điện áp TTL
nên để giao tiếp vi điều khiển với máy tính qua cổng COM ta phải qua một vi mạch biến đổi điện
áp cho phù hợp với mức TTL, ta chọn vi mạch MAX232 để thực hiện việc tương thích điện áp.

 Giới thiệu IC max 232:
Vi mạch MAX 232 của hãng MAXIM là một vi mạch chuyên dùng trong giao diện nối
tiếp với máy tính. Chúng có nhiệm vụ chuyển đổi mức TTL ở lối vào thành mức +12V hoặc –
12V ở phía truyền và các mức +3…+15V hoặc -3…-15V thành mức TTL ở phía nhận.
Vi mạch MAX 232 có hai bộ đệm và hai bộ nhận. Đường dẫn điều khiển lối vào CTS,
điều khiển việc xuất ra dữ liệu ở cổng nối tiếp khi cần thiết, được nối với chân 9/12 của vi mạch
MAX 232. Còn chân RST (chân 10/11 của vi mạch MAX ) nối với đường dẫn bắt tay để điều
khiển quá trình nhận. Thường thì các đường dẫn bắt tay được nối với cổng nối tiếp qua các cầu
nối, để khi không dùng đến nữa có thể hở mạch các cầu này. Cách truyền dữ liệu đơn giản nhất là
chỉ dùng ba đường dẫn TxD, RxD và GND (mass).


-

Sơ đồ kết nối chân và kết nối cơ bản của MAX232:

11
GVHD : Cô TRƯƠNG THỊ BÍCH NGÀ


ĐỒ ÁN MÔN HỌC 2

-

Đề tài: Mạch Đèn Giao Thông Có Giao Tiếp Với Máy Tính

Sơ đồ kết nối giữa cổng COM và MAX232 tới vi điều khiển:

12
GVHD : Cô TRƯƠNG THỊ BÍCH NGÀ


ĐỒ ÁN MÔN HỌC 2

Đề tài: Mạch Đèn Giao Thông Có Giao Tiếp Với Máy Tính

Chương 2 : Thi Công Mạch
Sơ Đồ Nguyên Lý Của Mạch :

I.


D1
XA N H 1
D2
5VD C

13
5 V D C5 V D C

16

C4
10uF

2

C6
10uF

6

U2
R 1 IN
R 2 IN
T1O U T
T2O U T

C 1+

V+


C 1C 2+

C 8 M A X232
10uF

0
0

T 2 IN
T 1 IN
R 1O U T
R 2O U T

VCC

V-

C 2-

Y1
12M H z

10
11
12
9
1
3
4
5


5
B

4

3

B

A

A

VCC

1

2

5

D8

F

F

4


G

G

B

B

A

2

A

VCC

1
G

5
B

A

3
VCC

1

2

F

5

G

4

VCC

B

A

3

2
F

1

F

D9

LED 7_D O N _1

D 10

LE D 7_D O N _1


LED 7_D O N _1
DOT

C

VCC

D

E

DOT

C

VCC

D

E

DOT

C

VCC

D


E

30
29
28
27
22
21
20
19

D
D
D
D

_C
_D
_C
_D

C

C
Q2

C
Q3

E


D

6

D

7

E

8

D

6

E

Q1

7

D

8

E

H1

V1
H2
V2

9

LE
LE
LE
LE

10

R 17

9

0
10

P7
P6
P5
P4
P3
P2
P1
P0

D7


6

7 /P S
6 /P S
5 /P S
4 /P S
3 /P S
2 /P S
1 /P S
0 /P S

G

Q4

31

C
Q4

4K7

P IC 1 6 F 8 7 7 A

GND

13
8
14

7

D
D
D
D
D
D
D
D

Q4

A 1015

5VD C

J2

C2
33p

CON5

C3
33p

J1
1
2


0

CON2

0
1 9
C5
10uF

4039

0

C7
10uF

15

P1

R
R
R
R
R
R
R
R


B

7

0 /T 1 O S O /T 1 C K I
1 /T 1 O S I/C C P 2
2 /C C P 1
3 /S C K /S C L
4 /S D I/S D A
5 /S D O
6 /T X /C K
7 /R X /D T

A

LED 7_D O N _1

8

C
C
C
C
C
C
C
C

5VD C


32

LE D _D V1

Q3

Q3

F

9

R
R
R
R
R
R
R
R

G

DOT

Vss

B

C


Vss

G

M C L R /V p p

Vdd

A

5VD C

A1015
Q2

10

SW 3
IN V

0

0

F

1
2
3

4
5

S W M A G -S P D T

0

15
16
17
18
23
24
25
26

Vdd

330

G
F
E
D
C
B
A

VCC


12

4
6
8
10
12
13
14

E

11

39
38
37
36
35
34
33

R
R
R
R
R
R
R


40
39

9

8
9
10

0 40

10

R 16
SW 2

COM

G

1
R 15

9

A 0 /A N 0
R B 7 /P G D
A 1 /A N 1
R B 6 /P G C
A 2 /A N 2 /V re f RB5

A 3 /A N 3 /V re f +
RB4
A 4 /T 0 C K I/C 1 O U T R B 3 /P G M
A 5 /A N 4 /S S /C 2 O U T
RB2
RB1
R E 0 /R D /A N 5
R B 0 /IN T
R E 1 /W R /A N 6
R E 2 /C S /A N 7

O S C 2 /C L K O

5VD C

R
R
R
R
R
R

14

0

2
3
4
5

6
7

O S C 1 /C L K I

R2
R3
R5
R7
R9
R 11
330
5VD C

LED _C H 1

Q2

A1015
Q1

RESET

U1

DO 2

1
6
2

7
3
8
4
9
5

SW 1

C1
10uF

D

1

VANG 2
D6

LED _D V2

Q1

A1015

8

XA N H 2
D5


5V D C

F

LED _C H 2

D4

5VD C

3

5VD C

4

R1
R

6

DO 1

7

VANG 1
D3

0


II. Nguyên Lý Hoạt Động Của Mạch :
Mọi người chúng ta khi lưu thông trên đường hầu như đều biết đến đèn giao thông và chức
năng cũng như cách thức hoạt động của nó. Ở đây, em chỉ thực hiện một mô hình nhỏ nhầm mô
phỏng lại 1 phần hoạt động của đèn giao thông. Chắc chúng ta ai cũng đã hiểu rõ đèn giao thông

13
GVHD : Cô TRƯƠNG THỊ BÍCH NGÀ


ĐỒ ÁN MÔN HỌC 2

Đề tài: Mạch Đèn Giao Thông Có Giao Tiếp Với Máy Tính

làm việc thế nào, em xin được trình bày về mô hình mạch đèn giao thông sử dụng PIC16F887 có
giao tiếp mà em thực hiện đề tài.
Mạch có 2 nguồn điều khiển là điều khiển trên board mạch và điều khiển trên máy tính. Sử
dụng công tắc và nút nhấn để điều khiển trực tiếp trên board mạch như sau: khi mới cấp nguồn
mạch sẽ mặc định chạy ở chế độ tự động với đèn đỏ sáng 25s, đèn xanh sáng 20, đèn vàng sáng
5s đó là chế độ hoạt động bình thường và khi cần thiết thí dụ trường hợp trong giờ cao điểm hay
kẹt xe giữa các giao lộ thì ta có thể chuyển sang chế độ điều khiển bằng tay dùng công tắc. Tiếp
đó ta dùng 1 phím nhấn để thay đồi trạng thái đèn xanh và đỏ mỗi bên, cụ thể là khi chuyển sang
chế độ điều khiển bằng tay thì xanh 1 đỏ 2 sáng thì khi ta nhấn phím thì xanh 2 đỏ 1 sáng và cứ
tiếp tục như thế để cho phép bên phần đường nào được phép lưu thông. Khi ở chế độ tự động thì
các led 7 đoạn hiển thị thời gian đếm ngược sau mỗi giây cho mỗi bên. Còn ở chế độ bằng tay chỉ
có led xanh va đỏ mỗi bên sáng.
Đối với việc điều khiển thông qua máy tính, thì ta dùng cổng COM kết nối giữa mạch điện
và máy tính truyền nhận dữ liệu điều khiển cho hệ thống . Điều khiển bằng máy tính ta phải tạo 1
giao diện trên máy tính và lập trình để xử lý tín hiệu. Ta có thể chọn ngôn ngữ lập trình trên máy
tính như VB,C#,…Ở đây em chọn ngôn ngữ lập trình C# vì nó có nhiều hàm hỗ trợ và trực quan
hơn.

Khi ta điều khiển trên máy tính thì ta sẽ click vào button CONNECT để báo cho vi điều
khiển biết sẽ chọn chế độ điều khiển qua RS232. Sau đó ta check vào checkbox
AUTO/MANUAL để chọn chế độ tự động hay điều khiển tay như điều khiển trên board. Khi
check vào AUTO/MANUAL thì sẽ chọn chế độ điều khiển bằng tay và khi đó ta click vào 2
button RUN_A hay RUN_B để cho phép bên được chọn lưu thông hay đèn xanh bên đó sáng và
ngược lại đèn đỏ phía còn lại sáng. Khi không cần điều chỉnh bằng máy tính nữa thì ta nhấn
button DISCONNECT để mạch trở lại hoạt động dưới sự điều khiển trực tiếp trên mạch.
Trong ngày khi vào buổi tối khoảng từ 21g đến 6g thì lượng xe lưu thông không còn nhiều
nên ta sẽ cho đèn vàng mỗi bên chớp tắt với tần số 1hz để báo chế độ ban đêm.

III.

Lưu Đồ Giải Thuật Cho Chương Trình Xử Lý :

14
GVHD : Cô TRƯƠNG THỊ BÍCH NGÀ


ĐỒ ÁN MÔN HỌC 2

Đề tài: Mạch Đèn Giao Thông Có Giao Tiếp Với Máy Tính

1. Lưu Đồ Cho Chương Trình Chính:

2. Lưu Đồ Cho Chương Trình Ngắt TIMER1:
15
GVHD : Cô TRƯƠNG THỊ BÍCH NGÀ


ĐỒ ÁN MÔN HỌC 2


Đề tài: Mạch Đèn Giao Thông Có Giao Tiếp Với Máy Tính

3. Lưu Đồ Cho Chương Ngắt Truyền Dữ Liệu Nối Tiếp:

16
GVHD : Cô TRƯƠNG THỊ BÍCH NGÀ


ĐỒ ÁN MÔN HỌC 2

Đề tài: Mạch Đèn Giao Thông Có Giao Tiếp Với Máy Tính

Ngắt RDA

Nhận dữ liệu

Index_xmit =3?

Index_xmit=0
Truyền thời gian a,b
Index_xmit ++

Rcv_data =250?

Index_rcv =0
Nhận
thời gian ++
từ PC
Index_xmit


Index_rcv ++

RETURNI

IV. Chương Trình Phần Mềm Cho Vi Điều Khiển PIC Viết Bắng CCS :
#include<16F887.h>

17
GVHD : Cô TRƯƠNG THỊ BÍCH NGÀ


ĐỒ ÁN MÔN HỌC 2

Đề tài: Mạch Đèn Giao Thông Có Giao Tiếp Với Máy Tính

#include<KhaiBaoTGhi_16F877A.h>
#fuses nowdt, noput, hs, noprotect, nolvp
#use delay(clock=11059000)
#use fast_io(all)
#use rs232(baud =9600, parity = n, xmit = pin_c6, rcv = pin_c7)
#define mode input(pin_c0)
#define toggle input(pin_c1)
//********* khai bao bien *****************
INT8 j,k,chuc1,chuc2,dvi1,dvi2;
INT16 t_do,a,t_xanh,b;
unsigned char btu,_btu,btt1=0,btt2=1;
unsigned char rcv_data;
unsigned char connect = 'H',mode_cp,RUN= 0;
unsigned char index_rcv=5,date[3],hour,minute,second;

unsigned char TIMER_AB[4],index_xmit = 0;
const UNSIGNED char
dig[]=
{0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
//********* chuong trinh con *************
//************* khoi tao *********
void initiation()
{
// khoi tao cho port b.d.a la ngo ra va c0,c1 vao
set_tris_a (0x00);
set_tris_b (0x00);
trisc0 = 1;
trisc1 = 1;
set_tris_d (0x00);
//xoa hien thi
PORTA = 0X00;
PORTB = 0XFF;
PORTD = 0XFF;
j = 0; // khoi tao cho bien dem timer 1
k = 0; // khoi tao cho bien dem cua tung cot
t_DO = 24; // gan gia tri ban dau cho den do va xanh
t_xanh = 19;
SET_TIMER1(3035); // DAT SO DEM CHO TIMER 1
T1CON = 0X35; // KHOI TAO GIA TRI CHO TIMER
enable_interrupts (GLOBAL); // cho phep ngat toan bo
enable_interrupts (INT_RDA); // cho phep ngat truyen thong
}

18
GVHD : Cô TRƯƠNG THỊ BÍCH NGÀ



ĐỒ ÁN MÔN HỌC 2

Đề tài: Mạch Đèn Giao Thông Có Giao Tiếp Với Máy Tính

//********* ngat truyen thong ************
#INT_RDA
void uart_datas()
{
rcv_data = getc();
if(index_xmit == 3)index_xmit = 0;
else
{
putc(TIMER_AB[index_xmit]);
index_xmit ++;
}
if (rcv_data == 250)index_rcv = 0;
else
{
date[index_rcv] = rcv_data;
index_rcv ++;
}
if(index_rcv == 255)index_rcv = 5;
hour = date[0];
minute = date[1];
second = date[2];
}
//********** ngat timer 1 ****************
#INT_TIMER1

VOID timer1_interrupt() //bat dau chuong trinh ngat
{
j++;
IF (j == 10) // khi j = 10 thi thoi gian dung 1s
{
k = k + 1; // bien k dung xac dinh thoi gian cho cot 1
IF ( (k < 26)&& (k > 0))
{
a = t_DO;
t_DO = t_do - 1;
b = t_xanh;
t_xanh = t_xanh - 1;
IF (a < 5) //thoi gian hien thi cho led vang
{
porta = 0x14; // den vang 2 va DO 1 sang
b = a;
}

19
GVHD : Cô TRƯƠNG THỊ BÍCH NGÀ


ĐỒ ÁN MÔN HỌC 2

Đề tài: Mạch Đèn Giao Thông Có Giao Tiếp Với Máy Tính

ELSE
porta = 0x0C; // den xanh 2 va DO 1 sang
}
IF ((k < 26)&& (k > 24)) // khi du 25s thi chuyen sang cot 2

{
t_DO = 24;
t_xanh = 19;
}
IF (k > 25) // bat dau hien thi cho cot 2
{
b = t_DO;
t_DO = t_do - 1;
a = t_xanh;
t_xanh = t_xanh - 1;
IF (b < 5) //khi den xanh du 20s thi den vang bat dau sang
{
porta = 0x22; // den DO 2 va vang 1 sang
a = b;
}
ELSE
porta = 0x21; // den DO 2 va xanh 1 sang
}
TIMER_AB[0]=50;
TIMER_AB[1]=a;
TIMER_AB[2]=b;
chuc1 = a / 10;
dvi1 = a % 10;
chuc2 = b / 10;
dvi2 = b % 10;
IF (k > 49) // khi cot 2 xong 25s thi chuyen ve cot 1
{
k = 0; // KHOI TAO LAI GIA TRI DEM BAN DAU
t_DO = 24;
t_xanh = 19;

}
SET_TIMER1 (3035); // CAI LAI THOI GIAN CHO TIMER 1
j = 0;

20
GVHD : Cô TRƯƠNG THỊ BÍCH NGÀ


ĐỒ ÁN MÔN HỌC 2

Đề tài: Mạch Đèn Giao Thông Có Giao Tiếp Với Máy Tính

}
SET_TIMER1 (3035); // CAI LAI THOI GIAN CHO TIMER 1
}
//*********** xu ly data nhan duoc ********************
void select_data()
{
switch (rcv_data)
{
case '1': connect = 'S';
break;
case '2': connect = 'H';
break;
case '3': mode_cp = 'M';
break;
case '4': mode_cp = 'A';
break;
case '5': RUN = 0;
break;

case '6': RUN = 1;
break;
default:
break;
}
}
//*********** hien thi led don che do dieu khien tay****
void manual_led()
{
OUTPUT_BIT(PIN_A0, btt1);
OUTPUT_BIT(PIN_A5, btt1);
OUTPUT_BIT(PIN_A2, btt2);
OUTPUT_BIT(PIN_A3, btt2);
}
//*********** hien thi thoi gian *********************
void display_7seg()
{
portb = dig[chuc1]; // dua gia tri chuc 1 ra portb
portd = 0xf7; // chi led o vi tri chuc 1 sang
delay_ms (1); // dung de nhin thay duoc led sang
portd = 0xff; // chong lem
portb = dig[dvi1]; // dua gia tri dvi 1 ra portb
portd = 0xfb; // chi led o vi tri dvi 1 sang

21
GVHD : Cô TRƯƠNG THỊ BÍCH NGÀ


ĐỒ ÁN MÔN HỌC 2


Đề tài: Mạch Đèn Giao Thông Có Giao Tiếp Với Máy Tính

delay_ms (1); // dung de nhin thay duoc led sang
portd = 0xff; // chong lem
portb = dig[chuc2]; // dua gia tri chuc 2 ra portb
portd = 0xfd; // chi led o vi tri chuc 2 sang
delay_ms (1); // dung de nhin thay duoc led sang
portd = 0xff; // chong lem
portb = dig[dvi2]; // dua gia tri dvi 2 ra portb
portd = 0xfe; // chi led o vi tri dvi 2 sang
delay_ms (1); // dung de nhin thay duoc led sang
portd = 0xff; // chong lem
}
//***************** chuong trinh chinh ****************
VOID main () // bat dau chuong trinh chinh
{
initiation();
while(true)
{
select_data();
if(hour > 5 && hour < 22)
{
if(connect == 'H')
{
if(mode == 0)
{
disable_interrupts(INT_TIMER1);//xoa ngat timer1
porta = 0x00;
btu = toggle;
if (btu == 0) //kiem tra nhan phim

{
_btu = btu;
while(btu == _btu)
{btu = toggle;}
btt1 = !btt1;
btt2 = !btt2;
}
manual_led();
}
if (mode == 1)
{
enable_interrupts(INT_TIMER1); // cho phep ngat timer1
display_7seg();
}

22
GVHD : Cô TRƯƠNG THỊ BÍCH NGÀ


ĐỒ ÁN MÔN HỌC 2

Đề tài: Mạch Đèn Giao Thông Có Giao Tiếp Với Máy Tính

}
if(connect == 'S')
{
if(mode_cp == 'M')
{
disable_interrupts(INT_TIMER1);// xoa ngat timer1
porta = 0x00;

if(RUN == 1)porta = 0x21;
else porta = 0x0c;
}
if (mode_cp == 'A')
{
enable_interrupts(INT_TIMER1); // cho phep ngat
display_7seg();
}
}
}
else
{
porta = 0x00;
disable_interrupts(INT_TIMER1);
output_high(pin_a1);
output_high(pin_a4);
delay_ms(500);
output_low(pin_a1);
output_low(pin_a4);
delay_ms(500);
}
}
}

V.

Chương Trình Phần Mền Lập Trình Giao Diện Trên Máy Tính Viết
Bằng C# :

namespace giao_dien

{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
int temp = 0,index = 3;
int[]buffer = new int[10];

23
GVHD : Cô TRƯƠNG THỊ BÍCH NGÀ


ĐỒ ÁN MÔN HỌC 2

Đề tài: Mạch Đèn Giao Thông Có Giao Tiếp Với Máy Tính

Byte[] buf = new Byte[10];
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
COM_2.Close();
}
private void Form1_Load(object sender, EventArgs e)
{
COM_2.Open();
}
private void CONNECT_Click(object sender, EventArgs e)
{
COM_2.Write(new char[] { '1' }, 0, 1);

}
private void DISCONNECT_Click(object sender, EventArgs e)
{
COM_2.Write(new char[] { '2' }, 0, 1);
}
private void MODE_CheckedChanged_1(object sender, EventArgs e)
{
if (MODE.Checked == true)
{ COM_2.Write(new char[] { '3' }, 0, 1); }
else
{ COM_2.Write(new char[] { '4' }, 0, 1); }
}
private void RUN_A_Click(object sender, EventArgs e)
{
COM_2.Write(new char[] { '5' }, 0, 1);
}
private void RUN_B_Click(object sender, EventArgs e)
{
COM_2.Write(new char[] { '6' }, 0, 1);
}
private void timer1_Tick(object sender, EventArgs e)
{
DateTime dt = DateTime.Now;
buf[0] = 250;
buf[1] = (Byte)dt.Hour;
buf[2] = (Byte)dt.Minute;
buf[3] = (Byte)dt.Second;
this.textBox2.Text = buffer[0].ToString();
this.textBox1.Text = buffer[1].ToString();
textBox3.Text = DateTime.Now.ToString("HH:mm:ss");


24
GVHD : Cô TRƯƠNG THỊ BÍCH NGÀ


ĐỒ ÁN MÔN HỌC 2

Đề tài: Mạch Đèn Giao Thông Có Giao Tiếp Với Máy Tính

COM_2.Write(buf, 0, 4);
}
private void COM_2_DataReceived(object sender,
System.IO.Ports.SerialDataReceivedEventArgs e)
{
temp = COM_2.ReadByte();
if (temp == 50)
{
index = 0;
}
else
{
buffer[index] = temp;
index++;
if (index == 10) index = 3;
}
}
}
}

VI.


Thi Công Mạch:
1) Sơ Đồ Mạch In :

25
GVHD : Cô TRƯƠNG THỊ BÍCH NGÀ


×