• Nenhum resultado encontrado

Giao Trinh Thuc Hanh Vi Dieu Khien 8051

N/A
N/A
Protected

Academic year: 2021

Share "Giao Trinh Thuc Hanh Vi Dieu Khien 8051"

Copied!
150
0
0

Texto

(1)

1

TRƢỜNG CAO ĐẲNG NGHỀ CÔNG NGHỆ CAO HÀ NỘI

HÀ NỘI - 2011

MÔ ĐUN: VI ĐIỀU KHIỂN 8051

Mã số: MĐ 36

NGHỀ: ĐIỆN TỬ CÔNG NGHIỆP

(2)

2 Mã tài liệu:………. Mã quốc tế ISBN :…….. Mã tài liệu:………. Mã quốc tế ISBN :…….. Tuyên bố bản quyền :

Tài liệu này thuộc loại sách giáo trình. Cho nên các nguồn thông tin có thể đƣợc phép dùng nguyên bản hoặc trích dùng cho các mục đích về đào tạo và tham khảo .

Mọi mục đích khác có ý đồ lệch lạc hoặc sử dụng với mục đích kinh doanh thiếu lành mạnh sẽ bị nghiêm cấm.

Trƣờng Cao đẳng nghề Công nghệ cao Hà Nội sẽ làm mọi cách để bảo vệ bản quyền của mình.

Trƣờng Cao đẳng nghề Công nghệ cao Hà Nội cám ơn và hoan nghênh các thông tin giúp cho việc tu sửa và hoàn thiện tốt hơn tài liệu này.

Địa chỉ liên hệ:

Trƣờng Cao đẳng nghề Công nghệ cao Hà Nội

Tây Mỗ - Từ Liêm – Hà Nội www.hht.edu.vn

(3)

3

LỜI NÓI ĐẦU

Vi điều khiển là một trong những môn chuyên ngành và mang tính đặc thù của nghành Điện Tử Công Nghiệp. Hiện nay trên thế giới ngày càng có rất nhiều loại vi điều khiển của các hãng khác nhau ra đời chẳng hạn: vi điều khiển 8051 của hãng Atmel, AVR của Atmel, PIC của Microchip, H8 của hãng Hitachi, ARM của Texas Intrusment vv…

Trong nhiều năm tâm huyết với dạy nghề, chúng tôi đã cập nhật các loại mô hình vi điều khiển tiện ích hiện đại của các nƣớc, các công ty thiết bị dạy nghề ở Việt Nam. Một trong những mô hình vi điều khiển cơ bản hiện nay sử dụng lõi vi sử lý 8086 đang đƣợc sử dụng để dạy học rất phổ biến ở rất nhiều trƣờng Đại Học và Cao Đẳng trong cả nƣớc là vi điều khiển AT89S52. Và cũng đã đƣợc ứng dụng vào việc dạy học ở trƣờng CĐN Công nghệ cao Hà Nội. Đi đôi với các thiết bị này thì cần phải có các cuốn tài liệu hƣớng dẫn thực hành, thao tác và các bài tập cơ bản trên các mô hình.

Vì vậy chúng tôi đã biên soạn ra cuốn giáo trình Mô đun môn học Vi Điều Khiển 8051 phù hợp với mọi trình độ đào tạo của trƣờng Cao đẳng nghề, trung cấp nghề, sơ cấp nghề. Trong giáo trình cung cấp tất cả các kiến thức liên quan đến hƣớng dẫn sử dụng, các thao tác đấu nối, các bài thực hành từ cơ bản đến nâng cao, các thuật toán lập trình từ dễ đến khó với các ngoại vi hỗ trợ của AT89S52. Với cuốn sách này ngƣời học có thể tự thao tác và dễ dàng thực hiện bài học của mình. Ngoài ra trong cuốn sách còn có các bài tập tham khảo mà ngƣời học có thể tìm hiểu và dựa theo vào đó để thực hiện bài học của mình

Mục đích của cuốn giáo trình là nhằm nâng cao kiến thức và nội dung học tập, khả năng tự học cho ngƣời học, giảm bớt các lần thao tác hƣớng dẫn thực hành của ngƣời dạy. Từ đó sẽ làm tăng tính hiệu quả và chất lƣợng của mô đun học tập.

Hà Nội, ngày …. tháng…. năm….

CÁC TÁC GIẢ

Hoàng Đức Long

Đàm Hồng Duân

(4)

4

MỤC LỤC

GIỚI THIỆU VỀ MÔ ĐUN VI ĐIỀU KHIỂN 8051 ... 10

Mã mô đun: MĐ 36 ... 10

Thời lƣợng: 120h (60h lý thuyết và 60h thực hành) ... 10

Vị trí, ý nghĩa, vai trò mô đun: ... 10

Mục tiêu của mô đun: ... 10

Mục tiêu thực hiện của mô đun: ... 10

Nội dung chính của mô đun: ... 10

SƠ ĐỒ QUAN HỆ TRÌNH TỰ HỌC NGHỀ ĐIỆN TỬ CÔNG NGHIỆP ... 11

CÁC HÌNH THỨC HỌC TẬP CHÍNH ... 12

TRONG MÔ ĐUN/MÔN HỌC ... 12

1. Làm việc độc lập. ... 12

2. Hoạt động theo nhóm. ... 12

3. Nghiên cứu phát triển ứng dụng ... 12

YÊU CẦU VỀ ĐÁNH GIÁ HOÀN THÀNH ... 13

MÔ ĐUN/MÔN HỌC ... 13

BÀI 1 ... 14

Giới thiệu: ... 14

Mục tiêu thực hiện: ... 14

Nội dung chính: ... 14

1. Các linh kiện dùng trong sơ đồ mạch. ... 14

Hình 1.1 Sơ đồ mạch khối MCU sử dụng AT89S52. ... 15

BÀI 2 ... 18

Giới thiệu: ... 18

Mục tiêu thực hiện: ... 18

Nội dung chính: ... 18

1. Sơ đồ mạch và lý thuyết điều khiển led đơn. ... 18

Hình 2.1 Sơ đồ nguyên lý mạch led đơn ... 18

(5)

5 2. Bài tập thực hành: Lập trình điều khiển led đơn với cổng vào ra của

AT89S52. ... 20

Hình 2.2 Lƣu đồ thuật toán lập trình điều khiển Led đơn. ... 20

BÀI 3 ... 23 Giới thiệu: ... 23 Mục tiêu thực hiện: ... 23 Nội dung chính: ... 23 1. Sơ đồ mạch và cách kiểm tra nút nhấn. ... 23 Hình 3.1 Sơ đồ nguyên lý mạch nút nhấn. ... 23 Bảng 3.1 Bảng mã số liệu của nút nhấn ... 24

2. Bài tập thực hành: Lập trình đọc dữ liệu từ nút nhấn điều khiển led đơn . 24 Hình 3.2 Lƣu đồ thuật toán lập trình kiểm tra nút nhấn điều khiển led đơn. .... 25

BÀI 4 ... 31 Giới thiệu: ... 31 Mục tiêu thực hiện: ... 31 Nội dung chính: ... 31 1. Sơ đồ mạch và cách quét bàn phím HEXA. ... 31 Hình 4.1 Sơ đồ nguyên lý mạch bàn phím Hexa. ... 31

Bảng 4.1 Bảng mã điều khiển và mã dữ liệu đầu ra bàn phím Hexa ... 32

2 Bài tập thực hành: Lập trình đọc dữ liệu từ bàn phím điều khiển led đơn . 33 Hình 4.2 Lƣu đồ thuật toán lập trình đọc bàn phím hexa điều khiển led đơn ... 34

BÀI 5 ... 43

Giới thiệu: ... 43

Mục tiêu thực hiện: ... 43

Nội dung chính: ... 43

1. Sơ đồ mạch và lý thuyết điều khiển màn hình led 7 thanh. ... 43

Hình 5.1 Sơ đồ nguyên lý màn hình LED 7 thanh. ... 44

Bảng 5.1 Bảng mã hiển thị số lên led 7 thanh ... 45

(6)

6 2. Bài tập thực hành: Lập trình đọc dữ liệu từ bàn phím hiển thị lên màn hình

led 7 thanh. ... 46

Hình 5.2 Lƣu đồ thuật toán lập trình điều khiển màn hình led 7 thanh. ... 47

BÀI 6 ... 52

Giới thiệu: ... 52

Mục tiêu thực hiện: ... 52

Nội dung chính: ... 53

1. Sơ đồ mạch và lý thuyết điều khiển màn hình led ma trận. ... 53

Hình 6.1 Sơ đồ nguyên lý màn hình LED ma trận. ... 53

Bảng 6.1 Bảng mã điều khiển quét hàng của led ma trận ... 54

Bảng 6.2 Bảng mã phông chữ hiển thị trên led ma trận ... 55

2. Bài tập thực hành: Lập trình hiển thị các ký tự lên trên màn hình led ma trận ... 56

Hình 6.2 Lƣu đồ thuật toán đọc bàn phím hexa hiển thị lên led ma trận ... 57

BÀI 7 ... 64

Giới thiệu: ... 64

Mục tiêu thực hiện: ... 65

Nội dung chính: ... 65

1. Sơ đồ mạch và lý thuyết điều khiển màn hình LCD16x2. ... 65

Hình 7.1 Sơ đồ nguyên lý màn hình LCD16x2 ... 66 Bảng 7.1 Bảng chức năng các chân của LCD16x2 ... 67 Bảng 7.2 Bảng mã lệnh điều khiển LCD16x2 ... 68 Bảng 7.3 Bảng mã ký tự hiển thị lên trên LCD16x2 ... 69 3. Bài tập thực hành: Lập trình hiển thị các ký tự lên trên màn hình LCD16x2. ... 70

Hình 7.2 Lƣu đồ thuật toán lập trình một máy tính điện tử ... 70

BÀI 8 ... 80

Giới thiệu: ... 80

Mục tiêu thực hiện: ... 80

(7)

7

1. Sơ đồ mạch và cách đọc dữ liệu từ bộ ADC0804. ... 80

Hình 8.1 Sơ đồ nguyên lý mạch chuyển đổi tƣơng tự số ADC0804 ... 80

2. Bài tập thực hành: Lập trình giao tiếp với bộ biến đổi ADC0804. ... 81

Hình 8.2 Lƣu đồ thuật toán lập trình bộ đo nhiệt độ hiển lên LCD16x2. ... 83

BÀI 9 ... 89

Giới thiệu: ... 89

Mục tiêu thực hiện: ... 89

Nội dung chính: ... 89

1. Sơ đồ mạch và lý thuyết điều khiển bộ DAC0808. ... 89

Hình 9.1 Sơ đồ nguyên lý mạch chuyển đổi số tƣơng tự DAC0808 ... 90

2. Bài tập thực hành: Lập trình giao tiếp với bộ biến đổi DAC0808. ... 90

Hình 9.2 Lƣu đồ thuật toán điều khiển bộ biến đổi DAC0808 ... 91

BÀI 10 ... 102

Giới thiệu: ... 102

Mục tiêu thực hiện: ... 102

Nội dung chính: ... 102

1. Sơ đồ mạch và lý thuyết điều khiển động cơ bƣớc. ... 102

Hình 10.1 Sơ đồ nguyên lý mạch điều khiển động cơ bƣớc. ... 103

Hình 10.2 Hình ảnh thực tế động cơ bƣớc ... 103

Hình 10.3 Giản đồ xung điều khiển động cơ bƣớc ... 104

2. Bài tập thực hành: Lập trình điều khiển động cơ bƣớc. ... 106

Hình 10.4 Lƣu đồ thuật toán điều khiển động cơ bƣớc ... 106

BÀI 11 ... 113

Giới thiệu: ... 113

Mục tiêu thực hiện: ... 113

Nội dung chính: ... 114

1. Sơ đồ mạch và cách thức truyền thông UART ... 114

Hình 11.1 Sơ đồ nguyên lý mạch giao tiếp máy tính RS232. ... 115

(8)

8

Bảng 11.1 Bảng lựa chọn nguồn xung tốc độ BAUD ... 117

Bảng 11.2 Bảng giá trị tính toán tốc độ BAUD từ Timer1 ... 118

Hình 11.3 Sơ đồ khối nguồn xung cung cấp tốc độ BAUD từ Timer2 ... 119

Bảng 11.3 Bảng giá trị tính toán tốc độ BAUD từ Timer2 ... 120

2. Bài tập thực hành: Lập trình giao tiếp với máy tính. ... 120

Hình 11.4 Lƣu đồ thuật toán đọc nhiệt độ và hiển thị lên máy tính. ... 121

BÀI 12 ... 127

Giới thiệu: ... 127

Mục tiêu thực hiện: ... 127

Nội dung chính: ... 128

1. Sơ đồ mạch và cách thức khởi tạo chế độ ngắt ... 128

Hình 12.1 Sơ đồ mạch các chân vào ra của AT89S51 ... 128

2. Bài tập thực hành: Lập trình đếm sản phẩm trong một khoảng thời gian nhất định sử dụng ngắt ngoài. ... 134

Hình 12.2 Lƣu đồ thuật toán lập trình bộ đếm sản phẩm ... 134

BÀI 13 ... 139

Giới thiệu: ... 139

Mục tiêu thực hiện: ... 139

Nội dung chính: ... 139

1. Bài tập thực hành: Lập trình một bộ đo và khống chế nhiệt độ. ... 139

Hình 13.1 Lƣu đồ thuật toán bộ đo và khống chế nhiệt độ ... 140

BÀI 14 ... 141

Giới thiệu: ... 141

Mục tiêu thực hiện: ... 141

Nội dung chính: ... 141

1. Bài tập thực hành: Lập trình một bộ điều khiển động cơ bƣớc ... 141

Hình 14.1 Lƣu đồ thuật toán lập trình bộ điều khiển động cơ bƣớc. ... 142

PHỤC LỤC ... 144

(9)

9 Phụ lục 2: Hƣớng dẫn sử dụng phần mền nạp chíp:... 148 TÀI LIỆU THAM KHẢO ... 150

(10)

10

GIỚI THIỆU VỀ MÔ ĐUN VI ĐIỀU KHIỂN 8051

Mã mô đun: MĐ 36

Thời lượng: 120h (60h lý thuyết và 60h thực hành)

Vị trí, ý nghĩa, vai trò mô đun:

- Vị trí của mô đun: Mô đun đƣợc bố trí dạy sau khi học song môn vi xử lý và học trƣớc môn vi mạch số lập trình

- Ý nghĩa của mô đun: Cung cấp cho sinh viên các kiến thức liên quan đến vi điều khiển, các cấu trúc lập trình và làm việc với các thanh ghi của vi điều khiển.

- Vài trò của mô đun: Đây là mô đun học bắt buộc và là môn tiền đề để có thể học và nghiên cứu sang các dòng vi điều khiển khác cao cấp hơn.

Mục tiêu của mô đun:

- Vận hành đƣợc các thiết bị và dây chuyền sản xuất dùng vi điều khiển - Xác định đƣợc các nguyên nhân gây ra hƣ hỏng sảy ra trong thực tế. - Kiểm tra và viết đƣợc các chƣơng trình điều kiển.

Mục tiêu thực hiện của mô đun:

- Giảm thiểu thao tác hƣớng dẫn và phân tích bài học của giáo viên - Tăng cƣờng tính tự học và tƣ duy phân tích bài toán của sinh viên.

Nội dung chính của mô đun:

Bài 1: Tổng quan về khối MCU Bài 2: Điều khiển LED đơn Bài 3: Đọc và kiểm tra nút nhấn Bài 4: Đọc dữ liệu từ bàn phím Hexa Bài 5: Điều khiển màn hình led 7 thanh Bài 6: Điều khiển màn hình led ma trận Bài 7: Điều khiển màn hình LCD16x2 Bài 8: Đọc dữ liệu từ bộ biến đổi ADC0804 Bài 9: Điều khiển bộ chuyển đổi DAC0808 Bài 10: Điều khiển động cơ bƣớc

Bài 11: Giao tiếp nối tiếp UART Bài 12: Điều khiển ngắt

Bài 13: Lập trình đo và khống chế nhiệt độ Bài 14: Lập trình bộ điều khiển động cơ bƣớc

(11)

11

SƠ ĐỒ QUAN HỆ TRÌNH TỰ HỌC NGHỀ ĐIỆN TỬ CÔNG NGHIỆP

Ghi chú: Chƣơng trình môn học đƣợc sắp xếp tuần tự từ cơ bản đến nâng cao và có tính kế thừa, các môn học ở kỳ trƣớc sẽ bổ

xung và hỗ trợ cho các môn học ở kỳ sau. Vì vậy sinh viên phải lắm chắc đƣợc kiến thức của các môn học kỳ trƣớc để tiếp thu và phát triển môn học mới một cách dễ dàng hơn, tƣ duy sáng tạo hơn.

Ghép nối MT ĐT nâng cao Profibus VĐK PIC FPGA PLC nâng cao Thức tập TN Đồ án Giáo dục QP Chính trị Pháp luật Thể dục Tiếng anh Tin học ĐC Vẽ kỹ thuật Điện kỹ thuật Linh kiện ĐT Đo lƣờng ĐT Kỹ thuật điện tử An toàn LĐ Vẽ điện Điện cơ bản Vi mạch TT Kỹ thuật XS Máy điện Trang bị điện Lập trình C Thiết kế mạch Điện tử CB Tin học VP Kỹ thuật CB Điện tử CS Thực tập xung số Vi xử lý Thực tế PLC VĐK 8051 Thực tập SX Ra trƣờng

(12)

12

CÁC HÌNH THỨC HỌC TẬP CHÍNH

TRONG MÔ ĐUN/MÔN HỌC

1. Làm việc độc lập.

- Sinh viên phải có tinh thần tự giác cao.

- Đảm bảo hiệu quả công việc và bài tập đƣợc giao. - Trung thực trong quá trình học tập và thi.

2. Hoạt động theo nhóm.

- Tự tổ chức hoạt động theo nhóm từ 3 đến 5 ngƣời.

- Các thanh viên trong nhóm phải có ý thức kỷ luật và đoàn kết

- Có trách nhiệm trong công việc của nhóm và biết chia sẻ tài liệu, kiến thức.

3. Nghiên cứu phát triển ứng dụng

- Sinh viên có thể tổ chức nghiên cứu tập thể hoặc cá nhân để phát triển một ứng dụng thực tiễn liên quan đến các nội dung đã học.

-Trong quá trình nghiên cứu đòi hỏi sự nhạy bén, trao đổi thẳng thắn về vấn đề đang vƣớng mắc hoặc hƣớng đi nhƣ thế nào để đạt đến đích.

(13)

13

YÊU CẦU VỀ ĐÁNH GIÁ HOÀN THÀNH

MÔ ĐUN/MÔN HỌC

Sau khi học xong mô đun môn học này ngƣời học cần phải đạt đƣợc các yêu cầu sau đây:

1. Lập trình và điều khiển thành thạo các chân vào ra của AT89S52. 2. Lập trình và điều khiển đƣợc bộ Timer và counter.

3. Lập trình và điều khiển đƣợc ngắt ngoài, ngắt timer. 4. Lập trình và điều khiển đƣợc bộ biến đổi ADC0804. 5. Lập trình và điều khiển đƣợc bộ biến đổi DAC0808. 6. Lập trình truyền dữ liệu lên máy tính qua cổng UART. 7. Lập trình điều khiển đƣợc động cơ bƣớc quay.

8. Thiết kế và lập trình một mạch ứng dụng trong thực tế sử dụng vi điều khiển AT89S52.

(14)

14

BÀI 1

Tên bài: TÌM HIỀU KHỐI MCU Mã bài: AT89-01

Giới thiệu:

- Khối MCU sử dụng vi điều khiển 8bit AT89S52 thuộc họ 8051. Đƣợc dùng trong các mạch điều khiển có thể lập trình đƣợc nhằm giúp tối ƣu hóa thiết kế, tăng độ chính xác của mạch điều khiển. Từ đó có thể làm tăng chất lƣợng và tính năng của sản phẩm tốt hơn.

Mục tiêu thực hiện:

- Giúp ngƣời học có thể hiểu rõ hơn về vi điều khiển AT89S52 - Biết đƣợc sơ đồ thiết kế của khối MCU.

- Định hƣớng đƣợc các thao tác cho ngƣời học khi kết nối MCU với các ngoại vi bên ngoài.

Nội dung chính:

1. Các linh kiện dùng trong sơ đồ mạch.

- U7: Vi điều khiển AT89S52 thuộc họ 8051 dùng làm MCU để lập trình đọc dữ liệu từ ngoại vi và điều khiển các ngoại vi trên kit thực hành theo lƣu đồ thuật toán và chƣơng trình của ngƣời lập trình. Thông số kỹ thuật của AT89S52:

+ Bộ nhớ EEPROM nội 4Kbytes + Bộ nhớ RAM 128 bytes

+ Có 3 bộ Timer/Counter 8bit và 16bit + Có 32 chân vào ra I/O.

+ Có 2 đầu vào ngắt ngoài INT0 và INT1. + Tần số xung làm việc tối đa 30MHz. + Có 1 giao tiếp nối tiếp UART

+ Có hệ thống đƣờng bus dữ liệu và địa chỉ chuẩn Intel cho phep truy cập bộ nhớ ngoài.

(15)

15 Hình 1.1 Sơ đồ mạch khối MCU sử dụng AT89S52.

- J6: Cổng nạp chƣơng trình cho MCU. Khi muốn nạp chƣơng trình từ trên máy tính xuống ta phải kết nối cổng USB với mạch nạp và đồng thời kết nối đầu ra của mạch nạp tới cổng nạp J6.

- SW0: Nút nhấn dùng để Reset MCU. Khi MCU đang chạy chƣơng trình nếu ta muốn MCU chạy lại chƣơng từ đầu thì ta nhấn vào phím SW0. Lúc này chân RST của MCU sẽ thay đổi mức tín hiệu từ 0 lên 1 (0 V lên 5 V- Sƣờn dƣơng). Trong quá trình

(16)

16 thay đổi mức giá trị điện áp MCU sẽ thực hiện quá trình Reset và cho chƣơng trình chạy lại từ đầu.

- Y1: Thạch anh dùng để tạo tần số xung CLOCK cho MCU hoạt động. Giá trị của xung CLOCK = 11,0592 MHz. Với giá trị xung CLOCK này sẽ làm quá trình tính giá trị đƣa vào các bộ Timer để tạo tần số và định thời đƣợc dễ dàng.

- PORT0: Khe cắm dùng để kết nối ngoại vi với PORT điều khiển số 0 của MCU. Khi kết nối ta sẽ dùng cáp để cắm vào khe cắm PORT0 với khe cắm của ngoại vi tƣơng ứng. Do PORT0 của MCU bên trong không có trở kéo lên nguồn VCC = 5V lên trong quá trình thiết kế mạch ta phải thiết kế thêm điện trở băng RN1 để nối các chân điều khiển này lên nguồn VCC.

- PORT1: Khe cắm dùng để kết nối ngoại vi với PORT điều khiển số 1 của MCU. Khi kết nối ta sẽ dùng cáp để cắm vào khe cắm PORT1 với khe cắm của ngoại vi tƣơng ứng.

- PORT2: Khe cắm dùng để kết nối ngoại vi với PORT điều khiển số 2 của MCU. Khi kết nối ta sẽ dùng cáp để cắm vào khe cắm PORT2 với khe cắm của ngoại vi tƣơng ứng.

- PORT3: Khe cắm dùng để kết nối ngoại vi với PORT điều khiển số 3 của MCU. Khi kết nối ta sẽ dùng cáp để cắm vào khe cắm PORT3 với khe cắm của ngoại vi tƣơng ứng.

Các thanh ghi điều khiển vào ra:

- Trong vi điều khiển AT89S52 không có thanh ghi điều khiển hƣớng dữ liệu mà chỉ có các thanh ghi điều khiển dữ liệu vào ra là Px (với x là tên các thanh của các

Port tương ứng: 0, 1, 2, 3). Để điều khiển dữ liệu vào ra trên các PORT điều khiển ta

chỉ gán dữ liệu vào các thanh ghi điều khiển tƣơng ứng.

VD: Điều khiển các chân PORT0 là đầu ra ở mức logic 1. P0 = 0xFF;

Điều khiển các chân PORT1 là đẩu ra ở mức logic 0. P1 = 0x00;

Điều khiển chân P2.1 là đầu ra ở mức logic 1. P2^1 = 1;

Điều khiển chân P3.7 là đầu ra ở mức logic 0: P3^7 = 0;

(17)

17 Đọc dữ liệu từ PORT0.

unsigned char du_lieu; du_lieu = P0;

Đọc dữ liệu từ chân P1.0 unsigned char du_lieu; du_lieu = P1^0;

P0: Thanh ghi điều khiển dữ liệu vào ra của PORT0

P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0

Bit 7 Bit 0

P1: Thanh ghi điều khiển dữ liệu vào ra của PORT1

P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0

Bit 7 Bit 0

P2: Thanh ghi điều khiển dữ liệu vào ra của PORT2

P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0

Bit 7 Bit 0

P3: Thanh ghi điều khiển dữ liệu vào ra của PORT3

P3.7 P3.6 P3.5 P3.4 P3.3 P3.2 P3.1 P3.0

(18)

18

BÀI 2

Tên bài: ĐIỀU KHIỂN LED ĐƠN Mã bài: AT89-02

Giới thiệu:

- LED đƣợc dùng rất phổ biến và rộng dãi trong tất cả các thiết bị nhƣ: Đèn báo nguồn, đèn nhấp nháy vv…Trong bài tập này led đơn có thể dùng để hiển thị các mã nhị phân 8 bit hoặc dùng để đƣa ra cảnh báo, báo hiệu tùy thuộc vào ứng dụng của ngƣời lập trình.

Mục tiêu thực hiện:

- Sinh viên biết lập trình điều khiển các PORT của MCU theo bit và theo byte - Biết viết các chƣơng trình con tạo trễ

- Biết sử dụng các lệnh gán, lệnh khai báo biến, khai báo địa chỉ, các câu lệnh dịch bit, đảo bit.

- Biết sử dụng các toán tử vòng lặp vô tận, vòng lặp có điều kiện.

Nội dung chính:

1. Sơ đồ mạch và lý thuyết điều khiển led đơn.  Các linh kiện dùng trong sơ đồ mạch.

(19)

19 - LD0 – LD7: Các LED đơn đƣợc thiết kế ở chế độ A chung còn chân K dùng để điều khiển. Khi ta lập trình tín hiệu điều khiển LED tích cực ở mức 0. Ta chỉ cần xuất tín hiệu điều khiển mức 0 vào vị trí LED tƣơng ứng thì LED sẽ sáng và ngƣợc lại nếu ta xuất tín hiệu mức 1 thì LED sẽ tắt.

- LED đơn trong thiết kế này có thể dùng để hiển thị các mã nhị phân 8 bit hoặc dùng để đƣa ra cảnh báo, báo hiệu tùy thuộc vào ứng dụng của ngƣời lập trình.

- J22: Khe cắm dùng để nối toàn bộ ngoại vi LED đơn với MCU. Khi kết nối ngoại vi này với MCU ta chỉ cần dùng cáp 8 sợi để cắm vào khe cắm J22 và một trong các PORT điều khiển của MCU.

Chú ý: Khi kết nối phải nhớ chiều của cáp kết nối sao cho các chân của PORT

điều khiển từ chân số Px.0 đến chân Px.7 phải nối tƣơng ứng với các LED từ LD0 đến LD7. (x là tên của PORT tương ứng với 0, 1, 2, 3). Mục đích kết nối này để thuận tiện cho việc lập trình.

Bảng 2.1 Bảng mã điều khiển led đơn

STT LED

TRẠNG THÁI ĐIỀU KHIỂN 8 BIT

SÁNG = 0 : TẮT = 1 MÃ ĐIỀU KHIỂN

BIT7 6 5 4 3 2 1 BIT0 HEXA NHỊ PHÂN

1 LD0 1 1 1 1 1 1 1 0 0xFE 0b11111110 2 LD1 1 1 1 1 1 1 0 1 0xFD 0b11111101 3 LD2 1 1 1 1 1 0 1 1 0xFB 0b11111011 4 LD3 1 1 1 1 0 1 1 1 0xF7 0b11110111 5 LD4 1 1 1 0 1 1 1 1 0xEF 0b11101111 6 LD5 1 1 0 1 1 1 1 1 0xDF 0b11011111 7 LD6 1 0 1 1 1 1 1 1 0xBF 0b10111111 8 LD7 0 1 1 1 1 1 1 1 0x7F 0b01111111

(20)

20

2. Bài tập thực hành: Lập trình điều khiển led đơn với cổng vào ra của AT89S52.  Dụng cụ chuẩn bị:

+ Đồng hồ số

+ Kit thực hành vi điều khiển 8051

+ Ocillocope

+ Mạch nạp AT89S52

+ Các loại cáp kết nối 8 sợi, 4 sợi và 2 sợi. Đề bài: Học sinh tự thiết kế và lập trình theo các yêu cầu sau:

Yêu cầu:

- Thiết kế lƣu đồ thuật toán của chƣơng trình điều khiển led đơn theo các trƣờng hợp sau:

+ Sáng lan từ phải qua trái. + Sáng lan từ trái qua phải.

+ Sáng lan tắt dần từ trái qua phải + Sáng lan tắt dần từ phải qua trái. + Sáng lan từ hai bên vào giữa + Sáng lan từ giữa ra hai bên.

- Sử dụng cáp 8 sợi kết nối lần lƣợt các PORT điều khiển P0, P1, P2, P3 đến ngoại vi LED đơn.

Phần trả lời: ( Học sinh vẽ lƣu đồ thuật toán và lập trình trên máy tính )

(21)

21 Chƣơng trình :

- Học sinh tự viết chƣơng trình trên máy tính và chạy thử trên Kit thực hành.  Nhận xét:

- Nhận xét của giáo viên hƣớng dẫn về bài thực hành của học sinh

……… ……… ……… ……… ……… ……… Chƣơng trình tham khảo

Đề bài 1: Viết chƣơng trình điều khiển 8 led đơn sáng lan lần lƣợt chạy từ trái

qua phải. PORT điều khiển là P0. - Chƣơng trình:

#include <AT89x51.h> #include <stdio.h> #include <math.h> unsigned char du_lieu;

void delay_us (unsigned int time) {

unsigned int i; for (i=0;i<time;i++); }

void main (void) { int i; P0 = 0xFF; while(1) { du_lieu = 0xFF; for(i=0; i<9; i++) {

(22)

22 P0 = du_lieu; du_lieu = du_lieu<<1; delay_us(10000); } } }

Đề bài 2: Viết chƣơng trình điều khiển 8 led đơn sáng lan lần lƣợt chạy từ phải

qua trái. PORT điều khiển là P1. - Chƣơng trình:

#include <AT89x51.h> #include <stdio.h> #include <math.h> unsigned char du_lieu;

void delay_us (unsigned int time) {

unsigned int i; for (i=0;i<time;i++); }

void main (void) { int i; P1 = 0xFF; while(1) { du_lieu = 0xFF; for(i=0; i<9; i++) {

P1 = du_lieu;

du_lieu = du_lieu>>1;

delay_us(10000);

(23)

23

}

}

BÀI 3

Tên bài: ĐỌC VÀ KIỂM TRA NÚT NHẤN Mã bài: AT89-03

Giới thiệu:

- Nút nhấn đƣợc dùng đƣợc dùng rất nhiều trong các thiết bị điều khiển nhƣ: Bộ biến tần, máy in, máy Photo coppy, máy CNC, vv… Nó đƣợc dùng để thiết lập, cài đặt các chế độ điều khiển của thiết bị.

Mục tiêu thực hiện:

- Biết sử dụng các câu lệnh kiểm tra bàn phím, kiểm tra dữ liệu đầu vào. - Biết lập trình điều khiển vào ra cho các PORT của MCU.

- Biết dùng các câu lệnh đảo bit, gán bit, dịch bit và các vòng lặp.

- Biết đƣợc ứng dụng của nút nhấn dùng để làm gì từ đó có thể thiết kế xây dựng các mạch ứng dụng cần đến nút nhấn.

Nội dung chính:

1. Sơ đồ mạch và cách kiểm tra nút nhấn.

Hình 3.1 Sơ đồ nguyên lý mạch nút nhấn.

- SW1 – SW8: 8 nút nhấn đơn đƣợc thiết kế ở chế độ MASS chung do đó tín hiệu của nút nhấn xuất ra khi đƣợc bấm là tích cực ở mức 0. Khi ta lập trình nếu tín hiệu

(24)

24 đọc đƣợc từ PORT điều khiển đƣợc nối với nút nhấn là giá trị 0 thì lúc này nút nhấn đã đƣợc tác động và ngƣợc lại nếu giá trị đọc đƣợc là 1 thì nút bấm chƣa đƣợc tác động.

- Nút nhấn là ngoại vi đầu vào của MCU có tác dụng để chọn chế độ điều khiển hoặc chức năng điều khiển tùy thuộc vào mục đích của ngƣời lập trình

- J34: Khe cắm dùng để nối toàn bộ ngoại vi nút nhấn với PORT của MCU. Khi kết nối nút nhấn với MCU ta dùng cáp 8 sợi để cắm vào khe cắm J34 và một trong các PORT điều khiển của MCU.

Chú ý: Khi kết nối phải nhớ chiều của cáp kết nối sao cho các chân của PORT

điều khiển từ chân số Px.0 đến chân Px.7 phải nối tƣơng ứng với các nút nhấn SW1 đến SW8. (x là tên của PORT tương ứng với 0, 1, 2, 3). Mục đích kết nối này để thuận tiện cho việc lập trình.

Bảng 3.1 Bảng mã số liệu của nút nhấn

STT NÚT BẤM

TRẠNG THÁI 8 BIT ĐẦU RA

NHẤN = 0 : KHÔNG NHẤN = 1 MÃ DỮ LIỆU

BIT7 6 5 4 3 2 1 BIT0 HEXA NHỊ PHÂN

1 SW1 1 1 1 1 1 1 1 0 0xFE 0b11111110 2 SW2 1 1 1 1 1 1 0 1 0xFD 0b11111101 3 SW3 1 1 1 1 1 0 1 1 0xFB 0b11111011 4 SW4 1 1 1 1 0 1 1 1 0xF7 0b11110111 5 SW5 1 1 1 0 1 1 1 1 0xEF 0b11101111 6 SW6 1 1 0 1 1 1 1 1 0xDF 0b11011111 7 SW7 1 0 1 1 1 1 1 1 0xBF 0b10111111 8 SW8 0 1 1 1 1 1 1 1 0x7F 0b01111111

2. Bài tập thực hành: Lập trình đọc dữ liệu từ nút nhấn điều khiển led đơn  Dụng cụ chuẩn bị:

+ Đồng hồ số

+ Kit thực hành vi điều khiển 8051

+ Ocillocope

(25)

25 + Các loại cáp kết nối 8 sợi, 4 sợi và 2 sợi.

Đề bài: Học sinh tự thiết kế và lập trình theo các yêu cầu sau: Yêu cầu:

- Thiết kế lƣu đồ thuật toán đọc nút nhấn điều khiển led đơn theo các trƣờng hợp sau: + Nhấn phím SW1: Led LD0 sáng nhấp nháy 1 lần. + Nhấn phím SW2: Led LD1 sáng nhấp nháy 2 lần. + Nhấn phím SW3: Led LD2 sáng nhấp nháy 3 lần. + Nhấn phím SW4: Led LD3 sáng nhấp nháy 4 lần. + Nhấn phím SW5: Led LD4 sáng nhấp nháy 5 lần. + Nhấn phím SW6: Led LD5 sáng nhấp nháy 6 lần. + Nhấn phím SW7: Led LD6 sáng nhấp nháy 7 lần. + Nhấn phím SW8: Led LD8 sáng nhấp nháy 8 lần.

- Sử dụng cáp 8 sợi kết nối PORT điều khiển P0 với nút nhấn và PORT điều khiển P1 với led đơn.

Phần trả lời: ( Học sinh vẽ lƣu đồ thuật toán và lập trình trên máy tính )

Hình 3.2 Lưu đồ thuật toán lập trình kiểm tra nút nhấn điều khiển led đơn. Chƣơng trình :

(26)

26  Nhận xét:

- Nhận xét của giáo viên hƣớng dẫn về bài thực hành của học sinh

……… ……… ……… ……… ……… ……… Chƣơng trình tham khảo

Đề bài 1: Viết chƣơng trình bật tắt 8 led đơn từ LD0 đến LD8 phụ thuộc vào 8

nút nhấn tƣơng ứng từ SW1 đến SW8. Nếu số lần nhấn phím là lẻ thì đèn led tƣơng ứng của phím đƣợc nhấn sáng. Nếu số lần nhấn là chẵn thì đèn led tƣơng ứng của phím đƣợc nhấn sẽ tắt. Khối nút nhấn đƣợc nối với P0, khối Led đơn đƣợc nối với P3.

- Chƣơng trình: #include <AT89x51.h> #include <stdio.h> #include <math.h> sbit LD0 = P3^0; sbit LD1 = P3^1; sbit LD2 = P3^2; sbit LD3 = P3^3; sbit LD4 = P3^4; sbit LD5 = P3^5; sbit LD6 = P3^6; sbit LD7 = P3^7; sbit SW1= P0^0; sbit SW2 = P0^1; sbit SW3 = P0^2; sbit SW4 = P0^3; sbit SW5 = P0^4; sbit SW6 = P0^5; sbit SW7 = P0^6;

(27)

27 sbit SW8 = P0^7;

void main (void) { P3 = 0xFF; P0 = 0xFF; while(1) { if(!SW1) LD0 = ~LD0; if(!SW2) LD1 = ~LD1; if(!SW3) LD2 = ~LD2; if(!SW4) LD3 = ~LD3; if(!SW5) LD4 = ~LD4; if(!SW6) LD5 = ~LD5; if(!SW7) LD6 = ~LD6; if(!SW8) LD7 = ~LD7; } }

Đề bài 2: Viết chƣơng trình điều khiển led đơn LD0 phụ thuộc vào 8 nút nhấn

tƣơng ứng từ SW1 đến SW8. Nếu các nút nhấn SW1 đến SW8 đƣợc bấm thì led LD0 sẽ nhấp nháy với số lần tƣơng ứng với vị trí nút nhấn đƣợc bấm.

VD: Nút nhấn SW1 đƣợc bấm thì nhấp nháy 1 lần, SW8 đƣợc bấm thì nhấp nháy 8 lần. Khối nút nhấn đƣợc nối với P0, Led đơn LD0 đƣợc nối với P3^0.

- Chƣơng trình: #include <AT89x51.h> #include <stdio.h> #include <math.h> sbit LD0 = P3^0; sbit SW1= P0^0; sbit SW2 = P0^1; sbit SW3 = P0^2; sbit SW4 = P0^3;

(28)

28 sbit SW5 = P0^4;

sbit SW6 = P0^5; sbit SW7 = P0^6; sbit SW8 = P0^7;

void delay_us (unsigned int du_lieu) {

unsigned int i;

for (i=0;i<du_lieu;i++); }

void main (void) { P3 = 0xFF; P0 = 0xFF; while(1) { LD0 = 1; if(!SW1) { for(i=0;i<2; i++) { LD0 = ~LD0; delay_us(10000); } } if(!SW2) { for(i=0;i<3; i++) { LD0 = ~LD0; delay_us(10000); } }

(29)

29 if(!SW3) { for(i=0;i<4; i++) { LD0 = ~LD0; delay_us(10000); } } if(!SW4) { for(i=0;i<5; i++) { LD0 = ~LD0; delay_us(10000); } } if(!SW5) { for(i=0;i<6; i++) { LD0 = ~LD0; delay_us(10000); } } if(!SW6) { for(i=0;i<7; i++) { LD0 = ~LD0; delay_us(10000); } }

(30)

30 if(!SW7) { for(i=0;i<8; i++) { LD0 = ~LD0; delay_us(10000); } } if(!SW8) { for(i=0;i<9; i++) { LD0 = ~LD0; delay_us(10000); } } } }

(31)

31

BÀI 4

Tên bài: ĐỌC DỮ LIỆU TỪ BÀN PHÍM Mã bài: AT89-04

Giới thiệu:

- Bàn phím là một ngoại vi không thể thiếu của máy tính, điện thoại. Nó đƣợc dùng để nhập dữ liệu. Ngoài ra bàn phím còn đƣợc thiết kế và sử dụng cho các thiết bị điều khiển chuyên dụng cần đến dữ liệu nhập từ bên ngoài vào để thực hiện một tính năng nào đó của phần mềm. Bài học này sẽ giúp ngƣời học hiều đƣợc cấu tạo, nguyên lý hoạt động và cách quét bàn phím HEXA nhƣ thế nào.

Mục tiêu thực hiện:

- Biết cách xây dựng thuật toán lập trình quét bàn phím HEXA.

- Biết sử dụng các câu lệnh kiểm tra bàn phím, kiểm tra dữ liệu đầu vào. - Biết lập trình chƣơng trình con đọc bàn phím.

- Hiểu đƣợc nguyên lý cấu tạo của bàn phím HEXA từ đó có thể ứng dụng và thiết kế kế các mạch ứng dụng cần sử dụng đến bàn phím HEXA.

Nội dung chính:

1. Sơ đồ mạch và cách quét bàn phím HEXA.

(32)

32 - Bàn phím có tất cả 16 phím từ phím số 1 đến 9 và các phím A, B, C, D, # . Bàn phím đƣợc thiết kết ở chế độ đọc dữ liệu theo cột và điều khiển hàng. Các hàng của bàn phím đƣợc điều khiển tích cực ở mức 0 tức là khi hàng nào đƣợc điều khiển ở mức 0 thì các phím của hàng đó đƣợc phép hoạt động. Còn các phím ở hàng khác ở trạng thái cấm

- J33: Khe cắm để kết nối bàn phím với các PORT điều khiển của MCU. Khi kết nối ta dùng cáp 8 sợi để cắm vào khe cắm J33 với một trong các PORT điều khiển của vi điều khiển.

Chú ý: Khi kết nối phải nhớ chiều của cáp kết nối sao cho các chân của PORT

điều khiển từ chân số Px.0 đến chân Px.7 phải nối tƣơng ứng với các chân từ 1 đến 8 của khe cắm J33 (x là tên của PORT tương ứng với 0, 1, 2, 3). Mục đích kết nối này để cho 4 bit dữ liệu đầu ra của bàn phím nối vào 4 bit cao và 4 bit điều khiển bàn phím nối vào 4 bit thấp trên PORT điều khiển của MCU.

Bảng 4.1 Bảng mã điều khiển và mã dữ liệu đầu ra bàn phím Hexa

STT MÃ ĐIỀU KHIỂN PHÍM

TRẠNG THÁI 4 BIT CAO ĐẦU RA

NHẤN = 0 KHÔNG NHẤN = 1

MÃ DỮ LIỆU

HEXA NHỊ PHÂN BIT7 6 5 BIT4 HEXA NHỊ PHÂN

1 0xFE 0b11111110 1 0 1 1 1 0x70 0b01110000 2 1 0 1 1 0xB0 0b10110000 3 1 1 0 1 0xD0 0b11010000 A 1 1 1 0 0xE0 0b11100000 2 0xFD 0b11111101 4 0 1 1 1 0x70 0b01110000 5 1 0 1 1 0xB0 0b10110000 6 1 1 0 1 0xD0 0b11010000 B 1 1 1 0 0xE0 0b11100000

(33)

33 3 0xFB 0b11111011 7 0 1 1 1 0x70 0b01110000 8 1 0 1 1 0xB0 0b10110000 9 1 1 0 1 0xD0 0b11010000 C 1 1 1 0 0xE0 0b11100000 4 0xF7 0b11110111 DOT 0 1 1 1 0x70 0b01110000 0 1 0 1 1 0xB0 0b10110000 # 1 1 0 1 0xD0 0b11010000 D 1 1 1 0 0xE0 0b11100000

2 Bài tập thực hành: Lập trình đọc dữ liệu từ bàn phím điều khiển led đơn  Dụng cụ chuẩn bị:

+ Đồng hồ số

+ Kit thực hành vi điều khiển 8051

+ Ocillocope

+ Mạch nạp AT89S52

+ Các loại cáp kết nối 8 sợi, 4 sợi, 2 sợi. Đề bài: Học sinh tự thiết kế và lập trình theo các yêu cầu sau: Yêu cầu:

- Thiết kế lƣu đồ thuật toán đọc dữ liệu từ bàn phím hexa và điều khiển led đơn theo các trƣờng hợp sau: + Nhấn phím số 1: Led LD0 sáng nhấp nháy 1 lần. + Nhấn phím số 2: Led LD1 sáng nhấp nháy 2 lần. + Nhấn phím số 3: Led LD2 sáng nhấp nháy 3 lần. + Nhấn phím số 4: Led LD3 sáng nhấp nháy 4 lần. + Nhấn phím số 5: Led LD4 sáng nhấp nháy 5 lần. + Nhấn phím số 6: Led LD5 sáng nhấp nháy 6 lần. + Nhấn phím số 7: Led LD6 sáng nhấp nháy 7 lần. + Nhấn phím số 8: Led LD8 sáng nhấp nháy 8 lần.

- Sử dụng cáp 8 sợi kết nối PORT điều khiển P2 với bàn phím và PORT điều khiển P3 với led đơn:

(34)

34  Phần trả lời: ( Học sinh vẽ lƣu đồ thuật toán và lập trình trên máy tính )

(35)

35 Chƣơng trình :

- Học sinh tự viết chƣơng trình trên máy tính và chạy thử trên Kit thực hành.  Nhận xét:

- Nhận xét của giáo viên hƣớng dẫn về bài thực hành của học sinh

……… ……… ……… ……… ……… ……… Chƣơng trình tham khảo

Đề bài 1: Viết chƣơng trình bật tắt 8 led đơn từ LD0 đến LD7 phụ thuộc vào 8

giá trị đọc đƣợc từ bàn phím. Nếu các phím nhấn thuộc từ 0 đến 7 thì bật sáng các led tƣơng ứng. Còn nếu các phím 8, 9, A, B, C, D, DOT, # đƣợc nhấn thì các led tƣơng ứng từ LD0 đến LD7 tắt. Các LED đơn đƣợc nối với P3, Bàn phím nối với P0.

- Chƣơng trình: #include <AT89x51.h> #include <stdio.h> #include <math.h> sbit LD0 = P3^0; sbit LD1 = P3^1; sbit LD2 = P3^2; sbit LD3 = P3^3; sbit LD4 = P3^4; sbit LD5 = P3^5; sbit LD6 = P3^6; sbit LD7 = P3^7;

unsigned char du_lieu_key; unsigned char read_key(void) {

unsigned char du_lieu[4]={0xFE, 0xFD, 0xFB, 0xF7}, key, keys; int i;

(36)

36 for(i=0; i<4; i++)

{ P0 = du_lieu[i]; keys =(P0&0xF0); if(i==0) { switch (keys) {

case 0x70: key =1; return key;

case 0xB0: key =2; return key;

case 0xD0: key =3; return key;

case 0xE0: key =10; return key;

} } if(i ==1) { switch (keys) {

case 0x70: key =4; return key;

case 0xB0: key =5; return key;

case 0xD0: key =6; return key;

case 0xE0: key =11; return key;

} } if(i ==2) { switch (keys) {

case 0x70: key =7; return key;

case 0xB0: key =8; return key;

case 0xD0: key =9; return key;

(37)

37 } } if(i ==3) { switch (keys) {

case 0x70: key =13; return key;

case 0xB0: key =0; return key;

case 0xD0: key =15; return key;

case 0xE0: key =14; return key;

}

}

}

}

void main (void) { P3 = 0xFF; P0 = 0x00; while(1) { du_lieu_key = read_key(); switch(du_lieu_key) { case 0: LD0 = 0; case 1: LD1 = 0; case 2: LD2 = 0; case 3: LD3 = 0; case 4: LD4 = 0; case 5: LD5 = 0; case 6: LD6 = 0; case 7: LD7 = 0; case 8: LD0 = 1;

(38)

38 case 9: LD1 = 1; case 10: LD2 = 1; case 11: LD3 = 1; case 12: LD4 = 1; case 13: LD5 = 1; case 14: LD6 = 1; case 15: LD7 = 1; } } }

Đề bài 2: Viết chƣơng trình điều khiển led đơn LD0 sáng nhấp nháy với số lần

nhấp nháy bằng giá trị đọc đƣợc từ bàn phím trong dải từ 0 đến 9, còn các giá trị còn lại thì led ở chế độ tắt. Bàn phím đƣợc nối với P0, led đơn LD0 đƣợc nối với P3^0.

- Chƣơng trình:

#include <AT89x51.h> #include <stdio.h> #include <math.h> sbit LD0 = P3^0;

unsigned char du_lieu_key;

void delay_us(unsigned int du_lieu) {

unsigned int i;

for (i=0;i<=du_lieu;i++); }

unsigned char read_key(void) {

unsigned char du_lieu[4]={0xFE, 0xFD, 0xFB, 0xF7}, key, keys; int i;

for(i=0; i<4; i++)

{

P0 = du_lieu[i]; keys =(P0&0xF0);

(39)

39

if(i==0)

{

switch (keys)

{

case 0x70: key =1; return key;

case 0xB0: key =2; return key;

case 0xD0: key =3; return key;

case 0xE0: key =10; return key;

} } if(i ==1) { switch (keys) {

case 0x70: key =4; return key;

case 0xB0: key =5; return key;

case 0xD0: key =6; return key;

case 0xE0: key =11; return key;

} } if(i ==2) { switch (keys) {

case 0x70: key =7; return key;

case 0xB0: key =8; return key;

case 0xD0: key =9; return key;

case 0xE0: key =12; return key;

}

}

if(i ==3)

(40)

40

switch (keys)

{

case 0x70: key =13; return key;

case 0xB0: key =0; return key;

case 0xD0: key =15; return key;

case 0xE0: key =14; return key;

}

}

}

}

void main (void) { int i; P3 = 0xFF; P0 = 0x00; while(1) { LD0 = 1; du_lieu_key = read_key(); switch(du_lieu_key) { case 1:

for(i= 0; i<du_lieu_key; i++)

{ LD0 = 0; delay_us(10000); LD0 =1; delay_us(10000); } case 2:

for(i= 0; i<du_lieu_key; i++)

{

LD0 = 0;

(41)

41

LD0 =1;

delay_us(10000);

}

case 3:

for(i= 0; i<du_lieu_key; i++)

{ LD0 = 0; delay_us(10000); LD0 =1; delay_us(10000); } case 4:

for(i= 0; i<du_lieu_key; i++)

{ LD0 = 0; delay_us(10000); LD0 =1; delay_us(10000); } case 5:

for(i= 0; i<du_lieu_key; i++)

{ LD0 = 0; delay_us(10000); LD0 =1; delay_us(10000); } case 6:

for(i= 0; i<du_lieu_key; i++)

{

LD0 = 0;

(42)

42

LD0 =1;

delay_us(10000);

}

case 7:

for(i= 0; i<du_lieu_key; i++)

{ LD0 = 0; delay_us(10000); LD0 =1; delay_us(10000); } case 8:

for(i= 0; i<du_lieu_key; i++)

{ LD0 = 0; delay_us(10000); LD0 =1; delay_us(10000); } case 9:

for(i= 0; i<du_lieu_key; i++)

{ LD0 = 0; delay_us(10000); LD0 =1; delay_us(10000); } } } }

(43)

43

BÀI 5

Tên bài: ĐIỀU KHIÊN MÀN HÌNH LED 7 THANH Mã bài: AT89-05

Giới thiệu:

- Màn hình led 7 thanh đƣợc sử dụng phổ biến trong các thiết bị đo chỉ thị số nhƣ: Bộ đo tần số, đồng hồ đo dòng điện. đồng hồ đo điện áp, các bộ đo nhiệt độ, bộ đo độ ẩm và đồng hồ hiển thị thời gian vv… Do đó để hiểu rõ nguyên lý và lập trình hiển thị đƣợc các số lên màn hình rất quan trọng trong việc chúng ta thiết kế các sản phẩm điện tử cần đến màn hình hiển thị số.

Mục tiêu thực hiện:

- Biết đƣợc thuật toán quét led 7 thanh.

- Biết cách xây dựng bảng mã hiển thị cho led 7 thanh. - Lập trình hiển thị đƣợc số lên màn hình led 7 thanh.

- Biết đƣợc nguyên lý hoạt động, ƣu nhƣợc điểm của màn hình led 7 thanh. Từ đó đƣa ra phƣơng án thay thế cho phƣơng pháp quét led.

Nội dung chính:

1. Sơ đồ mạch và lý thuyết điều khiển màn hình led 7 thanh.

- Màn hình LED 7 thanh đƣợc thiết kế gồm 4 LED giá trị có thể hiển thị đƣợc từ 0000 đến 9999. 4 LED 7 thanh đƣợc nối chung các đƣờng dữ liệu với nhau. Bốn chân điều khiển của 4 LED đƣợc điều khiển bởi 4 Transitor C2383.

- J28: Khe cắm để kết nối đƣờng điều khiển của màn hình với PORT điều khiển của MCU. Khi kết nối ta dùng cáp 4 sợi để nối 4 chân điều khiển của màn hình đến 4 chân bit cao hoặc 4 chân bit thấp trên PORT điều khiển của MCU.

- J27: Khe cắm để kết nối đƣờng dữ liệu của màn hình LED 7 thanh với PORT điều khiển của MCU. Khi nối ta dùng cáp 8 sợi để cắm vào khe cắm J27 và PORT điều khiển của MCU.

(44)

44 Hình 5.1 Sơ đồ nguyên lý màn hình LED 7 thanh.

Chú ý: Khi kết nối phải nhớ chiều của cáp kết nối sao cho các chân của PORT

điều khiển từ chân số Px.0 đến chân Px.7 phải nối tƣơng ứng với các chân từ 8 đến 1 của khe cắm J27 (x là tên của PORT tương ứng với 0, 1, 2, 3). Mục đích kết nối này để thuận tiện cho việc lập trình và tạo bảng mã hiển thị trên LED 7 thanh.

(45)

45 Bảng 5.1 Bảng mã hiển thị số lên led 7 thanh

STT SỐ

TRẠNG THÁI 8 THANH LED

SÁNG = 0 : TẮT = 1 MÃ DỮ LIỆU a b c d e f g h HEXA NHỊ PHÂN 1 0 0 0 0 0 0 0 1 1 0x03 0b00000011 2 1 1 0 0 1 1 1 1 1 0x9F 0b10011111 3 2 0 0 1 0 0 1 0 1 0x25 0b00100101 4 3 0 0 0 0 1 1 0 1 0x0D 0b00001101 5 4 1 0 0 1 1 0 0 1 0x99 0b10011001 6 5 0 1 0 0 1 0 0 1 0x49 0b01001001 7 6 0 1 0 0 0 0 0 1 0x41 0b01000001 8 7 0 0 0 1 1 1 1 1 0x1F 0b00011111 9 8 0 0 0 0 0 0 0 1 0x01 0b00000001 10 9 0 0 0 0 1 0 0 1 0x09 0b00001001

Bảng 5.2 Bảng mã điều khiển led 7 thanh

STT VỊ TRÍ LED HIỂN THỊ TRẠNG THÁI 4 CHÂN ĐIỀU KHIỂN CHO PHÉP = 1 : CẤM = 0 MÃ ĐIỀU KHIỂN

Led3 Led2 Led1 Led0 HEXA NHỊ PHÂN

1 ĐƠN VỊ 0 0 0 1 0x01 0b0001

2 CHỤC 0 0 1 0 0x02 0b0010

3 TRĂM 0 1 0 0 0x04 0b0100

(46)

46

2. Bài tập thực hành: Lập trình đọc dữ liệu từ bàn phím hiển thị lên màn hình led 7 thanh.

 Dụng cụ chuẩn bị:

+ Đồng hồ số

+ Kit thực hành vi điều khiển 8051

+ Ocillocope

+ Mạch nạp AT89S52

+ Các loại cáp kết nối 8 sợi, 4 sợi và 2 sợi. Đề bài: Học sinh tự thiết kế và lập trình theo các yêu cầu sau: Yêu cầu:

- Thiết kế lƣu đồ thuật toán đọc dữ liệu từ bàn phím hexa và điều khiển hiển thị lên trên màn hình led 7 thanh theo các trƣờng hợp sau.

+ Nhấn phím số 0: Màn hình sẽ hiển thị số 0 + Nhấn phím số 1: Màn hình sẽ hiển thị đếm từ 0 đến 10 + Nhấn phím số 2: Màn hình sẽ hiển thị đếm từ 0 đến 20 + Nhấn phím số 3: Màn hình sẽ hiển thị đếm từ 0 đến 30 + Nhấn phím số 4: Màn hình sẽ hiển thị đếm từ 0 đến 40 + Nhấn phím số 5: Màn hình sẽ hiển thị đếm từ 0 đến 50 + Nhấn phím số 6: Màn hình sẽ hiển thị đếm từ 0 đến 60 + Nhấn phím số 7: Màn hình sẽ hiển thị đếm từ 0 đến 70 + Nhấn phím số 8: Màn hình sẽ hiển thị đếm từ 0 đến 80 + Nhấn phím số 9: Màn hình sẽ hiển thị đếm từ 0 đến 90

- Sử dụng cáp 8 sợi kết nối PORT điều khiển P0 với bàn phím hexa và PORT điều khiển P2 với màn hình led 7 thanh.

(47)

47  Phần trả lời: ( Học sinh vẽ lƣu đồ thuật toán và lập trình trên máy tính )

(48)

48 Chƣơng trình :

- Học sinh tự viết chƣơng trình trên máy tính và chạy thử trên Kit thực hành.  Nhận xét:

- Nhận xét của giáo viên hƣớng dẫn về bài thực hành của học sinh

……… ……… ……… ……… ……… ……… Chƣơng trình tham khảo

Đề bài 1: Viết chƣơng trình tạo bộ đếm từ 0 đến 9999 hiển thị lên màn hình led 7

thanh. Các chân dữ liệu của màn hình led 7 thanh đƣợc nối với P2. Các chân điều khiển màn hình led 7 thanh đƣợc nối 4 bit thấp của P1.

- Chƣơng trình: #include <AT89x51.h> #include <stdio.h> #include <math.h> sbit LED_DON_VI = P1^0; sbit LED_CHUC = P1^1; sbit LED_TRAM = P1^2; sbit LED_NGHIN = P1^3;

unsigned char led_code[10]={0x03, 0x9F, 0x25, 0x0D, 0x99, 0x49, 0x41, 0x1F, 0x01, 0x09 };

unsigned char don_vi, chuc, tram, nghin; void delay_us (unsigned char du_lieu) {

unsigned int i;

for(i= 0; i<=du_lieu; i++); }

void main (void) {

(49)

49 int counter = 0; P1 = 0x00; while(1) { counter ++; nghin = counter/1000; tram = (counter%1000)/100; chuc = ((counter%1000)%100)/10; don_vi = ((counter%1000)%100)%10; P1 = 0x01; P2 = led_code[don_vi]; delay_us(2000); P1 = 0x02; P2 = led_code[chuc]; delay_us(2000); P1 = 0x04; P2 = led_code[tram]; delay_us(2000); P1 = 0x08; P2 = led_code[nghin]; delay_us(2000); if(counter == 9999) counter = 0; } }

Đề bài 2: Viết chƣơng trình hiển thị các giá trị đọc đƣợc từ bàn phím từ 0 đến 9

lên màn hình led 7 thanh. Các chân điều khiển màn hình đƣợc nối với 4 bit thâp của P1. Chân dữ liệu của màn hình đƣợc nối với P2. Các chân điều khiển và dữ liệu của bàn phím hexa đƣợc nối với P0.

- Chƣơng trình:

#include <AT89x51.h> #include <stdio.h>

(50)

50 #include <math.h>

unsigned char led_code[10]={0x03, 0x9F, 0x25, 0x0D, 0x99, 0x49, 0x41, 0x1F, 0x01, 0x09 };

unsigned char du_lieu_key;

void delay_us (unsigned int du_lieu) {

unsigned int i;

for(i= 0; i<=du_lieu; i++); }

unsigned char read_key(void) {

unsigned char du_lieu[4]={0xFE, 0xFD, 0xFB, 0xF7}, key, keys; int i;

for(i=0; i<4; i++)

{ P0 = du_lieu[i]; keys =(P0&0xF0); if(i==0) { switch (keys) {

case 0x70: key =1; return key;

case 0xB0: key =2; return key;

case 0xD0: key =3; return key;

case 0xE0: key =10; return key;

} } if(i ==1) { switch (keys) {

(51)

51

case 0xB0: key =5; return key;

case 0xD0: key =6; return key;

case 0xE0: key =11; return key;

} } if(i ==2) { switch (keys) {

case 0x70: key =7; return key;

case 0xB0: key =8; return key;

case 0xD0: key =9; return key;

case 0xE0: key =12; return key;

} } if(i ==3) { switch (keys) {

case 0x70: key =13; return key;

case 0xB0: key =0; return key;

case 0xD0: key =15; return key;

case 0xE0: key =14; return key;

}

}

}

(52)

52 void main (void)

{ P2 = 0xFF; P0 = 0x00; P1 = 0x00; while(1) { du_lieu_key = read_key(); if((du_lieu_key>=0)&&(du_lieu_key<=9)) { P1 = 0x01; P2 = led_code[du_lieu_key]; } } }

BÀI 6

Tên bài: ĐIỀU KHIỂN MÀN HÌNH LED MA TRẬN Mã bài: AT89-06

Giới thiệu:

- Màn hình led ma trận đƣợc sử dụng rất nhiều trong các bảng led quảng cáo cần đến các hiệu ứng chữ chạy và nhấp nháy. Ngoài ra nó còn đƣợc dùng để tạo các biểu tƣợng logo và các hình dạng khác nhau. Trong bài học này sẽ cung cấp cho ngƣời học hiểu phần nào về các điều khiển màn hình led trận và hiển thị chữ lên màn hình nhƣ thế nào.

Mục tiêu thực hiện:

- Biết đƣợc thuật toán quét led ma trận.

- Biết cách xây dựng bảng mã hiển thị cho led ma trận. - Lập trình hiển thị đƣợc các ký tự lên led ma trận

(53)

53 - Biết đƣợc nguyên lý hoạt động, ƣu nhƣợc điểm của màn hình led ma trận. Từ đó có thể xây đựng và phát triển thành một màn hình led ma trận cỡ lớn đƣợc ứng dụng rất nhiều trong lĩnh vực bảng quảng cáo.

Nội dung chính:

1. Sơ đồ mạch và lý thuyết điều khiển màn hình led ma trận.

Hình 6.1 Sơ đồ nguyên lý màn hình LED ma trận.

- U31: Led ma trận đơn sắc có 8 cột và 8 hàng. Các hàng đƣợc nối với 8 Transitor từ Q1 đến Q8. Các Transitor đƣợc điều khiển để cấp nguồn cho các điểm ảnh trên cùng một hàng của Led ma trận. Các cột đƣợc nối với khe cắm J23 dùng để quét các điểm ảnh của Led ma trận để tạo phông chữ.

(54)

54 - J23: Khe cắm dùng để nối PORT điều khiển của MCU với các cột điểm ảnh của Led ma trận. Khi kết nối ta dùng cáp 8 sợi để cắm với khe cắm J23 và khe cắm PORT điều khiển của MCU.

- J26: Khe cắm dùng để nối các chân tín hiệu điều khiển cấp nguồn cho hàng điểm ảnh của Led ma trận với PORT điều khiển của MCU. Khi nối ta dùng cáp 8 sợi để cắm với khe cắm J26 và khe cắm PORT điều khiển của MCU.

Chú ý: Khi kết nối phải nhớ chiều của cáp kết nối sao cho các chân của PORT

điều khiển từ chân số Px.0 đến chân Px.7 phải nối tƣơng ứng với các chân từ 8 đến 1 của khe cắm J23 và từ chân 8 đến chân 1 của khe cắm J26 (x là tên của PORT tương

ứng với 0, 1, 2, 3). Mục đích kết nối này để thuận tiện cho việc lập trình và tạo bảng

phông chữ hiển thị trên LED ma trận.

Bảng 6.1 Bảng mã điều khiển quét hàng của led ma trận

STT HÀNG

TRẠNG THÁI 8 CHÂN ĐIỀU KHIỂN HÀNG BẬT = 1 : TẮT = 0 MÃ DỮ LIỆU H7 H6 H5 H4 H3 H2 H1 H0 HEXA NHỊ PHÂN 1 Hàng 0 0 0 0 0 0 0 0 1 0x01 0b00000001 2 Hàng 1 0 0 0 0 0 0 1 0 0x02 0b00000010 3 Hàng 2 0 0 0 0 0 1 0 0 0x04 0b00000100 4 Hàng 3 0 0 0 0 1 0 0 0 0x08 0b00001000 5 Hàng 4 0 0 0 1 0 0 0 0 0x10 0b00010000 6 Hàng 5 0 0 1 0 0 0 0 0 0x20 0b00100000 7 Hàng 6 0 1 0 0 0 0 0 0 0x40 0b01000000 8 Hàng 7 1 0 0 0 0 0 0 0 0x80 0b10000000

(55)

55 Bảng 6.2 Bảng mã phông chữ hiển thị trên led ma trận

STT KÝ TỰ MÃ QUÉT KÝ TỰ Ở 8 CỘT CỦA LED MA TRẬN

1 2 3 4 5 6 7 8 1 A 0xFF 0xE7 0xDB 0xBD 0x81 0xBD 0xBD 0xBD 2 B 0xFF 0xE1 0xDD 0xDD 0xC1 0xBD 0xBD 0xC1 3 C 0xFF 0xC3 0xBD 0xFD 0xFD 0xFD 0xBD 0xC3 4 D 0xFF 0xC1 0xBD 0xBD 0xBD 0xBD 0xBD 0xC1 5 E 0xFF 0xC1 0xFD 0xFD 0xE1 0xFD 0xFD 0x81 6 F 0xFF 0x81 0xFD 0xFD 0xE1 0xFD 0xFD 0xFD 7 G 0xFF 0xC3 0xBD 0xFD 0x8D 0xBD 0xBD 0xC3 8 H 0xFF 0xBD 0xBD 0x81 0xBD 0xBD 0xBD 0xBD

9 I 0xFF 0xC3 0xE7 0xE7 0xE7 0xE7 0xE7 0xC3

10 J 0xFF 0xC7 0xDF 0xDF 0xDF 0xDF 0xDD 0xE3 11 K 0xFF 0xED 0xF5 0xF9 0xF5 0xED 0xDD 0xBD 12 L 0xFF 0xFD 0xFD 0xFD 0xFD 0xFD 0xFD 0xC1 13 M 0xFF 0xBD 0x99 0xA5 0xBD 0xBD 0xBD 0xBD 14 N 0xFF 0xBD 0xB9 0xB5 0xB5 0xAD 0x9D 0xBD 15 O 0xFF 0xC3 0xBD 0xBD 0xBD 0xBD 0xBD 0xC3 16 P 0xFF 0xC1 0xBD 0xBD 0xC1 0xFD 0xFD 0xFD 17 Q 0xFF 0xC3 0xBD 0xBD 0xBD 0xA5 0xDD 0x23 18 R 0xFF 0xE1 0xDD 0xDD 0xE1 0xF5 0xAD 0xDD 19 S 0xFF 0xC3 0xBD 0xFD 0xC3 0xBF 0xBD 0xC3 20 T 0xFF 0x81 0xE7 0xE7 0xE7 0xE7 0xE7 0xE7 21 V 0xFF 0xBD 0xBD 0xBD 0xBD 0xBD 0xDB 0xE7 22 W 0xFF 0xBE 0xBE 0xB6 0xB6 0xB6 0xAA 0xDD 23 X 0xFF 0xBE 0xDD 0xEB 0xF7 0xEB 0xDD 0xBE

(56)

56 24 Y 0xFF 0x7D 0xBB 0xD7 0xEF 0xF7 0xFB 0xFD 25 Z 0xFF 0x83 0xDF 0xEF 0xF7 0xFB 0xBD 0xC0 26 @ 0x81 0x7E 0x46 0x5A 0x5A 0x86 0x7E 0x81

2. Bài tập thực hành: Lập trình hiển thị các ký tự lên trên màn hình led ma trận  Dụng cụ chuẩn bị:

+ Đồng hồ số

+ Kit thực hành vi điều khiển 8051

+ Ocillocope

+ Mạch nạp AT89S52

+ Các loại cáp kết nối 8 sợi, 4 sợi và 2 sợi. Đề bài: Học sinh tự thiết kế và lập trình theo các yêu cầu sau: Yêu cầu:

- Thiết kế lƣu đồ thuật toán hiển thị các ký tự theo giá trị đọc đƣợc từ bàn phím lên trên led ma trận bằng phƣơng pháp quét led theo các trƣờng hợp sau:

+ Nhấn phím số 0: Màn hình sẽ hiển thị số 0 + Nhấn phím số 1: Màn hình sẽ hiển thị số 1 + Nhấn phím số 2: Màn hình sẽ hiển thị số 2 + Nhấn phím số 3: Màn hình sẽ hiển thị số 3 + Nhấn phím số 4: Màn hình sẽ hiển thị số 4 + Nhấn phím số 5: Màn hình sẽ hiển thị số 5 + Nhấn phím số 6: Màn hình sẽ hiển thị số 6 + Nhấn phím số 7: Màn hình sẽ hiển thị số 7 + Nhấn phím số 8: Màn hình sẽ hiển thị số 8 + Nhấn phím số 9: Màn hình sẽ hiển thị số 9 + Nhấn phím A: Màn hình sẽ hiển thị chữ A + Nhấn phím B: Màn hình sẽ hiển thị chữ B + Nhấn phím C: Màn hình sẽ hiển thị chữ C + Nhấn phím D: Màn hình sẽ hiển thị chữ D + Nhấn phím Dot: Màn hình sẽ hiển thị dấu chấm + Nhấn phím #: Màn hình sẽ hiển thị ký tự #

(57)

57 - Sử dụng cáp 8 sợi kết nối PORT điều khiển P1 với các chân quét hàng của led ma trận. Các chân điều khiển P2 nối với chân quét cột của màn hình led ma trận.

Phần trả lời: ( Học sinh vẽ lƣu đồ thuật toán và lập trình trên máy tính )

(58)

58 Chƣơng trình :

- Học sinh tự viết chƣơng trình trên máy tính và chạy thử trên Kit thực hành.  Nhận xét:

- Nhận xét của giáo viên hƣớng dẫn về bài thực hành của học sinh

……… ……… ……… ……… ……… ……… Chƣơng trình tham khảo

Đề bài 1: Viết chƣơng trình hiển thị các ký tự trong bảng chữ cái latinh lên trên

màn hình led ma trận. Các chân quét cột của màn hình đƣợc nối với P2. Các chân quét hàng của led ma trận đƣợc nối với P3.

- Chƣơng trình:

#include <AT89x51.h> #include <stdio.h> #include <math.h>

unsigned char code_matrix_row[8]={0x01,0x02,0x04,0x08,

0x10,0x20,0x40,0x80};

unsigned char code_matrix_col[200] = { 0xFF,0xE7,0xDB,0xBD,0x81,0xBD,0xBD,0xBD, //A 0xFF,0xE1,0xDD,0xDD,0xC1,0xBD,0xBD,0xC1, //B 0xFF,0xC3,0xBD,0xFD,0xFD,0xFD,0xBD,0xC3, //C 0xFF,0xC1,0xBD,0xBD,0xBD,0xBD,0xBD,0xC1,//D 0xFF,0xC1,0xFD,0xFD,0xE1,0xFD,0xFD,0x81, //E 0xFF,0x81,0xFD,0xFD,0xE1,0xFD,0xFD,0xFD, //F 0xFF,0xC3,0xBD,0xFD,0x8D,0xBD,0xBD,0xC3, //G 0xFF,0xBD,0xBD,0x81,0xBD,0xBD,0xBD,0xBD,//H 0xFF,0xC3,0xE7,0xE7,0xE7,0xE7,0xE7,0xC3, //I 0xFF,0xC7,0xDF,0xDF,0xDF,0xDF,0xDD,0xE3,//J 0xFF,0xED,0xF5,0xF9,0xF5,0xED,0xDD,0xBD, //K

(59)

59 0xFF,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xC1, //L 0xFF,0xBD,0x99,0xA5,0xBD,0xBD,0xBD,0xBD,//M 0xFF,0xBD,0xB9,0xB5,0xB5,0xAD,0x9D,0xBD, //N 0xFF,0xC3,0xBD,0xBD,0xBD,0xBD,0xBD,0xC3,//O 0xFF,0xC1,0xBD,0xBD,0xC1,0xFD,0xFD,0xFD, //P 0xFF,0xC3,0xBD,0xBD,0xBD,0xA5,0xDD,0x23, //Q 0xFF,0xE1,0xDD,0xDD,0xE1,0xF5,0xAD,0xDD, //R 0xFF,0xC3,0xBD,0xFD,0xC3,0xBF,0xBD,0xC3,//S 0xFF,0x81,0xE7,0xE7,0xE7,0xE7,0xE7,0xE7, //T 0xFF,0xBD,0xBD,0xBD,0xBD,0xBD,0xDB,0xE7, //V 0xFF,0xBE,0xBE,0xB6,0xB6,0xB6,0xAA,0xDD, //W 0xFF,0xBE,0xDD,0xEB,0xF7,0xEB,0xDD,0xBE, //X 0xFF,0x7D,0xBB,0xD7,0xEF,0xF7,0xFB,0xFD, //Y 0xFF,0x83,0xDF,0xEF,0xF7,0xFB,0xBD,0xC0, //Z };

void delay_us (unsigned int du_lieu) {

unsigned int i;

for(i= 0; i<=du_lieu; i++); }

void main (void) { int i, j, k; while(1) { for(i=0;i<25;i++) { for(j=0;j<200;j++) { for(k=0;k<8;k++) { P3= code_matrix_row[k]); P2 = code_matrix_col[i*8+k]);

(60)

60 delay_us(1000); } } } } }

Đề bài 2: Viết chƣơng trình hiển thị các giá trị A, B, C, D đọc đƣợc từ bàn phím

lên trên màn hình led ma trận. Các chân quét cột của màn hình đƣợc nối với P2. Các chân quét hàng của led ma trận đƣợc nối với P3. Chân điều khiển bàn phím nối với P0.

- Chƣơng trình:

#include <AT89x51.h> #include <stdio.h> #include <math.h>

unsigned char code_matrix_row[8]={0x01,0x02,0x04,0x08,

0x10,0x20,0x40,0x80};

unsigned char code_matrix_col[200] = { 0xFF,0xE7,0xDB,0xBD,0x81,0xBD,0xBD,0xBD, //A 0xFF,0xE1,0xDD,0xDD,0xC1,0xBD,0xBD,0xC1, //B 0xFF,0xC3,0xBD,0xFD,0xFD,0xFD,0xBD,0xC3, //C 0xFF,0xC1,0xBD,0xBD,0xBD,0xBD,0xBD,0xC1,//D 0xFF,0xC1,0xFD,0xFD,0xE1,0xFD,0xFD,0x81, //E 0xFF,0x81,0xFD,0xFD,0xE1,0xFD,0xFD,0xFD, //F 0xFF,0xC3,0xBD,0xFD,0x8D,0xBD,0xBD,0xC3, //G 0xFF,0xBD,0xBD,0x81,0xBD,0xBD,0xBD,0xBD,//H 0xFF,0xC3,0xE7,0xE7,0xE7,0xE7,0xE7,0xC3, //I 0xFF,0xC7,0xDF,0xDF,0xDF,0xDF,0xDD,0xE3,//J 0xFF,0xED,0xF5,0xF9,0xF5,0xED,0xDD,0xBD, //K 0xFF,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xC1, //L 0xFF,0xBD,0x99,0xA5,0xBD,0xBD,0xBD,0xBD,//M 0xFF,0xBD,0xB9,0xB5,0xB5,0xAD,0x9D,0xBD, //N 0xFF,0xC3,0xBD,0xBD,0xBD,0xBD,0xBD,0xC3,//O 0xFF,0xC1,0xBD,0xBD,0xC1,0xFD,0xFD,0xFD, //P 0xFF,0xC3,0xBD,0xBD,0xBD,0xA5,0xDD,0x23, //Q

(61)

61 0xFF,0xE1,0xDD,0xDD,0xE1,0xF5,0xAD,0xDD, //R 0xFF,0xC3,0xBD,0xFD,0xC3,0xBF,0xBD,0xC3,//S 0xFF,0x81,0xE7,0xE7,0xE7,0xE7,0xE7,0xE7, //T 0xFF,0xBD,0xBD,0xBD,0xBD,0xBD,0xDB,0xE7, //V 0xFF,0xBE,0xBE,0xB6,0xB6,0xB6,0xAA,0xDD, //W 0xFF,0xBE,0xDD,0xEB,0xF7,0xEB,0xDD,0xBE, //X 0xFF,0x7D,0xBB,0xD7,0xEF,0xF7,0xFB,0xFD, //Y 0xFF,0x83,0xDF,0xEF,0xF7,0xFB,0xBD,0xC0, //Z };

unsigned char du_lieu_key;

void delay_us (unsigned int du_lieu) {

unsigned int i;

for(i= 0; i<=du_lieu; i++); }

unsigned char read_key(void) {

unsigned char du_lieu[4]={0xFE, 0xFD, 0xFB, 0xF7}, key, keys; int i;

for(i=0; i<4; i++)

{ P0 = du_lieu[i]; keys =(P0&0xF0); if(i==0) { switch (keys) {

case 0x70: key =1; return key;

case 0xB0: key =2; return key;

case 0xD0: key =3; return key;

case 0xE0: key =10; return key;

(62)

62 } if(i ==1) { switch (keys) {

case 0x70: key =4; return key;

case 0xB0: key =5; return key;

case 0xD0: key =6; return key;

case 0xE0: key =11; return key;

} } if(i ==2) { switch (keys) {

case 0x70: key =7; return key;

case 0xB0: key =8; return key;

case 0xD0: key =9; return key;

case 0xE0: key =12; return key;

} } if(i ==3) { switch (keys) {

case 0x70: key =13; return key;

case 0xB0: key =0; return key;

case 0xD0: key =15; return key;

case 0xE0: key =14; return key;

}

}

(63)

63 }

void main (void) { int j, k; P0 = 0x00; while(1) { du_lieu_key = read_key(); switch (du_lieu_key) { case 10: for(j=0;j<200;j++) { for(k=0;k<8;k++) { P3 = code_matrix_row[k]); P2 =code_matrix_col[k]); delay_us(1000); } } case 11: for(j=0;j<200;j++) { for(k=0;k<8;k++) { P3= code_matrix_row[k]); P2 =code_matrix_col[8+k]); delay_us(1000); } } case 12: for(j=0;j<200;j++)

(64)

64 { for(k=0;k<8;k++) { P3 = code_matrix_row[k]); P2 =code_matrix_col[16+k]); delay_us(1000); } } case 13: for(j=0;j<200;j++) { for(k=0;k<8;k++) { P3 = code_matrix_row[k]); P2 =code_matrix_col[24+k]); delay_us(1000); } } } } }

BÀI 7

Tên bài: ĐIỀU KHIỂN MÀN HÌNH LCD16x2 Mã bài: AT89-07

Giới thiệu:

- Hiện nay màn hình LCD đƣợc sử dụng rất nhiều bởi các tính năng ƣu việt của nó nhƣ: Nhỏ gọn, độ phân giải cao, dễ điều khiển và hiển thị. Nó đƣợc dùng làm màn hình hiển thị cho rất nhiều thiết bị nhƣ: màn hình máy tính, mà hình máy in, màn hình các loại đồng hồ đo. Màn hình LCD16x2 cũng là một trong những loại đƣợc sử dụng

Referências

Documentos relacionados

A cada indivíduo são aplicados operadores genéticos (mutação e recombinação) de forma a modificá-los para encontrar uma melhor solução ao problema.. Uma vez modificados,

Produtos químicos - Informações sobre segurança, saúde e meio ambiente. Portaria nº 229 de 2011/MTE (que altera a Norma Regulamentadora “NR 26”, que trata de Sinalização

Desde 1920, pesquisadores brasileiros e estrangeiros têm efetuado coleta de germoplasma das espécies e raças silvestres de algodoeiro do Brasil. hirsutum L raça marie

O regresso Miguel Baptista, ao FC Porto, depois de duas época emprestasdo à Artística de Avanca, esteve dado como certo, mas o jogador acabou por assinar pelo clube francês, onde se

1 – Os pagamentos decorrentes do presente Regulamento são efectuados, preferencialmente, através dos meios electrónicos disponíveis, sendo obrigatório o

Cada erro será mostrado por cinco segundos com intervalo de um segundo. 5) O equipamento ficará esperando por quatro minutos ou até que o reed switch de nível alto seja atuado. 6)

Fiquei assustado de pensar nisso, que eu tinha deixado de casar mais cedo ou ter  lhos para escrever esses livros bobos, que tinha aceitado a mentira de que a vida acadêmica

Essa fase, que será chamada de fase 1, de um programa utilizado para verificar a melhoria da aprendizagem na matemática utilizando o jogo de xadrez em