TRƯỜ TRƯỜNG NG ĐẠI HỌC LẠ LẠC HỒ HỒNG ĐẠI HỌ KHOA ĐIỆN – ĐIỆN TỬ TỬ
TÀI LIỆU MÔN HỌC
THÍ NGHIỆM VI ĐIỀU KHIỂN
BIÊN SOẠ 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ệ việc củ của Keil C............................... C............................................ ........................... ................... ..... 1 1.2. Các bướ bướ c tạ tạo dự dự án mớ mớ i .......................... ........................................ ........................... ........................... ................... ..... 2 1.3. Debug chươ chươ ng ng trình............................. trình.......................................... ........................... ............................ ....................... ......... 5 PH ẦN II : GIỚ I THIỆU THIẾT BỊ .......................... ....................................... ........................... .......................... ............ 12 2.1. Sơ đồ nghiệm ........................... ........................................ ........................... ................... ..... 12 ơ đồ nguyên lý kit thí nghiệ 2.2. Các khố khối chứ chức nă năng trên kit thí nghiệ nghiệm ........................... ......................................... ................... ..... 13 2.2.1. Khố Khối nguồ nguồ n .......................... ....................................... ........................... ............................ ........................... ....................... .......... 13 2.2.2. Khố Khối nạ nạp chươ chươ ng ng trình .......................... ........................................ ........................... ........................... ................... ..... 13 2.2.3. Khố Khối MCU ........................... ........................................ ........................... ............................ ........................... ....................... .......... 14 2.2.4. Khố Khối led đơ n .......................... ........................................ ........................... ........................... ............................ ..................... ....... 15 2.2.5. Khố Khối led 7 đoạn .......................... ....................................... ........................... ........................... ........................... ................. ... 15 2.2.6. Khố Khối hiể hiển thị thị LCD .......................... ........................................ ........................... ........................... .......................... ............ 17 2.2.7. Khố Khối nút nhấ nh ấn .......................... ........................................ ............................ ........................... ........................... ................... ..... 17 2.2.8. Khố Khối Stand_by LED/Interrupt input........................ input...................................... ........................... ............... 18 2.2.9. Khố Khối thu hồ h ồng ngoạ ngoại ......................... ....................................... ............................ ........................... ....................... .......... 18 2.2.10. Khố Khối Buzzer............................. Buzzer........................................... ............................ ........................... ........................... ................... ..... 18 2.2.11. Khố Khối Opto Triac ........................... ......................................... ........................... ........................... ........................... ............... 19 2.2.12. Khố Khối giao tiế tiếp UART ........................... ......................................... ........................... ........................... ................... ..... 19 PH ẦN III : THỰ C HÀNH .......................... ........................................ ........................... ........................... ........................... ............... 20 Điều khiể 3.1. khiển khố khối LED đơ n .......................... ....................................... ........................... ........................... ............... 20 3.2. khiển khố khối Buzzer................................ ............................................. ........................... .......................... ............22 Điều khiể 3.3. Giao tiế tiếp vớ vớ i nút nhấ nhấn đơ n ........................... ........................................ ........................... .......................... ............ 23 3.4. khiển khố khối hiể hiển thị thị LED 7 đoạn .......................... ....................................... ....................... .......... 25 Điều khiể 3.5. khiển khố khối hiể hiển thị thị LCD .......................... ........................................ ............................ ..................... ....... 28 Điều khiể 3.6. Truy xuấ xuất IC real time DS12887 .................. ............................... ........................... .......................... ............ 30 PH ẦN IV : BÀI TẬP M Ở RỘNG ............................ ......................................... ........................... ........................... ............... 34
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ệ việc củ của Keil C............................... C............................................ ........................... ................... ..... 1 1.2. Các bướ bướ c tạ tạo dự dự án mớ mớ i .......................... ........................................ ........................... ........................... ................... ..... 2 1.3. Debug chươ chươ ng ng trình............................. trình.......................................... ........................... ............................ ....................... ......... 5 PH ẦN II : GIỚ I THIỆU THIẾT BỊ .......................... ....................................... ........................... .......................... ............ 12 2.1. Sơ đồ nghiệm ........................... ........................................ ........................... ................... ..... 12 ơ đồ nguyên lý kit thí nghiệ 2.2. Các khố khối chứ chức nă năng trên kit thí nghiệ nghiệm ........................... ......................................... ................... ..... 13 2.2.1. Khố Khối nguồ nguồ n .......................... ....................................... ........................... ............................ ........................... ....................... .......... 13 2.2.2. Khố Khối nạ nạp chươ chươ ng ng trình .......................... ........................................ ........................... ........................... ................... ..... 13 2.2.3. Khố Khối MCU ........................... ........................................ ........................... ............................ ........................... ....................... .......... 14 2.2.4. Khố Khối led đơ n .......................... ........................................ ........................... ........................... ............................ ..................... ....... 15 2.2.5. Khố Khối led 7 đoạn .......................... ....................................... ........................... ........................... ........................... ................. ... 15 2.2.6. Khố Khối hiể hiển thị thị LCD .......................... ........................................ ........................... ........................... .......................... ............ 17 2.2.7. Khố Khối nút nhấ nh ấn .......................... ........................................ ............................ ........................... ........................... ................... ..... 17 2.2.8. Khố Khối Stand_by LED/Interrupt input........................ input...................................... ........................... ............... 18 2.2.9. Khố Khối thu hồ h ồng ngoạ ngoại ......................... ....................................... ............................ ........................... ....................... .......... 18 2.2.10. Khố Khối Buzzer............................. Buzzer........................................... ............................ ........................... ........................... ................... ..... 18 2.2.11. Khố Khối Opto Triac ........................... ......................................... ........................... ........................... ........................... ............... 19 2.2.12. Khố Khối giao tiế tiếp UART ........................... ......................................... ........................... ........................... ................... ..... 19 PH ẦN III : THỰ C HÀNH .......................... ........................................ ........................... ........................... ........................... ............... 20 Điều khiể 3.1. khiển khố khối LED đơ n .......................... ....................................... ........................... ........................... ............... 20 3.2. khiển khố khối Buzzer................................ ............................................. ........................... .......................... ............22 Điều khiể 3.3. Giao tiế tiếp vớ vớ i nút nhấ nhấn đơ n ........................... ........................................ ........................... .......................... ............ 23 3.4. khiển khố khối hiể hiển thị thị LED 7 đoạn .......................... ....................................... ....................... .......... 25 Điều khiể 3.5. khiển khố khối hiể hiển thị thị LCD .......................... ........................................ ............................ ..................... ....... 28 Điều khiể 3.6. Truy xuấ 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 PHẦ
GIỚ I THIỆU PHẦN M ỀM KEIL C Hiện nay có khá nhiề Hiệ nhiều trình biên dị d ịch ngôn ngữ ngữ C cho 8051 như như Mikro C, IAR, SDCC, Reads 51 … µVision
là môi trườ trườ ng ng phát triể triển tích hợ hợ p (IDE: Integrated Development
Environment) (trình soạ soạn thả thảo ngôn ngữ ngữ C, trình biên dị d ịch và debug) củ của công ty Keil Software, và thườ thườ ng ng đượ c gọ gọi là Keil C. Keil C là môi trườ tr ườ ng ng phát triể triển khá mạ mạnh và đượ c sử dụng rộng rãi hiệ hiện nay. Nó hỗ trợ trợ ta ta viế viết chươ ch ươ ng ng trình cho các chip vi điều khiể khiển lõi 8051 và ARM củ của tấ t ất cả cả các hãng trên thế thế giớ giớ i
1.1.
Màn hình làm việc của Keil C ở phía trên cùng và 3 Màn hình làm việ việc củ c ủa Keil C bao gồ gồm các thanh công cụ c ụ ở phía
vùng chính như như trong hình 1.1
Hình 1.1 Màn hình làm việ việc củ của Keil C Vùng 1: Là vị vị trí củ c ủa các cử cửa sổ s ổ Project, cho phép ta quả quản lý các tậ tập tin trong dự án, và cử cửa sổ sổ Function, cho phép ta quả quản lý các chươ chươ ng ng trình con.
Trang 1
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. Đây là nơ i ta sẽ soạn thảo chươ ng trình. Vùng 3: Cửa sổ Build Output. Hiển thị các thông tin trong quá trình biên dịch chươ ng trình
1.2.
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, ta nên tạo từng thư mục
riêng cho mỗi dự án, vớ i tên thư mục là tên dự án kèm theo ngày lập dự án đó. Kèm theo đó, ta nên thêm một file text, có nội dung ghi lại những thay đổi của dự án, vào thư mục của dự án đó. Bướ c 2: Vào menu Project\New uVision Project để tạo project mớ i. Nhập đườ ng dẫn và tên project vào hộp thoại. Nhấn OK. 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.2). Nhấn OK. Sau đó, chọn Yes trong hộp thoại “Copy Standard 8051 …” xuất hiện tiếp theo. Bướ c 4: Tạo một file mớ i : File\New và lưu lại vớ i định dạng *.c hoặc *.h. 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.3) •
Chọn file vừa tạo. Nhấn Add rồi nhấn Close. Lúc này, trong cửa sổ Project, ở phía trái màn hình, sẽ xuất hiện thêm tập tin mà ta vừa add.
Bướ c 6: Thiết lập cho Keil C xuất ra file .hex, ta mở hộp thoại Option for
Group 1 (Hình 1.4). Click chọn vào checkbox Create HEX file trong tab Output (Hình 1.5). Nhấn OK Đến đây, ta đã hoàn tất các bướ c thiết lập cho một dự án mớ i. Các bướ c trên chỉ cần thực hiện một lần khi tạo dự án mớ i.
Trang 2
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.3 Menu Add Files to Group
Trang 3
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.5 Hộp thoại Options for Target Trang 4
THÍ NGHIỆM VI ĐIỀU KHIỂN 1.3.
BIÊN SOẠN: ĐỖ BÌNH NGUYÊN
Debug chươ ng trình Sau khi soạn thảo chươ ng trình xong, 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.6) hoặc ta cũng có thể nhấn phím F7
Hình 1.6 Thanh công cụ Build Sau khi chươ ng trình tiến hành biên dịch chươ ng trình, nếu không có lỗi xảy ra, ta sẽ nhận đượ c thông báo 0 Error(s), 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.7)
Hình 1.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, 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ố, 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.
•
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, làm cho chươ ng trình chạy không đúng ý đồ ban đầu của lập trình viên. 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, 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.
Keil C ngoài việc hỗ trợ ta soạn thảo và biên dịch chươ ng trình, 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ả.
Trang 5
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, 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.8)
•
Nhấn tổ hợ p phím Ctrl + F5.
•
Mở menu Debug-Start/Stop Debug Session
Hình 1.8 Nút Debug Muốn tắt chức năng Debug, ta làm lại thao tác trên một lần nữa. Sau khi kích hoạt chức năng Debug, cửa sổ Keil C có dạng như hình 1.9. Nếu có cửa sổ nào không xuất hiện, ta có thể vào menu View để bật cửa sổ đó lên.
Hình 1.9 Cửa sổ Keil C sau khi kích hoạt chức năng Debug Trong cửa sổ này, 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, chứa chươ ng trình đang đượ c debug
Trang 6
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. Muốn biết giá trị của biến nào, ta chọn cửa sổ này và nhấn phím F2, sau đó nhập tên của biến cần theo dõi. Lúc này, của sổ sẽ hiển thị tên biến cũng như giá trị hiện tại của biến đó.
Ngoài ra, 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.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. Kích hoạt cửa sổ này bằng cách vào menu View/Disassembly.
•
Cửa sổ Memory (Hình 1.11): Kích hoạt bằng menu View/Memory. 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 đó, ta nhập C: Địa chỉ vào ô Address .
§
Muốn xem bộ nhớ RAM bắt đầu từ một địa chỉ nào đó, ta nhập D: Địa chỉ vào
•
ô Address.
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, PSW, DPTR …
Hình 1.10 Cửa sổ Disassembly
Trang 7
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.12). Tuy nhiên, để có thờ i gian tươ ng ứng chươ ng trình debug và trên mạch thực tế, 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.
•
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.13)
Hình 1.12 Thờ i gian chạy chươ ng trình
Trang 8
THÍ NGHIỆM VI ĐIỀU KHIỂN
BIÊN SOẠN: ĐỖ BÌNH NGUYÊN
Hình 1.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, 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, để chúng ta có thể tìm ra đượ c một giải thuật ngắn nhất và nhanh nhất. Ta cũng có thể quan sát trạng thái các Port, các Timer, ngắt bằng cách vào menu Peripherals, chọn các đối tượ ng cần quan sát (Hình 1.14). Keil C cũng hỗ trợ ta quan sát các ngõ ra dướ i dạng xung. Để kích hoạt chức năng này, chúng ta chọn biểu tượ ng Analysis Window (Hình 1.15). 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.0, P1.2…). Ngoài ra ta có th ể chọn màu hiển thị tại mục Color. Sau khi đã thiết đặt đầy đủ các chân cũng như màu sắc, ta chọn Close để kết thúc phần Setup. Khi không cần quan sát một tín hiệu nào đó, ta có thể chọn tín hiệu đó trong hộp thoại Setup này và nhấn nút Delete, hoặc nhấn nút Kill All để loại bỏ tất cả tín hiệu đã đượ c chọn trướ c đó.
Trang 9
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.15 Thiết đặt cho Analysis Window
Trang 10
THÍ NGHIỆM VI ĐIỀU KHIỂN
BIÊN SOẠN: ĐỖ BÌNH NGUYÊN
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, 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, có nhảy vào hàm con.
•
Step over (F10): thực thi từng dòng lệnh, không nhảy vào hàm con.
•
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.17 Thanh công cụ Debug
Trang 11
THÍ NGHIỆM VI ĐIỀU KHIỂN 2.2.
BIÊN SOẠN: ĐỖ BÌNH NGUYÊN
CÁC KHỐI CHỨ C NĂNG TRÊN KIT THÍ NGHIỆM
2.2.1. Khối nguồn
Hình 2.2 Sơ đồ khối nguồn Khối này nhận điện áp 12Vac, nắn, lọc thành điện một chiều. Sau đó đưa qua 7805 để ổn định điện áp ngõ ra ở 5Vdc. Điện áp này đượ c cung cấp cho các khối khác trên kit.
2.2.2. Khối nạp chươ ng trình : VCC_5V
1
R1 C
5 4 3 2
J3 6 5 4 3 2 1 LPT PORT
4K7
VCC_5V 0 2
R3 100 R 4 1K R5 100 R6 100
1 19 2 3 4 5 6 7 8 9
R7 100
G1 C C G2 V A1 A2 A3 A4 A5 A6 A7 A8
Y1 Y2 Y3 Y4 Y5 Y6 D Y7 N G Y8
U4
74HC541 18 17 16 15 14 13 12 11
J4 3 1 4 2 SPI PROGRAM
0 1
Hình 2.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.7 ,cho phép ta nạp chươ ng trình cho các chip 89Sxx của hãng Atmel. Chươ ng trình đượ c nạp nối tiếp thông qua các chân MOSI, MISO, SCK và RESET của chip.
Trang 13
THÍ NGHIỆM VI ĐIỀU KHIỂN
BIÊN SOẠN: ĐỖ BÌNH NGUYÊN
2.2.3. Khối MCU : VCC_5V U7
0 4
1 2 3 4 5 6 7 8
P1.0/T2 P1.1/T2EX P1.2 P1.3 P1.4/SS P1.5/MOSI P1.6/MISO P1.7/SCK
C C V
P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7
VCC_5V
R18
AT89S52 39 38 37 36 35 34 33 32
2 3 4 5 6 7 8 9
1
4K7 10 11 12 13 14 15
RXD TXD INFRA RED EYE/P3.2 STAND_BY LED/P3.3 BUZZER/P3.4 AC LAMP/P3.5
0 1 2 3 4 5 6 7 D D D D D D D D A A A A A A A A
P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD ALE/PROG P2.7/A15
VCC_5V 31
R/ W RD ALE A15
EA/VPP
R27 100 SW1 RESET
16 17 30 28
PSEN
C3
29
10uF 9
RESET
RST J11
R28
P2.6/A14 P2.5/A13 P2.4/A12 P2.3/A11
8K2
27 26 25 24
C 4 3 3p
1 2 3 4 LCD CONTROL/LED CONTROL
18
XTAL2
Y1 11.0592 19 C 5 3 3p
XTAL1
D N G
P2.2/A10 P2.1/A9 P2.0/A8
23 22 21
P2.2/UP P2.1/MODE P2.0/DOWN
0 2
Hình 2.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ợ , giúp cho vi điều khiển hoạt động đượ c: •
Khối Auto Reset bao gồm R28, C3: giúp tự động reset vi điều khiển khi vừa bật nguồn.
•
Khối Manual Reset bao gồm SW1, R27: cho phép reset vi điều khiển bằng tay. 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.
•
Khối dao động bao gồm: Y1, C4, 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.
Trang 14
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, ta cần có một điện trở kéo lên để xác lập mức điện áp.
2.2.4. 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. Muốn led sáng, ta sẽ phải xuất mức thấp ra chân vi điều khiển.
2.2.5. Khối led 7 đoạn J1 4 3 2 1
VCC_5V
LED1 LED2 LED3 LED4
LED4
Q1 A1013
VCC_5V LED3
R 3 4 K7
Q2 A1013
VCC_5V LED2
R 4 4 K7
Q3 A1013
VCC_5V LED1
R 5 4 K7
Q4 A1013 R6 4K7
LED CONTROL 3
J4
R10 330 1 2 3 4 5 6 7 8
g f a b e d c
e d c a f g
1 2 4 5 6 7 9 10
E D C DP B A F G
8
C C C C V V
3
e d c a f g
1 2 4 5 6 7 9 10
E D C DP B A F G
8
C C C C V V
3
e d c a f g
1 2 4 5 6 7 9 10
E D C DP B A F G
8
C C C C V V
3
e d c a f g
1 2 4 5 6 7 9 10
E D C DP B A F G
8
C C C C V V
DATA LED U 3 L ED 7
U 4 L ED 7
U 5 L E D7
U6
LED 7
Hình 2.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). 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
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). Lưu đồ giải thuật quét led đượ c thể hiện trong hình 2.7, trong đó N_max là tổng số led 7 đoạn cần đượ c quét.
Hình 2.7 Lưu đồ giải thuật quét led 7 đoạn
Trang 16
THÍ NGHIỆM VI ĐIỀU KHIỂN
BIÊN SOẠN: ĐỖ BÌNH NGUYÊN
2.2.6. Khối hiển thị LCD U1
D S E S D E V V V
0 1 2 3 4 5 6 7 B B B B B B B B D D D D D D E D
S W R R
1 2 3
D
0 1 2 3 4 7 8 9 1 1 1 1 1
4 5 6
A K 5 6 1 1
VCC_5V 8 7 6 5 4 3 2 1
VCC_5V J5
D0-D7
R17 330 Q5 A1013
1 2 3 4
J6 LCD CONTROL
Hình 2.8 Sơ đồ khối LCD LCD đượ c thiết kế trên kit là loại LCD 2 dòng, 16 cột. Module này đượ c thiết kế cho mục đích thí nghiệm điều khiển LCD. J5 là ngõ vào nhận dữ liệu (DATA) hoặc lệnh (COMMAND) của LCD. J6 là ngõ vào điều khiển LCD
2.2.7. Khối nút nhấn SW2 UP
P2.2/UP SW3
MODE
P2.1/MODE SW4
DOWN
P2.0/DOWN
Hình 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. Bao gồm ba nút đượ c kết nối vào các chân P2.0,P2.1,P2.2 và tích cực ở mức thấp
Trang 17
THÍ NGHIỆM VI ĐIỀU KHIỂN
BIÊN SOẠN: ĐỖ BÌNH NGUYÊN
2.2.8. Khối Standby LED/Interrupt input STAND_BY LED/P3.3 D9
R30 330 VCC_5V
2 1
STAND_BY LED J12
INTERRUPT 1
Hình 2.10 Sơ đồ khối Standby LED/ Interrupt input Stand_by LED đượ c kết nối vào chân P3.3, đồng thờ i đây cũng là ngõ vào ngắt ngoài 1 và tích cực ở mức thấp.
2.2.9. Khối thu hồng ngoại U8 OUT VCC GND
2
INFRA RED EYE/P3.2
3
VCC_5V
1
C1 104
INFRA RED RECIEVER
Hình 2.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.2. Tín hiệu hồng ngoại từ Remote khi qua bộ thu sẽ bị đảo mức tích cực .
2.2.10.Khối Buzzer VCC_5V
1 C C V
U10 BUZZER D N G 2
R29 4K7 Q6 A1013
BUZZER/P3.4
Hình 2.12 Sơ đồ khối Buzzer Buzzer là một loa nhỏ, dùng để tạo âm thanh. Trong kit thí nghiệm này, buzzer đượ c điều khiển thông qua transistor A1013 và đượ c kết nối vào chân P3.4.
Trang 18
THÍ NGHIỆM VI ĐIỀU KHIỂN
BIÊN SOẠN: ĐỖ BÌNH NGUYÊN
2.2.11.Khối Opto Triac AC LAMP/P3.5 VCC_5V J14 3 2 1
6
C6 104
U12 R32 4K7
R33 330
A1-G-A2
1
D12
R31 330
2 4
MOC3020 LED
Hình 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, chân điều khiển đượ c kết nối vào chân P3.5 và tích cực ở mức thấp.
2.2.12.Khối giao tiếp UART J9 4 3 2 1
RXD TXD
RS232 VCC_5V
Hình 2.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, RxD) hoặc kết nối thêm mạch ngoài để giao tiếp theo chuẩn RS232.
Trang 19
THÍ NGHIỆM VI ĐIỀU KHIỂN
BIÊN SOẠN: ĐỖ BÌNH NGUYÊN
PHẦN III
THỰ C HÀNH 3.1.
ĐIỀU KHIỂN KHỐI LED ĐƠ N
3.1.1. Mục đích, 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, mở , dịch LED sang trái, dịch LED sang phải, sáng dồn, nhấp nháy. 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.1.2. Chươ ng trình tham khảo #include
// khai bao prototype void delay (unsigned int time); void nhap_nhay (void); void dem_nhi_phan (void); void dich_trai (void); //chuong trinh chinh void main (void) { while (1) { nhap_nhay(); delay(500); dem_nhi_phan(); delay(500); dich_trai(); delay(500); } } //cac chuong trinh con void nhap_nhay (void) { unsigned char i; for (i = 0; i < 10; i ++) {
Trang 20
THÍ NGHIỆM VI ĐIỀU KHIỂN
BIÊN SOẠN: ĐỖ BÌNH NGUYÊN
P1 = 0; delay (500); P1 = 0xff; delay (500); } } void dem_nhi_phan (void) { unsigned char i; for (i = 0; i < 255; i ++) { P1 = ~i; delay (300); }
} void dich_trai (void) { unsigned char i, j; for (j = 0; j < 5; j ++) { for (i = 0x01; i > 0; i <<= 1) { P1 = ~i; delay (300); } }
} void delay (unsigned int time) { while (time--) { TMOD = 0x01; //timer0 che do 16 bit TH0 = 0xFF; //nap gia tri cho timer TL0 = 0x00; TR0 = 1; //khoi dong bo dinh thoi while (!TF0); //cho co TF = 1 TF0 = 0 ; //xoa co TF TR0 = 0; //dung bo dinh thoi } }
Trang 21
THÍ NGHIỆM VI ĐIỀU KHIỂN
BIÊN SOẠN: ĐỖ BÌNH NGUYÊN
3.1.3. Bài tập mở rộng 1.
Viết chươ ng trình dịch một led qua phải
2.
Viết chươ ng trình 8 led sáng dồ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.
3.2.
ĐIỀU KHIỂN KHỐI BUZZER
3.2.1. Mục đích, 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, báo thức …
3.2.2. Chươ ng trình tham khảo #include #define BUZZER P3_4 //khai bao chan dieu khien Buzzer // khai bao prototype void delay (unsigned int time); void beep (void);
//chuong trinh chinh void main (void) { while (1) { beep(); delay (1000); } }
// cac chuong trinh con void beep (void) { unsigned char i; for (i = 0; i < 20; i ++) { BUZZER = 0; delay (1); BUZZER = 1; delay (1);
Trang 22
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; TH0 = 0xFF; TL0 = 0xBA; TR0 = 1; while(!TF0); TF0 = 0 ; TR0 = 0; } }
3.2.3. Bài tập mở rộng 1.
Viết chươ ng trình điều khiển Buzzer phát âm thanh cho đồng hồ báo
2.
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.
3.3.
GIAO TIẾP VỚ I NÚT NHẤN ĐƠ N
3.3.1. Mục đích, 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, hiệu chỉnh thông số,cài đặt …
3.3.2. Chươ ng trình tham khảo Chươ ng trình kiểm tra lần lượ t ba nút UP, MODE, DOWN, 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, đồng điều khiển tắt hoặc mở LED tươ ng ứng. #include //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
THÍ NGHIỆM VI ĐIỀU KHIỂN
BIÊN SOẠN: ĐỖ BÌNH NGUYÊN
// khai bao prototype void delay (unsigned char time); void beep (void); //chuong trinh chinh void main (void) { while (1) { if (BTN_UP == 0) { delay (200); //delay chong doi if (BTN_UP == 0) { beep(); while (BTN_UP == 0); //cho nha nut
UP LED0 = ~LED0; } } if (!BTN_DOWN) { delay (200); //delay chong doi if (!BTN_DOWN) { beep(); while (!BTN_DOWN); //cho
nha
nut
nha
nut
DOWN LED1 = ~LED1; } } if (!BTN_MODE) { delay (200); //delay chong doi if (!BTN_MODE) { beep(); while (!BTN_MODE); //cho
MODE LED2 = ~LED2; } }
Trang 24
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; for (i = 0; i < 20; i ++) { BUZZER = 0; delay (1); BUZZER = 1; delay (1); }
} void delay(unsigned char time) { while (time--) { TMOD = 0x01; //timer0 che do 16 bit TH0 = 0xFF; //nap gia tri cho timer TL0 = 0xBA; TR0 = 1; //khoi dong bo dinh thoi while(!TF0); //cho co TF = 1 TF0 = 0 ; //xoa co TF TR0 = 0; //dung bo dinh thoi } }
3.3.3. 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, nút Down nhấn dịch từ phải sang trái, nút Mode nhấn thì nhấp nháy cả 8 LED, mỗi kiểu sáng lập lại 5 lần. Sau đó chươ ng trình trở lại kiểm tra 3 nút như ban đầu.
3.4.
ĐIỀU KHIỂN KHỐI HIỂN THỊ LED 7 ĐOẠN
3.4.1. Mục đích, 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, đèn giao thông, đồng hồ báo giờ … Sinh viên phải nắm đượ c kỹ thuật quét LED, kỹ thuật sử dụng ngắt timer, biết cách kết nối phần cứng (kết nối header Data LED / D0 … D7 (P0), LCD control / LED
Trang 25
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 ).
3.4.2. 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 #define BTN_PRESSED 1 #define BTN_NOT_PRESSED 0 #define btnUp #define btnDown #define buzz #define ledUnits #define ledTens #define ledHundress
P2_0 P2_1 P3_4 P2_3 P2_4 P2_5
unsigned char code code_7seg [] = {0x81, 0xed, 0x43, 0x49, 0x2d, 0x19, 0x11, 0xcd, 0x01, 0x09}; unsigned char code code_scan [] = {0xf7, 0xef, 0xdf}; unsigned unsigned unsigned bit on =
char scrBuffer[3]; char count = 0; char pos = 0; 0;
void init (void); void delay (unsigned int time); void decode (unsigned char tmpCount); void main (void) { init(); while(1) { count ++; if (count > 100) count = 0; decode(count); delay(200); } } void delay (unsigned int time) //chuong trinh delay { unsigned int i,j;
Trang 26
THÍ NGHIỆM VI ĐIỀU KHIỂN
BIÊN SOẠN: ĐỖ BÌNH NGUYÊN
for (i = 0; i < time; i ++) for (j = 0; j < 100; j ++);
} void decode (unsigned char tmpCount) { scrBuffer[0] = code_7seg[tmpCount % 10]; tmpCount /= 10; scrBuffer[1] = code_7seg[tmpCount % 10]; tmpCount /= 10; scrBuffer[2] = code_7seg[tmpCount % 10]; } void init (void) // khoi tao timer0 { TH0 = 0x94; TL0 = 0x00; TF0 = 0; TR0 = 1; // cho phep dem ET0 = 1; // cho phep ngat EA = 1;
decode(count); } void isrTmr0 (void) interrupt 1 { TH0 = 0x94; TL0 = 0x00; if (on { P2 P0 on } else { P0 P2
== 0) = 0xff; //turn off all led = 0xff; //clear data = 1;
= scrBuffer[pos]; // output data = code_scan[pos]; // turn appropriate led
on if (++ pos == 3) pos = 0; on = 0;
} }
Trang 27
THÍ NGHIỆM VI ĐIỀU KHIỂN
BIÊN SOẠN: ĐỖ BÌNH NGUYÊN
3.4.3. Bài tập mở rộng 1. hình led.
Viết chươ ng trình hiển thị chữ HELLO chạy từ phải qua trái trên màn
2. Viết chươ ng trình điều khiển ban đầu hiển thị số 0, nếu nút UP đượ c nhấn thì tăng giá trị hiển thị lên một đơ n vị, nếu nút DOWN đượ c nhấn thì giảm một đơ n vị, 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, nếu nhấn nút MODE lần nữa thì dừng lại, lập lại quá tình kiểm tra ba nút như ban đầu.Có âm nhận phím, trong quá trình tăng tự động hai nút UP và DOWN vẫn có tác dụng.
3.5.
ĐIỀU KHIỂN KHỐI HIỂN THỊ LCD
3.5.1. Mục đích, 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, đồng hồ báo giờ , 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.
3.5.2. 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, qua phải. #include //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, chr) lcd_send_byte(0, cmd)
//khai bao prototype void lcd_waitms (unsigned int time); (bit cmd, unsigned char byte); void lcd_send_byte void lcd_init (void); void lcd_string(unsigned char *str); //chuong trinh chinh void main (void) { unsigned char i, j;
Trang 28
THÍ NGHIỆM VI ĐIỀU KHIỂN
BIÊN SOẠN: ĐỖ BÌNH NGUYÊN
lcd_init(); lcd_string ("Dai hoc Lac Hong"); lcd_cmd(0xC0); //di chuyen con tro ve dong thu 2 lcd_string (“Welcome !!!”); while (1) { for (i = 0; i < 16; i ++) { lcd_send_byte(0,0x18); lcd_waitms(1000); } for (i = 0; i < 16; i ++) { lcd_send_byte(0,0x1C); lcd_waitms(1000); }
} } //chuong trinh con void lcd_send_byte( bit cmd, unsigned char byte) { LCD_RW = 0; //write mode LCD_RS = cmd; // cmd = 0 send command, cmd = 1 send data LCD_DATA_PORT = byte; LCD_E = 1; LCD_E = 0; lcd_waitms(1); } void lcd_string(unsigned char *str) { while(*str != '\0') // lap lai cho den khi ket thuc chuoi { lcd_char(*str); // ghi ky tu len man hinh str ++; // ky tu tiep theo } } void lcd_init(void) { lcd_waitms(15);
//wait for about 15ms
Trang 29
THÍ NGHIỆM VI ĐIỀU KHIỂN
BIÊN SOẠN: ĐỖ BÌNH NGUYÊN
lcd_cmd(0x38);
// two line, size of char
lcd_cmd(0x01); lcd_cmd(0x06); lcd_cmd(0x0C);
// clear lcd // move cursor to right // lcd on, cursor off
5x7 dot
} void lcd_waitms (unsigned int time) { unsigned int x, y; for (x = 0; x <= time; x ++) { for (y = 0; y <= 121; y ++); } }
3.5.3. 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. Nếu nút đượ c nhấn thì Buzzer phát ra âm “Beep” báo nhận phím, và màn hình hiển thị dòng text thứ nhất, 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.
3.6.
TRUY XUẤT IC DS12887
3.6.1. Mục đích, 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, 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. • 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.6.2. Chươ ng trình tham khảo •
Chươ ng trình đồng hồ báo giờ , phút, giây bằng cách truy xuất dữ liệu thờ i gian từ DS12887, cho phép khở i tạo lại DS12887. #include #include "lcd_lib.h"
unsigned char code my_signature[] = "plain"; unsigned char code strDOW[7][4] =
{
Trang 30
THÍ NGHIỆM VI ĐIỀU KHIỂN
BIÊN SOẠN: ĐỖ BÌNH NGUYÊN
"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT" }; //---------location of date/time data--------------unsigned char xdata sec
_at_ 0x0000;
unsigned char xdata sec_alarm
_at_ 0x0001;
unsigned char xdata min
_at_ 0x0002;
unsigned char xdata min_alarm
_at_ 0x0003;
unsigned char xdata hour
_at_ 0x0004;
unsigned char xdata hour_alarm _at_ 0x0005; unsigned char xdata DOW
_at_ 0x0006;
unsigned char xdata date
_at_ 0x0007;
unsigned char xdata month
_at_ 0x0008;
unsigned char xdata year
_at_ 0x0009;
unsigned char xdata century
_at_ 0x0032;
//--------------------------------------------------
//-------location of control register--------------unsigned char xdata reg_A
_at_ 0x000A;
unsigned char xdata reg_B
_at_ 0x000B;
unsigned char xdata reg_C
_at_ 0x000C;
unsigned char xdata reg_D
_at_ 0x000D;
//--------------------------------------------------
//--------location of signature--------------------unsigned char xdata signature[5] _at_ 0x000E;
//--------------------------------------------------
bit check_DS12C887 (void); void init_DS12C887 (void);
Trang 31
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();
while (1)
{ lcd_1st_line; lcd_string(strDOW[0]); lcd_char(','); lcd_write_dec(date); lcd_char('/'); lcd_write_dec(month); lcd_char('/'); lcd_write_dec(year);
lcd_2nd_line; lcd_write_dec(hour); lcd_char(':'); lcd_write_dec(min); lcd_char(':'); lcd_write_dec(sec); } }
bit check_DS12C887 (void)
{ unsigned char i; for (i = 0; i < 5; i ++){ if (signature[i] != my_signature[i])
Trang 32
THÍ NGHIỆM VI ĐIỀU KHIỂN return
BIÊN SOẠN: ĐỖ BÌNH NGUYÊN 1;
//
new
installed
IC
or
battery was empty } return 0; // IC's working properly
}
void init_DS12C887 (void)
{ unsigned char i;
// write signature into Dalas for (i = 0; i < 5; i ++){
signature[i] = my_signature[i]; } // init the registers reg_A = 0x20; reg_B = 0x86; // SET bit = 1
// init the time hour = 3; min = 9;
reg_B = 0x06; // SET bit = 0 }
3.6.3. 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, cho phép ngườ i sử dụng chỉnh thờ i gian bằng ba nút MODE, UP, DOWN. Viết chươ ng trình đồng hồ báo thức.
Trang 33