TRƯỜNG ĐẠI HỌC LẠC HỒNG

KHOA ĐIỆN – ĐIỆN TỬ

TÀI LIỆU MÔN HỌC

THÍ NGHIỆM VI ĐIỀU KHIỂN

BIÊN SOẠN: ĐỖ BÌNH NGUYÊN

BIÊN HÒA, THÁNG 11/2011

MỤC LỤC

PHẦN I : GIỚI THIỆU PHẦN MỀM KEIL C ................................................. 1
1.1.

Màn hình làm việc của Keil C............................................................... 1

1.2.

Các bước tạo dự án mới ........................................................................ 2

1.3.

Debug chương trình............................................................................... 5

PHẦN II : GIỚI THIỆU THIẾT BỊ ................................................................. 12
2.1.

Sơ đồ nguyên lý kit thí nghiệm ........................................................... 12

2.2.

Các khối chức năng trên kit thí nghiệm .............................................. 13

2.2.1.

Khối nguồn .......................................................................................... 13

2.2.2.

Khối nạp chương trình ........................................................................ 13

2.2.3.

Khối MCU ........................................................................................... 14

2.2.4.

Khối led đơn ........................................................................................ 15

2.2.5.

Khối led 7 đoạn ................................................................................... 15

2.2.6.

Khối hiển thị LCD ............................................................................... 17

2.2.7.

Khối nút nhấn ...................................................................................... 17

2.2.8.

Khối Stand_by LED/Interrupt input.................................................... 18

2.2.9.

Khối thu hồng ngoại ............................................................................ 18

2.2.10.

Khối Buzzer......................................................................................... 18

2.2.11.

Khối Opto Triac .................................................................................. 19

2.2.12.

Khối giao tiếp UART ......................................................................... 19

PHẦN III : THỰC HÀNH ................................................................................. 20
3.1.

Điều khiển khối LED đơn ................................................................... 20

3.2.

Điều khiển khối Buzzer ....................................................................... 22

3.3.

Giao tiếp với nút nhấn đơn .................................................................. 23

3.4.

Điều khiển khối hiển thị LED 7 đoạn ................................................. 25

3.5.

Điều khiển khối hiển thị LCD ............................................................. 28

3.6.

Truy xuất IC real time DS12887 ......................................................... 30

PHẦN IV : BÀI TẬP MỞ RỘNG ..................................................................... 34

THÍ NGHIỆM VI ĐIỀU KHIỂN

BIÊN SOẠN: ĐỖ BÌNH NGUYÊN
PHẦN I

GIỚI THIỆU PHẦN MỀM KEIL C

Hiện nay có khá nhiều trình biên dịch ngôn ngữ C cho 8051 như Mikro C, IAR,
SDCC, Reads 51 …
µVision là môi trường phát triển tích hợp (IDE: Integrated Development
Environment) (trình soạn thảo ngôn ngữ C, trình biên dịch và debug) của công ty Keil
Software, và thường được gọi là Keil C.
Keil C là môi trường phát triển khá mạnh và được sử dụng rộng rãi hiện nay.
Nó hỗ trợ ta viết chương trình cho các chip vi điều khiển lõi 8051 và ARM của tất cả
các hãng trên thế giới
1.1.

Màn hình làm việc của Keil C
Màn hình làm việc của Keil C bao gồm các thanh công cụ ở phía trên cùng và 3

vùng chính như trong hình 1.1

Hình 1.1 Màn hình làm việc của Keil C
Vùng 1: Là vị trí của các cửa sổ Project, cho phép ta quản lý các tập tin trong
dự án, và cửa sổ Function, cho phép ta quản lý các chương trình con.
Trang 1

h. Hiển thị các thông tin trong quá trình biên dịch chương trình 1. Nhấn OK. Sau đó. Đây là nơi ta sẽ soạn thảo chương trình. ở phía trái màn hình. ta đã hoàn tất các bước thiết lập cho một dự án mới. Nhấn OK.5). Bước 6: Thiết lập cho Keil C xuất ra file .hex. có nội dung ghi lại những thay đổi của dự án. Bước 3: Chọn loại vi điều khiển cần sử dụng trong hộp thoại Select device … (Hình 1.3) • Chọn file vừa tạo. Nhấn Add rồi nhấn Close.THÍ NGHIỆM VI ĐIỀU KHIỂN BIÊN SOẠN: ĐỖ BÌNH NGUYÊN Vùng 2: Vùng soạn thảo. Bước 5: Add file vừa tạo vào project: • Right click vào mục Source Group 1 và chọn Add file to Group ‘Source Group 1’ … (hình 1. vào thư mục của dự án đó. chọn Yes trong hộp thoại “Copy Standard 8051 …” xuất hiện tiếp theo. trong cửa sổ Project. Click chọn vào checkbox Create HEX file trong tab Output (Hình 1.4). Các bước trên chỉ cần thực hiện một lần khi tạo dự án mới.2). Bước 4: Tạo một file mới : File\New và lưu lại với định dạng *. ta mở hộp thoại Option for Group 1 (Hình 1. ta nên thêm một file text. sẽ xuất hiện thêm tập tin mà ta vừa add. với tên thư mục là tên dự án kèm theo ngày lập dự án đó. Lúc này. Trang 2 . Nhập đường dẫn và tên project vào hộp thoại. Các bước tạo một dự án mới Bước 1: Để thuận tiện trong việc quản lý các dự án. Vùng 3: Cửa sổ Build Output. Kèm theo đó.2. Nhấn OK Đến đây. ta nên tạo từng thư mục riêng cho mỗi dự án. Bước 2: Vào menu Project\New uVision Project để tạo project mới.c hoặc *.

3 Menu Add Files to Group Trang 3 .THÍ NGHIỆM VI ĐIỀU KHIỂN BIÊN SOẠN: ĐỖ BÌNH NGUYÊN Hình 1.2 Hộp thoại Select Device Hình 1.

5 Hộp thoại Options for Target Trang 4 .THÍ NGHIỆM VI ĐIỀU KHIỂN BIÊN SOẠN: ĐỖ BÌNH NGUYÊN (a) Mở menu Project (b) Bấm chuột phải vào Target 1 (c) Bấm nút Target Options trên thanh công cụ Hình 1.4 Các cách mở hộp thoại Options for Target Hình 1.

nó chỉ cung cấp cho người dùng các công cụ hỗ trợ cho quá trình phát hiện và sửa chữa loại lỗi này.THÍ NGHIỆM VI ĐIỀU KHIỂN 1.6) hoặc ta cũng có thể nhấn phím F7 Hình 1. ta sẽ nhận được thông báo 0 Error(s). sai từ khóa … Các lỗi này sẽ được trình biên dịch tự động phát hiện trong quá trình biên dịch. sẽ có hai loại lỗi có thể xảy ra: • Lỗi cú pháp (Syntax error): Lỗi này là các sai sót trong cấu trúc câu lệnh như thiếu tham số.7) Hình 1. làm cho chương trình chạy không đúng ý đồ ban đầu của lập trình viên.6 Thanh công cụ Build Sau khi chương trình tiến hành biên dịch chương trình. ta biên dịch chương trình bằng cách vào menu Project\Build target hoặc nhấn nút Build trên thanh công cụ (hình 1.3. 0 Warning(s) trong cửa sổ Buid Output sau khi quá trình biên dịch hoàn tất (hình 1. • Lỗi luận lý (Lỗi Logic): Lỗi này là các sai sót trong giải thuật chương trình. nếu không có lỗi xảy ra. BIÊN SOẠN: ĐỖ BÌNH NGUYÊN Debug chương trình Sau khi soạn thảo chương trình xong. Trang 5 . nó còn hỗ trợ ta một công cụ gỡ rối (Debug) chương trình hết sức hiệu quả.7 Thông báo quá trình biên dịch đã hoàn tất Trong quá trình phát triển một chương trình. Lỗi này chỉ có thể do chính lập trình viên phát hiện và sửa chữa. Các IDE không thể trực tiếp phát hiện các lỗi logic. Keil C ngoài việc hỗ trợ ta soạn thảo và biên dịch chương trình.

Nếu có cửa sổ nào không xuất hiện. • Mở menu Debug-Start/Stop Debug Session Hình 1. ta có thể vào menu View để bật cửa sổ đó lên. có 4 vùng chính: • 1: Cửa sổ thể hiện các thanh ghi của vi điều khiển • 2: Cửa sổ lệnh soạn thảo. Sau khi kích hoạt chức năng Debug. ta nhấn có thể kích hoạt chức năng debug bằng một trong các cách sau: • Nhấn nút Debug trên thanh công cụ (Hình 1. chứa chương trình đang được debug Trang 6 .9.THÍ NGHIỆM VI ĐIỀU KHIỂN BIÊN SOẠN: ĐỖ BÌNH NGUYÊN Để chạy debug một chương trình sau khi đã biên dịch thành công. cửa sổ Keil C có dạng như hình 1. Hình 1.8) • Nhấn tổ hợp phím Ctrl + F5. ta làm lại thao tác trên một lần nữa.8 Nút Debug Muốn tắt chức năng Debug.9 Cửa sổ Keil C sau khi kích hoạt chức năng Debug Trong cửa sổ này.

10) : Cho ta biết chính xác một lệnh Keil C được viết bằng hợp ngữ như thế nào. ta chọn cửa sổ này và nhấn phím F2. § Muốn xem bộ nhớ RAM bắt đầu từ một địa chỉ nào đó.THÍ NGHIỆM VI ĐIỀU KHIỂN BIÊN SOẠN: ĐỖ BÌNH NGUYÊN • 3: Cho phép ta theo dõi giá trị của một biến nào đó bằng cách nhập tên biến • 4: Cửa sổ Watches cho phép ta theo dõi giá trị của tất cả các biến chứa trong chương trình. sau đó nhập tên của biến cần theo dõi. ta nhập D: Địa chỉ vào ô Address. của sổ sẽ hiển thị tên biến cũng như giá trị hiện tại của biến đó.10 Cửa sổ Disassembly Trang 7 . Lúc này. Kích hoạt cửa sổ này bằng cách vào menu View/Disassembly.11): Kích hoạt bằng menu View/Memory. Muốn biết giá trị của biến nào. • Cửa sổ Registers: Cho phép ta quan sát giá trị các thanh ghi của vi điều khiển như các thanh ghi R0-R7. ta còn có thể kích hoạt thêm một số cửa sổ như: • Cửa sổ Disassembly (Hình 1. ta nhập C: Địa chỉ vào ô Address. • Cửa sổ Memory (Hình 1. Ngoài ra. Cho phép xem nội dung bộ nhớ chương trình và bộ nhớ dữ liệu: § Muốn xem bộ nhớ chương trình bắt đầu từ một địa chỉ nào đó. DPTR … Hình 1. PSW.

12 Thời gian chạy chương trình Trang 8 . ta phải thực hiện một số bước hiệu chỉnh như sau: • Mở hộp thoại Options for Target (Hình 1.4) • Chọn thẻ Target. Tuy nhiên. • Nhập tần số thạch anh mà ta muốn sử dụng trên mạch thực tế vào ô Xtal (MHz) (Hình 1.12).THÍ NGHIỆM VI ĐIỀU KHIỂN BIÊN SOẠN: ĐỖ BÌNH NGUYÊN Hình 1.11 Cửa sổ Memory Ta có thể biết được một đoạn chương trình đã thực hiện mất bao nhiêu thời gian bằng cách quan sát mục sec trong cửa sổ Registers hoặc trên thanh status bar (Hình 1. để có thời gian tương ứng chương trình debug và trên mạch thực tế.13) Hình 1.

ngắt bằng cách vào menu Peripherals. Ta cũng có thể quan sát trạng thái các Port. Trang 9 . Khi không cần quan sát một tín hiệu nào đó.14). chúng ta chọn biểu tượng Analysis Window (Hình 1.15).0. để chúng ta có thể tìm ra được một giải thuật ngắn nhất và nhanh nhất. Để kích hoạt chức năng này. và nó cũng giúp ích cho chúng ta khi lập trình với những bài toán có liên quan đến thời gian thực. ta chọn Close để kết thúc phần Setup. chọn các đối tượng cần quan sát (Hình 1.2…).13 Thẻ Target trong hộp thoại Options for Target Tiện ích cho phép quan sát thời gian chạy chương trình này cho phép ta xác định chính xác thời gian của một hàm delay mà ta định sử dụng. các Timer. Tiếp theo chúng ta chọn mục Setup > cửa sổ Setup Logic Analyzer xuất hiện > chọn mục New (Insert) và nhập Port cần quan sát (VD: P0. Sau khi đã thiết đặt đầy đủ các chân cũng như màu sắc. Keil C cũng hỗ trợ ta quan sát các ngõ ra dưới dạng xung. hoặc nhấn nút Kill All để loại bỏ tất cả tín hiệu đã được chọn trước đó. ta có thể chọn tín hiệu đó trong hộp thoại Setup này và nhấn nút Delete. P1. Ngoài ra ta có thể chọn màu hiển thị tại mục Color.THÍ NGHIỆM VI ĐIỀU KHIỂN BIÊN SOẠN: ĐỖ BÌNH NGUYÊN Hình 1.

14 Menu Peripherals Hình 1.THÍ NGHIỆM VI ĐIỀU KHIỂN BIÊN SOẠN: ĐỖ BÌNH NGUYÊN Hình 1.15 Thiết đặt cho Analysis Window Trang 10 .

• Step over (F10): thực thi từng dòng lệnh. có nhảy vào hàm con.THÍ NGHIỆM VI ĐIỀU KHIỂN BIÊN SOẠN: ĐỖ BÌNH NGUYÊN Hình 1. • Step out (Ctrl + F11): Nhảy ra khỏi hàm con • Run to Cursor line (Ctrl + F10): Thực thi chương trình từ đầu cho đến vị trí con trỏ Hình 1.16 Cửa sổ Logic Analysis Sau khi đã kích hoạt đầy đủ các cửa sổ cần thiết. không nhảy vào hàm con.17 Thanh công cụ Debug Trang 11 . ta bắt đầu cho chạy debug bằng cách chọn một trong các nút trên thanh công cụ Debug (Hình 1.17): • Nút Reset: Reset chương trình về trạng thái ban đầu • Run (F5): Thực thi chương trình • Step (F11): Thực thi từng dòng lệnh.

1/MODE P2.0/AD0 P0.6/WR P3.3/A11 8K2 VC C_5V 1 2 3 4 6 J 14 27 26 25 24 C6 U12 R32 4K7 104 1 R33 330 R31 330 D12 A1-G-A2 LCD CONTROL/LED CON TROL C 4 33p 18 2 XTAL2 CRYSTAL 11.7/A15 D9 R30 330 VC C_5V VC C_5V 2 1 31 R27 100 SW1 R ESET PSEN C3 U9 15 17 14 13 R /W DS AS CS 29 RESET 4 5 6 7 8 9 10 11 AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 DS12887 10uF 9 AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 RST SQW IRQ 23 19 1 12 INTERRUPT 1 16 17 30 28 EA/VPP STAND _BY LED J 12 C2 18 24 RXD TXD INFR A RED EY E/P3.4/T0 P3.3 BU ZZER/P3.0/A8 U1 1 VCC _5V U8 VCC DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 A K 15 16 7 8 9 10 11 12 13 14 4 5 6 1 2 3 P2.6/AD6 P0.5 RST VCC SC K MOT GND MOSI AD 0 AD 1 AD 2 AD 3 AD 4 AD 5 AD 6 AD 7 DATA LED/D0-D7 MISO J11 AC LAMP/P3.6/MISO P1.6/A14 P2.2 3 2 DOWN Q6 A1013 4 3 2 1 2 VCC_5V C1 104 SW4 P2.5/A13 P2.5/T1 104 P3.5/AD5 P0.4/AD4 P0.4 AC LAMP/P3.2 P1.2/UP P2.1/TXD P3.3/AD3 P0.1/AD1 P0.5 R 28 P2.0/DOWN D0-D 7 VCC GND VC C_5V J5 OUT U10 BUZZER UP GND RS RW E VSS VD D VEE SW2 U5 LED7 U6 LED7 Hình 2.4/A12 P2.1/MODE VCC _5V BUZZ ER/P3.5/MOSI P1.0/DOWN 20 C 5 33p P2.7/RD ALE/PROG P2.2 STAND_BY LED/P3.7/AD7 9 8 7 6 5 4 3 2 4 3 2 1 J10 AT89S52 39 38 37 36 35 34 33 32 8 7 6 5 4 3 2 1 VCC_5V 10 11 12 13 14 15 STAN D_BY LED/P3.4 8 7 6 5 4 3 2 1 R17 330 1 2 3 4 J6 LCD CONTROL J1 VCC_5V LED4 VCC_5V Q1 A1013 LED3 R3 4K7 Q2 A1013 VCC_5V LED2 R4 4K7 Q3 A1013 VC C_5V LED1 R5 4K7 Q4 A1013 R6 4K7 a f g E D C DP B A F G a f g E D C DP B A F G a f g E D C DP B A F G a f g 1 2 4 5 6 7 9 10 8 3 e d c VCC 1 2 4 5 6 7 9 10 8 3 e d c VCC 1 2 4 5 6 7 9 10 8 3 8 e d c VCC 1 2 4 5 6 7 9 10 VCC e d c VCC g f a b e d c VCC R 10 330 1 2 3 4 5 6 7 8 VCC VCC 3 LED CONTROL J4 E D C DP B A F G DATA LED U3 LED 7 U4 LED 7 1 IN FRA RED RECIEVER R 29 4K7 Q5 A1013 LED1 LED2 LED3 LED4 INFRA RED EYE/P3.3 P3.1.2/UP SW3 MODE P2.1/T2EX P1.0/RXD P3.1 Sơ đồ kit thí nghiệm Trang 12 .4/SS P1.1/A9 P2.2/INT0 P3.2/AD2 P0.7/SCK VCC _5V VCC 40 R19 330 P0.3/INT1 P3.0592 19 MOC 3020 XTAL1 LED 4 GND 3 2 1 23 22 21 P2.0/T2 P1. 1 VCC_5V R1 U11 R8 100 R9 100 A1 A2 A3 A4 A5 A6 A7 A8 VOUT 3 2 VC C_5V 2 J3 18 17 16 15 14 13 12 11 Y1 Y2 Y3 Y4 Y5 Y6 Y7 Y8 J15 3 1 4 2 2 1 1 - + D 11 LED_POWER U13 4 LM7805/TO C7 12V AC C8 104 1 VIN 2200uF 35V SPI PROGRAM VOUT 3 C9 104 C 10 2200uF 35V R34 330 10 LPT PORT G1 G2 BRIDGE GND 2 3 4 5 6 7 8 9 VIN 2 R7 1K D10 74HC 541 VC C 6 5 4 3 2 1 1 19 GN D R2 100 1 ADAPTER 12V 1 2 20 5 4 3 2 J2 LM7805/TO J13 U2 GND VCC _5V 3 C 4K7 VCC _5V VCC_5V J7 VCC_5V J8 D1 LED 1 2 SPI PROGR AM D2 LED D3 LED D4 LED D5 LED D6 LED D7 LED D8 LED 1 MOSI MISO SC K RESET R18 4K7 VCC_5V 5V GND R20 330 R21 330 R22 330 R23 330 R 24 330 R25 330 R 26 330 U7 J9 4 3 2 1 1 2 3 4 5 6 7 8 RXD TXD R S232 P1.2/A10 P2.3 P1.THÍ NGHIỆM VI ĐIỀU KHIỂN BIÊN SOẠN: ĐỖ BÌNH NGUYÊN PHẦN II GIỚI THIỆU THIẾT BỊ SƠ ĐỒ NGUYÊN LÝ KIT NGHIỆM 2.

SCK và RESET của chip.7 . Trang 13 . Khối nạp chương trình : 1 VCC_5V R1 VCC_5V U4 6 5 4 3 2 1 LPT PORT R3 100 1 19 R4 1K 2 3 4 5 6 7 8 9 R5 100 R6 100 A1 A2 A3 A4 A5 A6 A7 A8 74HC541 Y1 Y2 Y3 Y4 Y5 Y6 Y7 Y8 18 17 16 15 14 13 12 11 J4 3 1 4 2 SPI PROGRAM 10 R7 100 G1 G2 GND J3 VCC 5 4 3 2 20 C 4K7 Hình 2.2.THÍ NGHIỆM VI ĐIỀU KHIỂN 2. Điện áp này được cung cấp cho các khối khác trên kit. lọc thành điện một chiều. Chương trình được nạp nối tiếp thông qua các chân MOSI.2 Sơ đồ khối nguồn Khối này nhận điện áp 12Vac.cho phép ta nạp chương trình cho các chip 89Sxx của hãng Atmel. Sau đó đưa qua 7805 để ổn định điện áp ngõ ra ở 5Vdc. BIÊN SOẠN: ĐỖ BÌNH NGUYÊN CÁC KHỐI CHỨC NĂNG TRÊN KIT THÍ NGHIỆM 2.2. MISO.2.1. Khối nguồn Hình 2.2. 2. nắn.3 Sơ đồ khối nạp chương trình Đây là sơ đồ mạch nạp đi kèm với phần mền SPI Programmer 3.

Khối MCU : VCC _5V 1 2 3 4 5 6 7 8 P1.2 P1.3 P1. giúp cho vi điều khiển hoạt động được: • Khối Auto Reset bao gồm R28.1/T2EX P1.6/W R P3.5/MOSI P1.3/I NT1 P3.7/SCK VC C 40 U7 P0.2/U P P2.5/A13 P2.1/MODE P2.6/A14 P2.4/T0 P3.7/AD 7 VCC_5V R18 AT89S52 39 38 37 36 35 34 33 32 2 3 4 5 6 7 8 9 1 RXD TXD I NFR A RED EY E/P3.THÍ NGHIỆM VI ĐIỀU KHIỂN BIÊN SOẠN: ĐỖ BÌNH NGUYÊN 2.4 AC LAMP/P3.5/AD 5 P0.0592 C5 33p XTAL1 P2.0/T2 P1. 5 AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 4K7 10 11 12 13 14 15 P3.4 Sơ đố khối MCU Khối này bao gồm vi điều khiển AT89S52 và các khối phụ trợ.7/R D ALE/PROG P2. R27: cho phép reset vi điều khiển bằng tay.2.1/AD 1 P0.0/R XD P3.4/SS P1.0/D OW N 20 19 GND 18 Hình 2.4/A12 P2.2/A10 P2.2 STAN D_BY LED/P3. Khối này không bắt buộc phải có mặt nếu không có nhu cầu reset vi điều khiển bằng tay.3/A11 8K2 27 26 25 24 1 2 3 4 LC D CONTR OL/LED C ONTR OL C4 33p XTAL2 Y1 11.3.6/AD 6 P0. C4.5/T1 P3.6/MISO P1.2/AD 2 P0.0/AD 0 P0.0/A8 23 22 21 P2. • Khối dao động bao gồm: Y1.7/A15 VC C_5V 31 R /W RD ALE A15 EA/VPP R27 100 SW 1 RESET 16 17 30 28 PSEN C3 29 10uF 9 R ESET R ST J 11 R28 P2. C5: Kết hợp với các khối khác ở bên trong vi điều khiển tạo ra xung nhịp cho vi điều khiển hoạt động.4/AD 4 P0.2/I NT0 P3.1/A9 P2.3/AD 3 P0.3 BU ZZER/P3. Trang 14 . • Khối Manual Reset bao gồm SW1.1/TXD P3. C3: giúp tự động reset vi điều khiển khi vừa bật nguồn.

2. Khối led 7 đoạn J1 4 3 2 1 VC C_5V LED1 LED2 LED3 LED4 LED4 VC C_5V Q1 A1013 LED3 R 3 4K7 VC C_5V Q2 A1013 LED2 R 4 4K7 VCC _5V Q3 A1013 LED 1 R 5 4K7 Q4 A1013 R6 4K7 a f g E D C DP B A F G a f g E D C DP B A F G a f g E D C DP B A F G a f g 1 2 4 5 6 7 9 10 8 3 e d c VC C 1 2 4 5 6 7 9 10 8 3 e d c VC C 1 2 4 5 6 7 9 10 8 3 8 e d c VC C 1 2 4 5 6 7 9 10 VC C e d c VC C g f a b e d c VC C R 10 330 1 2 3 4 5 6 7 8 VC C J4 VC C 3 LED C ONTROL E D C DP B A F G DATA LED U 3 LED7 U 4 LED7 U 5 LED7 U6 LED 7 Hình 2.THÍ NGHIỆM VI ĐIỀU KHIỂN BIÊN SOẠN: ĐỖ BÌNH NGUYÊN • Điện trở kéo lên R18: Do các chân trên port 0 của vi điều khiển là các chân có cực thu để hở nên khi muốn giao tiếp vi điều khiển với các IC số khác. 2. Tất cả các đoạn (kathod) của các LED được nối chung vào nhau vào một port điều khiển còn anode của tất các led được nối vào một port điều khiển khác và được cấp tín hiệu quét led một các tuần tự (tại một thời điểm Trang 15 .6 Sơ đồ khối led 7 đoạn Khối này bao gồm bốn led 7 đoạn được thiết kế theo phương pháp đa hợp (phương pháp điều khiển quét led).5.4. 2. ta cần có một điện trở kéo lên để xác lập mức điện áp. Muốn led sáng.2. Khối led đơn VCC_5V D1 LED D2 LED R19 330 D3 LED R20 330 D4 LED R21 330 D5 LED R22 330 D6 LED R23 330 D7 LED R24 330 D8 LED R25 330 R26 330 Hình 2.5 Sơ đồ khối led đơn Các ngõ điều khiển được kết nối trực tiếp với port 1 của vi điều khiển. ta sẽ phải xuất mức thấp ra chân vi điều khiển.

THÍ NGHIỆM VI ĐIỀU KHIỂN BIÊN SOẠN: ĐỖ BÌNH NGUYÊN chỉ có một led được cấp nguồn).7 Lưu đồ giải thuật quét led 7 đoạn Trang 16 . Lưu đồ giải thuật quét led được thể hiện trong hình 2. trong đó N_max là tổng số led 7 đoạn cần được quét.7. Hình 2.

P2. J6 là ngõ vào điều khiển LCD 2. Khối nút nhấn SW2 UP P2.2 và tích cực ở mức thấp Trang 17 .P2.2/UP SW3 MODE P2.0.1/MODE SW4 DOWN P2. Module này được thiết kế cho mục đích thí nghiệm điều khiển LCD.2.9 Sơ đồ khối nút nhấn Khối này được thiết kế cho các bài thí nghiệm nút nhấn đơn.1. Bao gồm ba nút được kết nối vào các chân P2.2.8 Sơ đồ khối LCD LCD được thiết kế trên kit là loại LCD 2 dòng. Khối hiển thị LCD 15 16 A K DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 7 8 9 10 11 12 13 14 4 5 6 1 2 3 RS RW E VSS VDD VEE U1 8 7 6 5 4 3 2 1 VCC_5V VCC_5V J5 D0-D7 R17 330 1 2 3 4 Q5 A1013 J6 LCD CONTROL Hình 2.THÍ NGHIỆM VI ĐIỀU KHIỂN BIÊN SOẠN: ĐỖ BÌNH NGUYÊN 2. J5 là ngõ vào nhận dữ liệu (DATA) hoặc lệnh (COMMAND) của LCD. 16 cột.6.7.0/DOWN Hình 2.

8.2.2.10 Sơ đồ khối Standby LED/ Interrupt input Stand_by LED được kết nối vào chân P3. buzzer được điều khiển thông qua transistor A1013 và được kết nối vào chân P3. Trang 18 .2.3 D9 R30 330 2 1 VCC_5V STAND_BY LED J12 INTERRUPT 1 Hình 2.9. dùng để tạo âm thanh.Khối Buzzer VCC 1 VCC_5V 2 GND U10 BUZZER R29 4K7 Q6 A1013 BUZZER/P3.4 Hình 2. Tín hiệu hồng ngoại từ Remote khi qua bộ thu sẽ bị đảo mức tích cực .11 Sơ đồ khối thu hồng ngoại Ngõ ra của bộ thu tín hiệu hồng ngoại được kết nối vào chân P3. đồng thời đây cũng là ngõ vào ngắt ngoài 1 và tích cực ở mức thấp. Khối thu hồng ngoại U8 OUT VCC GND 2 INFRA RED EYE/P3. Khối Standby LED/Interrupt input STAND_BY LED/P3. 2.3.2 3 VCC_5V 1 C1 104 INFRA RED RECIEVER Hình 2.2.12 Sơ đồ khối Buzzer Buzzer là một loa nhỏ.4.THÍ NGHIỆM VI ĐIỀU KHIỂN BIÊN SOẠN: ĐỖ BÌNH NGUYÊN 2. Trong kit thí nghiệm này.10. 2.

Khối Opto Triac AC LAMP/P3. RxD) hoặc kết nối thêm mạch ngoài để giao tiếp theo chuẩn RS232.Khối giao tiếp UART J9 4 3 2 1 RXD TXD RS232 VCC_5V Hình 2.2.5 và tích cực ở mức thấp. chân điều khiển được kết nối vào chân P3.14 Sơ đồ khối giao tiếp UART Khối giao tiếp UART dùng để giao tiếp nối tiếp với các thiết bị ngoại vi hoặc với các MCU khác thông qua port nối tiếp (TxD.12.11.THÍ NGHIỆM VI ĐIỀU KHIỂN BIÊN SOẠN: ĐỖ BÌNH NGUYÊN 2.13 Sơ đồ khối Opto Triac Khối Opto Triac dùng để điều khiển thiết bị 220V AC bên ngoài thông qua mạch mở rộng. Trang 19 . 2.2.5 VCC_5V 3 2 1 6 J14 C6 104 U12 R32 4K7 R33 330 1 D12 R31 330 2 MOC3020 LED 4 A1-G-A2 Hình 2.

i < 10. Mục đích. delay(500). nhấp nháy.THÍ NGHIỆM VI ĐIỀU KHIỂN BIÊN SOẠN: ĐỖ BÌNH NGUYÊN PHẦN III THỰC HÀNH 3. ĐIỀU KHIỂN KHỐI LED ĐƠN 3. delay(500). Chương trình tham khảo #include <p89v51rx2. delay(500). yêu cầu: Giúp cho sinh viên làm quen với việc điều khiển LED đơn như tắt. i ++) { Trang 20 . sáng dồn. dịch LED sang phải. dem_nhi_phan(). void nhap_nhay (void). for (i = 0.h> // khai bao prototype void delay (unsigned int time). dịch LED sang trái. dich_trai(). } } //cac chuong trinh con void nhap_nhay (void) { unsigned char i.2. mở.1.1. //chuong trinh chinh void main (void) { while (1) { nhap_nhay(). Sinh viên phải biết sử dụng Timer để tạo Delay và biết cách sử dụng các toán tử liên quan như toán tử thao tác bit. toán tử logic … 3. void dem_nhi_phan (void). void dich_trai (void).1.1.

for (j = 0. j < 5. //xoa co TF TR0 = 0. } } } void delay (unsigned int time) { while (time--) { TMOD = 0x01. i > 0. //nap gia tri cho timer TL0 = 0x00. delay (300). i ++) { P1 = ~i. i < 255. for (i = 0. delay (300). delay (500). i <<= 1) { P1 = ~i. } } void dich_trai (void) { unsigned char i. j. j ++) { for (i = 0x01.THÍ NGHIỆM VI ĐIỀU KHIỂN BIÊN SOẠN: ĐỖ BÌNH NGUYÊN P1 = 0. //timer0 che do 16 bit TH0 = 0xFF. //khoi dong bo dinh thoi while (!TF0). delay (500). P1 = 0xff. } } void dem_nhi_phan (void) { unsigned char i. //dung bo dinh thoi } } Trang 21 . TR0 = 1. //cho co TF = 1 TF0 = 0 .

Viết chương trình 8 led sáng dồn.h> #define BUZZER P3_4 //khai bao chan dieu khien Buzzer // khai bao prototype void delay (unsigned int time). delay (1). báo thức … 3. Bài tập mở rộng 1.3.2.2. for (i = 0.THÍ NGHIỆM VI ĐIỀU KHIỂN BIÊN SOẠN: ĐỖ BÌNH NGUYÊN 3. Sử dụng ngắt timer để viết chương trình điều khiển sao cho 8 LED đơn mỗi LED chớp với một tần số khác nhau. BUZZER = 1. i < 20. Mục đích. delay (1).2. ĐIỀU KHIỂN KHỐI BUZZER 3. 3. //chuong trinh chinh void main (void) { while (1) { beep(). Chương trình tham khảo #include <p89v51rx. delay (1000). void beep (void).1.1.2. 3. } } // cac chuong trinh con void beep (void) { unsigned char i. yêu cầu Giúp sinh viên làm quen với việc điều khiển Buzzer để tạo ra chuỗi âm “beep” với các tần số khác nhau cho các ứng dụng như nhận phím. Trang 22 . Viết chương trình dịch một led qua phải 2. i ++) { BUZZER = 0.

TR0 = 1.2. Bài tập mở rộng 1. TF0 = 0 .3. hiệu chỉnh thông số. TH0 = 0xFF. GIAO TIẾP VỚI NÚT NHẤN ĐƠN 3.cài đặt … 3.1. đồng điều khiển tắt hoặc mở LED tương ứng. nếu một trong ba nút được nhấn thì điều khiển phát âm “beep” để thông báo phím đã được nhấn.3. Viết chương trình điều khiển Buzzer phát âm thanh cho đồng hồ báo 2. 3.h> //khai bao cac chan dieu khien #define BTN_UP #define BTN_DOWN #define BTN_MODE P2_2 P2_0 P2_1 #define LED0 #define LED1 #define LED2 P1_0 P1_1 P1_2 #define BUZZER P3_4 //chan dieu khien Buzzer Trang 23 .2.THÍ NGHIỆM VI ĐIỀU KHIỂN BIÊN SOẠN: ĐỖ BÌNH NGUYÊN } } void delay(unsigned int time) { while(time--) { TMOD = 0x01. MODE. Mục đích. TR0 = 0. Viết chương trình điều khiển Buzzer giả lập âm thanh của còi xe cứu hỏa thức. Chương trình tham khảo Chương trình kiểm tra lần lượt ba nút UP. while(!TF0). #include <p89v51rx2. } } 3.3. yêu cầu Giúp sinh viên làm quen với thao tác kiểm tra nút nhấn đơn trong các ứng dụng nhập dữ liệu. DOWN.3. TL0 = 0xBA.

//chuong trinh chinh void main (void) { while (1) { if (BTN_UP == 0) { delay (200). //delay chong doi if (BTN_UP == 0) { beep().THÍ NGHIỆM VI ĐIỀU KHIỂN BIÊN SOẠN: ĐỖ BÌNH NGUYÊN // khai bao prototype void delay (unsigned char time). //cho nha nut UP LED0 = ~LED0. //cho nha nut nha nut DOWN LED1 = ~LED1. while (!BTN_DOWN). while (BTN_UP == 0). } } if (!BTN_MODE) { delay (200). } } if (!BTN_DOWN) { delay (200). //delay chong doi if (!BTN_MODE) { beep(). void beep (void). //cho MODE LED2 = ~LED2. //delay chong doi if (!BTN_DOWN) { beep(). } } Trang 24 . while (!BTN_MODE).

TR0 = 1. delay (1). đồng hồ báo giờ… Sinh viên phải nắm được kỹ thuật quét LED. Sau đó chương trình trở lại kiểm tra 3 nút như ban đầu. //nap gia tri cho timer TL0 = 0xBA. yêu cầu Giúp sinh viên làm quen với việc điều khiển hiển thị dữ liệu trên LED 7 đoạn trong các ứng dụng như đếm sản phẩm. LCD control / LED Trang 25 . kỹ thuật sử dụng ngắt timer. //dung bo dinh thoi } } 3. Mục đích. mỗi kiểu sáng lập lại 5 lần. nút Down nhấn dịch từ phải sang trái.4.3. //xoa co TF TR0 = 0. 3. BUZZER = 1. ĐIỀU KHIỂN KHỐI HIỂN THỊ LED 7 ĐOẠN 3.THÍ NGHIỆM VI ĐIỀU KHIỂN BIÊN SOẠN: ĐỖ BÌNH NGUYÊN } } //cac chuong trinh con void beep (void) { unsigned char i. //cho co TF = 1 TF0 = 0 . } } void delay(unsigned char time) { while (time--) { TMOD = 0x01. i ++) { BUZZER = 0. biết cách kết nối phần cứng (kết nối header Data LED / D0 … D7 (P0). i < 20.4. nút Mode nhấn thì nhấp nháy cả 8 LED. Bài tập mở rộng Viết chương trình điều khiển sao cho nếu nút Up nhấn 8 LED đơn sẽ dịch từ trái sang phải.3. đèn giao thông.1. //timer0 che do 16 bit TH0 = 0xFF. delay (1). //khoi dong bo dinh thoi while(!TF0). for (i = 0.

j. } } void delay (unsigned int time) //chuong trinh delay { unsigned int i. unsigned unsigned unsigned bit on = char scrBuffer[3].2. void init (void). 0xed. char pos = 0. unsigned char code code_scan [] = {0xf7. 0x09}. char count = 0. if (count > 100) count = 0. 0x11. void decode (unsigned char tmpCount). 0x01. 0x19.h> #define BTN_PRESSED 1 #define BTN_NOT_PRESSED 0 #define btnUp #define btnDown #define buzz P2_0 #define ledUnits #define ledTens #define ledHundress P2_3 P2_1 P3_4 P2_4 P2_5 unsigned char code code_7seg [] = {0x81. 3. void delay (unsigned int time). 0xdf}. 0x2d.THÍ NGHIỆM VI ĐIỀU KHIỂN BIÊN SOẠN: ĐỖ BÌNH NGUYÊN control ở khối MCU với header Data LED và LED control ở khối hiển thị LED 7 đoạn ). decode(count). 0x43. while(1) { count ++. 0xcd. Trang 26 . void main (void) { init(). 0. 0x49. delay(200). Chương trình tham khảo Chương trình sau đếm từ 0 – 100 hiển thị ra led 7 đoạn #include <at89x52. 0xef.4.

THÍ NGHIỆM VI ĐIỀU KHIỂN BIÊN SOẠN: ĐỖ BÌNH NGUYÊN for(i = 0. j ++). i ++) for(j = 0. i < time. if (on == { P2 = P0 = on = } else { P0 = P2 = 0) 0xff. TL0 = 0x00. j < 100. } void isrTmr0 (void) interrupt 1 { TH0 = 0x94. } } Trang 27 . TL0 = 0x00. TF0 = 0. tmpCount /= 10. // output data code_scan[pos]. on = 0. // turn appropriate led on if (++ pos == 3) pos = 0. tmpCount /= 10. //turn off all led 0xff. } void init (void) // khoi tao timer0 { TH0 = 0x94. TR0 = 1. scrBuffer[pos]. } void decode (unsigned char tmpCount) { scrBuffer[0] = code_7seg[tmpCount % 10]. scrBuffer[1] = code_7seg[tmpCount % 10]. // cho phep dem ET0 = 1. // cho phep ngat EA = 1. //clear data 1. scrBuffer[2] = code_7seg[tmpCount % 10]. decode(count).

Mục đích.3.5. 3. hình led. nếu nút UP được nhấn thì tăng giá trị hiển thị lên một đơn vị. chr) lcd_send_byte(0. unsigned char byte).Có âm nhận phím. void lcd_send_byte (bit cmd. nút MODE được nhấn thì mạch tự động đếm lên từ giá trị hiện hành đến 100 rồi trở về 0 và tiếp tục đếm lên. hiển thị chuỗi thong báo… Sinh viên phải nắm được cấu tạo và cách thức điều khiển hiển thị trên màn hình LCD. Viết chương trình điều khiển ban đầu hiển thị số 0. Bài tập mở rộng 1.THÍ NGHIỆM VI ĐIỀU KHIỂN BIÊN SOẠN: ĐỖ BÌNH NGUYÊN 3. qua phải. Trang 28 .5. j. trong quá trình tăng tự động hai nút UP và DOWN vẫn có tác dụng.1. //chuong trinh chinh void main (void) { unsigned char i.4. nếu nút DOWN được nhấn thì giảm một đơn vị. yêu cầu Giúp sinh viên làm quen với việc điều khiển hiển thị dữ liệu trên màn hình LCD trong các ứng dụng như đếm sản phẩm. 3. #include <AT89x52. Chương trình tham khảo Chương trình điều khiển hiển thị hai dòng Text ra màn hình LCD sau đó di chuyển hai dòng text qua trái.h> //khai bao macro #define LCD_DATA_PORT #define LCD_E #define LCD_RW #define LCD_RS P0 P2_5 P2_4 P2_3 #define lcd_char(chr) #define lcd_cmd(cmd) lcd_send_byte(1. đồng hồ báo giờ. cmd) //khai bao prototype void lcd_waitms (unsigned int time). nếu nhấn nút MODE lần nữa thì dừng lại. Viết chương trình hiển thị chữ HELLO chạy từ phải qua trái trên màn 2. lập lại quá tình kiểm tra ba nút như ban đầu. void lcd_init (void). ĐIỀU KHIỂN KHỐI HIỂN THỊ LCD 3.5.2. void lcd_string(unsigned char *str).

cmd = 1 send data LCD_DATA_PORT = byte. //wait for about 15ms Trang 29 . //di chuyen con tro ve dong thu 2 lcd_string (“Welcome !!!”).0x1C). lcd_string ("Dai hoc Lac Hong"). //write mode LCD_RS = cmd.THÍ NGHIỆM VI ĐIỀU KHIỂN BIÊN SOẠN: ĐỖ BÌNH NGUYÊN lcd_init(). } void lcd_string(unsigned char *str) { while(*str != '\0') // lap lai cho den khi ket thuc chuoi { lcd_char(*str). while (1) { for (i = 0. lcd_waitms(1000). // ghi ky tu len man hinh str ++. // cmd = 0 send command. lcd_cmd(0xC0). i < 16. } for (i = 0. LCD_E = 1. } } } //chuong trinh con void lcd_send_byte(bit cmd. LCD_E = 0.0x18). unsigned char byte) { LCD_RW = 0. // ky tu tiep theo } } void lcd_init(void) { lcd_waitms(15). lcd_waitms(1). i ++) { lcd_send_byte(0. lcd_waitms(1000). i < 16. i ++) { lcd_send_byte(0.

y <= 121.THÍ NGHIỆM VI ĐIỀU KHIỂN BIÊN SOẠN: ĐỖ BÌNH NGUYÊN lcd_cmd(0x38). TRUY XUẤT IC DS12887 3.2. sinh viên phải nắm được các điểm sau: • Cách khai báo đường dẫn đến thư viện. 3. lcd_cmd(0x0C).3. y. Chương trình tham khảo Chương trình đồng hồ báo giờ. và màn hình hiển thị dòng text thứ nhất. x ++) { for (y = 0. Mục đích. for (x = 0. size of char lcd_cmd(0x01). tương tự nếu tiếp tục nhấn thì dòng text khác sẽ xuất hiện trên màn hình LCD. y ++). • Cách truy xuất bộ nhớ ngoài bằng Keil C • Sử dụng được IC DS12887 cho các ứng dụng cần có thời gian thực 3.h" unsigned char code my_signature[] = "plain".6. #include <AT89x52.5. lcd_cmd(0x06). cursor off 5x7 dot } void lcd_waitms (unsigned int time) { unsigned int x. Nếu nút được nhấn thì Buzzer phát ra âm “Beep” báo nhận phím. unsigned char code strDOW[7][4] = { Trang 30 .6. cho phép khởi tạo lại DS12887.1. // clear lcd // move cursor to right // lcd on. giây bằng cách truy xuất dữ liệu thời gian từ DS12887. Bài tập mở rộng Viết chương trình điều khiển hiển thị dòng text ra màn hình LCD kết hợp với nút nhấn và Buzzer. phút. } } 3.6. yêu cầu Giúp sinh viên làm quen với việc truy xuất dữ liệu thời gian từ IC real time cho các ứng dụng yêu cầu thời gian thực như đồng hồ báo giờ… Sau bài tập này.h> #include "lcd_lib. // two line. x <= time.

"MON". unsigned char xdata min_alarm _at_ 0x0003. Trang 31 . //---------location of date/time data--------------unsigned char xdata sec _at_ 0x0000. "TUE". unsigned char xdata month _at_ 0x0008. void init_DS12C887 (void). unsigned char xdata min _at_ 0x0002. //-------------------------------------------------- bit check_DS12C887 (void). unsigned char xdata hour _at_ 0x0004. unsigned char xdata reg_C _at_ 0x000C. unsigned char xdata DOW _at_ 0x0006. "WED". unsigned char xdata reg_B _at_ 0x000B. "SAT" }. "THU". unsigned char xdata year _at_ 0x0009. //-------------------------------------------------- //--------location of signature--------------------unsigned char xdata signature[5] _at_ 0x000E. unsigned char xdata century _at_ 0x0032. unsigned char xdata reg_D _at_ 0x000D. unsigned char xdata sec_alarm _at_ 0x0001. //-------------------------------------------------- //-------location of control register--------------unsigned char xdata reg_A _at_ 0x000A. unsigned char xdata hour_alarm _at_ 0x0005. "FRI". unsigned char xdata date _at_ 0x0007.THÍ NGHIỆM VI ĐIỀU KHIỂN BIÊN SOẠN: ĐỖ BÌNH NGUYÊN "SUN".

while (1) { lcd_1st_line. } } bit check_DS12C887 (void) { unsigned char i. lcd_char('/'). lcd_char('/'). i ++){ if (signature[i] != my_signature[i]) Trang 32 . lcd_write_dec(hour). lcd_string(strDOW[0]). lcd_write_dec(date). lcd_write_dec(month).'). for (i = 0. lcd_char('.THÍ NGHIỆM VI ĐIỀU KHIỂN BIÊN SOẠN: ĐỖ BÌNH NGUYÊN void main (void) { if (check_DS12C887()) init_DS12C887(). lcd_init(). lcd_write_dec(sec). lcd_2nd_line. lcd_char(':'). lcd_char(':'). lcd_write_dec(min). lcd_write_dec(year). i < 5.

// IC's working properly } void init_DS12C887 (void) { unsigned char i. i ++){ signature[i] = my_signature[i]. reg_B = 0x86. // new installed IC or battery was empty } return 0.THÍ NGHIỆM VI ĐIỀU KHIỂN return BIÊN SOẠN: ĐỖ BÌNH NGUYÊN 1. // write signature into Dalas for (i = 0. // SET bit = 0 } 3.6.3. cho phép người sử dụng chỉnh thời gian bằng ba nút MODE. reg_B = 0x06. i < 5. min = 9. // SET bit = 1 // init the time hour = 3. DOWN. Trang 33 . UP. } // init the registers reg_A = 0x20. Viết chương trình đồng hồ báo thức. Bài tập mở rộng Viết chương trình đồng hồ hiển thị giờ bằng màn hình LCD.

Trang 34 . Bài 3: Viết chương trình giải mã tín hiệu Remote TV Philips hoặc TV Sony. bằng cách sử dụng khối Infrared Reciver và khối LED 7 đoạn. Bài 2: Viết chương trình chuông đố vui để học cho 3 đội chơi. Hiển thị giá trị phím nhận được 0-9 ra LED 7 đoạn. Bài 5: Viết chương trình đồng hồ hiển thị bằng màn hình LCD cho phép người sử dụng hiệu chỉnh thời gian và cài đặt thời gian đổ chuông. Bài 4: Viết chương trình đồng hồ hiển thị bằng màn hình LCD cho phép người sử dụng hiệu chỉnh thời gian và cài đặt thời gian đỗ chuông. Bài 6: Viết chương trình kết hợp Remote TV với khối hiển thị LCD cho phép người sử dụng nhập đoạn text vào bằng các phím trên Remote sau đó cho phép tạo ra các hiệu ứng di chuyển đoạn text bằng các nút điều khiển trên Remote TV. kết hợp với khối Buzzer phát âm nhận phím. Cho phép thay đổi giá trị thời gian bằng cách sử dụng khối nút nhấn. Hiệu chỉnh bằng Remote TV và báo chuông bằng khối Buzzer. sử dụng khối LED đơn. Hiệu chỉnh bằng khối nút nhấn và báo chuông bằng khối Buzzer. khối nút nhấn và Buzzer.THÍ NGHIỆM VI ĐIỀU KHIỂN BIÊN SOẠN: ĐỖ BÌNH NGUYÊN PHẦN IV BÀI TẬP MỞ RỘNG Bài 1: Viết chương trình điều khiển đèn giao thông sử dụng khối LED đơn và khối LED 7 đoạn.

Sign up to vote on this title
UsefulNot useful