- Tại sao chúng ta cần Bàn phím 4x4:
- Cách hoạt động của Bàn phím ma trận 4x4:
- Vật liệu cần thiết:
- Sơ đồ mạch:
- Giải thích lập trình:
Bàn phím là thiết bị đầu vào được sử dụng rộng rãi được sử dụng trong các dự án điện tử và nhúng khác nhau. Chúng được sử dụng để lấy đầu vào dưới dạng số và bảng chữ cái, đồng thời đưa chúng vào hệ thống để xử lý thêm. Trong hướng dẫn này, chúng ta sẽ giao diện bàn phím ma trận 4x4 với PIC16F877A.
Trước khi đi vào logic chi tiết và tìm hiểu cách sử dụng bàn phím, chúng ta sẽ cần biết một số điều.
Tại sao chúng ta cần Bàn phím 4x4:
Thông thường, chúng tôi sử dụng một chân I / O của một bộ vi điều khiển để đọc tín hiệu kỹ thuật số, giống như một đầu vào công tắc. Trong một số ứng dụng cần 9, 12, 16 phím cho mục đích đầu vào, nếu chúng ta thêm từng phím vào một cổng vi điều khiển, chúng ta sẽ sử dụng 16 cổng I / O. 16 cổng I / O này không chỉ để đọc tín hiệu I / O mà còn có thể được sử dụng làm kết nối ngoại vi, như hỗ trợ ADC, kết nối I2C, SPI cũng được hỗ trợ bởi các chân I / O đó. Vì các chân đó được kết nối với công tắc / phím, chúng tôi không thể sử dụng chúng mà chỉ sử dụng làm cổng I / O. Điều này không có ý nghĩa gì cả. Vì vậy, làm thế nào để giảm số lượng pin? Câu trả lời là, sử dụng bàn phím hex hoặc bàn phím ma trận; chúng ta có thể giảm số lượng pin, liên kết các khóa ma trận 4x4. Nó sẽ sử dụng 8 chân trong đó 4 chân kết nối theo hàng và 4 chân kết nối theo cột, do đó tiết kiệm 8 chân của bộ vi điều khiển.
Cách hoạt động của Bàn phím ma trận 4x4:
Trong hình trên, mô-đun bàn phím ma trận được hiển thị ở bên trái. Ở bên phải hiển thị kết nối nội bộ cũng như kết nối cổng. Nếu chúng ta thấy cổng có 8 chân, 4 chân đầu tiên từ trái sang phải là X1, X2, X3 và X4 là các hàng và 4 chân cuối cùng từ trái sang phải là Y1, Y2, Y3, Y4 là bốn cột. Nếu chúng ta tạo 4 hàng hoặc cạnh X làm đầu ra và đặt chúng ở mức logic thấp hoặc 0, và đặt 4 cột làm đầu vào và đọc các phím, chúng ta sẽ đọc nút chuyển khi đối tượng Y nhận được 0.
Điều tương tự sẽ xảy ra trong ma trận nxn với n là số. Đó có thể là 3x3, 6x6, v.v.
Bây giờ chỉ cần nghĩ rằng 1 được nhấn. Sau đó, 1 nằm ở hàng X1 và cột Y1. Nếu X1 là 0, thì Y1 sẽ là 0. Bằng cách tương tự, chúng ta có thể cảm nhận từng khóa trong hàng X1, bằng cách cảm nhận cột Y1, Y2, Y3 và Y4. Điều này xảy ra với mọi công tắc và chúng ta sẽ đọc vị trí của các công tắc trong ma trận.
Mỗi vòng tròn màu xanh lá cây là công tắc và cả hai đều được kết nối với nhau theo cùng một cách.
Trong hướng dẫn này, chúng tôi sẽ giao diện bảng phím với các thông số kỹ thuật sau-
- Chúng tôi sẽ sử dụng kéo nội bộ lên
- Chúng tôi sẽ thêm tùy chọn loại bỏ khóa
Nhưng khi công tắc không ép chúng ta cần phải làm cho Y1, Y2, Y3 và Y4 như cao hoặc 1. Nếu không chúng ta không thể phát hiện những thay đổi logic khi công tắc được nhấn. Nhưng chúng tôi không thể tạo nó bằng mã hoặc chương trình do những chân đó được sử dụng làm đầu vào chứ không phải đầu ra. Vì vậy, chúng tôi sẽ sử dụng một thanh ghi hoạt động nội bộ trong vi điều khiển và vận hành các chân đó ở chế độ kích hoạt kéo lên yếu. Bằng cách sử dụng này, sẽ có một chế độ kích hoạt logic cao khi nó ở trạng thái mặc định.
Ngoài ra, khi chúng tôi nhấn phím, có gai hoặc tiếng ồn được tạo ra với các số liên lạc của công tắc, và do việc nhấn nhiều công tắc này sẽ xảy ra điều không mong muốn. Vì vậy, trước tiên chúng ta sẽ phát hiện công tắc đang nhấn, đợi trong vài mili giây, một lần nữa kiểm tra xem công tắc có còn được nhấn hay không và nếu công tắc vẫn được nhấn, cuối cùng chúng tôi có chấp nhận nhấn công tắc hay không. Điều này được gọi là khử nảy của các công tắc.
Chúng tôi sẽ triển khai tất cả điều này trong mã của mình và tạo kết nối trên breadboard.
Ngoài ra, hãy kiểm tra cách giao diện bàn phím 4x4 với các Bộ vi điều khiển khác:
- Giao diện bàn phím với Arduino Uno
- Giao diện bàn phím ma trận 4x4 với Vi điều khiển 8051
- Giao diện bàn phím 4x4 với Vi điều khiển ATmega32
- Khóa mã kỹ thuật số Raspberry Pi trên Breadboard
Vật liệu cần thiết:
- Breadboard
- Pic-kit 3 và môi trường phát triển trong PC của bạn, tức là MPLABX
- Dây và đầu nối
- Ký tự LCD 16x2
- Tinh thể 20Mhz
- 2 chiếc nắp đĩa sứ 33pF.
- Điện trở 4,7k
- 10k cài đặt trước (biến trở)
- Bàn phím ma trận 4x4
- Bộ chuyển đổi 5 V
Sơ đồ mạch:
Chúng tôi sẽ kết nối các tinh thể và điện trở trong các chân liên kết. Ngoài ra, chúng tôi sẽ kết nối màn hình LCD ở chế độ 4 bit trên PORTD. Chúng tôi đã kết nối bàn phím hex hoặc bàn phím ma trận qua cổng RB4.
Nếu bạn chưa quen với PIC thì hãy bắt đầu với Bắt đầu với Vi điều khiển PIC: Giới thiệu về PIC và MPLABX
Giải thích lập trình:
Mã hoàn chỉnh để giao tiếp Bàn phím ma trận với Vi điều khiển PIC được đưa ra ở cuối. Mã rất dễ dàng và dễ hiểu. Thư viện bàn phím là thứ duy nhất được hiểu trong mã. Ở đây chúng tôi đã sử dụng keypad.h và lcd.h Library để giao diện bàn phím và màn hình LCD 16x2. Vì vậy, hãy xem những gì đang xảy ra bên trong đó.
Bên trong keypad.h, chúng ta sẽ thấy rằng chúng ta đã sử dụng tiêu đề xc.h là thư viện đăng ký mặc định, tần số tinh thể được xác định để sử dụng cho việc sử dụng độ trễ được sử dụng trong tệp kepad.c. Chúng tôi đã xác định các cổng bàn phím tại thanh ghi PORTRB và xác định các chân riêng lẻ là hàng (X) và cột (Y).
Chúng tôi cũng sử dụng hai chức năng một để khởi tạo bàn phím sẽ chuyển hướng cổng dưới dạng đầu ra và đầu vào, và quét khi nhấn nút chuyển sẽ trả về trạng thái nhấn nút chuyển khi được gọi.
#include
Trong keypad.c, chúng ta sẽ thấy rằng chức năng bên dưới sẽ trả lại thao tác nhấn phím khi chức năng quét bàn phím không trả về 'n'.
char switch_press_scan (void) // Lấy key từ người dùng { char key = 'n'; // Giả sử không có phím nào được nhấn trong khi (key == 'n') // Chờ cho đến khi phím được nhấn key = keypad_scanner (); // Quét đi quét lại các phím return key; // khi phím được nhấn thì trả về giá trị của nó }
Dưới đây là chức năng đọc bàn phím. Trong mỗi bước, chúng ta sẽ đặt hàng X1, X2, X3 và X4 là 0 và đọc trạng thái Y1, Y2, Y3 và Y4. Độ trễ được sử dụng cho hiệu ứng gỡ lỗi, khi công tắc vẫn được nhấn, chúng tôi sẽ trả về giá trị được liên kết với nó. Khi không có công tắc nào được nhấn, chúng tôi sẽ trả về 'n'.
char keypad_scanner (void) { X_1 = 0; X_2 = 1; X_3 = 1; X_4 = 1; if (Y_1 == 0) {__delay_ms (100); trong khi (Y_1 == 0); return '1'; } if (Y_2 == 0) {__delay_ms (100); trong khi (Y_2 == 0); trả về '2'; } if (Y_3 == 0) {__delay_ms (100); trong khi (Y_3 == 0); trả về '3'; } if (Y_4 == 0) {__delay_ms (100); while (Y_4 == 0); return 'A'; } X_1 = 1; X_2 = 0; X_3 = 1; X_4 = 1; if (Y_1 == 0) {__delay_ms (100); trong khi (Y_1 == 0); trả về '4'; } if (Y_2 == 0) {__delay_ms (100); trong khi (Y_2 == 0); trả về '5'; } if (Y_3 == 0) {__delay_ms (100); trong khi (Y_3 == 0); trả về '6'; } if (Y_4 == 0) {__delay_ms (100); while (Y_4 == 0); return 'B'; } X_1 = 1; X_2 = 1; X_3 = 0; X_4 = 1; if (Y_1 == 0) {__delay_ms (100); trong khi (Y_1 == 0); trả về '7'; } if (Y_2 == 0) {__delay_ms (100); trong khi (Y_2 == 0); trả về '8'; } if (Y_3 == 0) {__delay_ms (100); trong khi (Y_3 == 0); trả về '9'; } if (Y_4 == 0) {__delay_ms (100); while (Y_4 == 0); return 'C'; } X_1 = 1; X_2 = 1; X_3 = 1; X_4 = 0; if (Y_1 == 0) {__delay_ms (100); trong khi (Y_1 == 0); trở về '*'; } if (Y_2 == 0) {__delay_ms (100); trong khi (Y_2 == 0); trả về '0'; } if (Y_3 == 0) {__delay_ms (100); trong khi (Y_3 == 0); trở về '#'; } if (Y_4 == 0) {__delay_ms (100); while (Y_4 == 0); return 'D'; } return 'n'; }
Chúng tôi cũng sẽ thiết lập yếu tố kéo lên trên bốn bit cuối cùng và cũng đặt hướng của các cổng làm đầu vào cuối cùng và 4 đầu tiên là đầu ra. Các OPTION_REG & = 0x7F; được sử dụng để đặt chế độ kéo lên yếu trên các chân cuối cùng.
void InitKeypad (void) { Keypad_PORT = 0x00; // Đặt giá trị chân của cổng bàn phím bằng không Keypad_PORT_Direction = 0xF0; // Đầu vào 4 chân cuối cùng, đầu ra 4 chân đầu tiên OPTION_REG & = 0x7F; }
Trong chương trình PIC chính (được đưa ra bên dưới), đầu tiên chúng ta đặt các bit cấu hình và bao gồm một số thư viện cần thiết. Sau đó, trong các hàm void system_init, chúng ta khởi tạo bàn phím và màn hình LCD. Và cuối cùng ở trong chính chức năng, chúng tôi đã đọc bàn phím bằng cách gọi switch_press_scan) ( chức năng và trả lại giá trị cho LCD.
Tải xuống mã hoàn chỉnh với các tệp tiêu đề từ đây và xem video Trình diễn bên dưới.