Home Blog Lập trình STM32 quét ma trận phím Keypad 3×4

Lập trình STM32 quét ma trận phím Keypad 3×4

0
Lập trình STM32 quét ma trận phím Keypad 3×4

Ma trận phím là một thiết bị rất hay được sử dụng trong lập trình vi điều khiển, chúng giúp cho việc tiết kiệm chân GPIO của vi điều khiển. Trong bài này chúng ta sẽ học cách quét ma trận, lý thuyết quét này cũng được sử dụng trong các loại led ma trận khác nhau.

Bài này nằm trong Serie Học STM32 từ A tới Z

via GIPHY

Ma trận bàn phím (Keypad) là gì?

Ma trận phím là tập hợp các nút nhấn kết nối với nhau theo các hàng và cột. Số nút nhấn tương ứng sẽ là tích của số hàng x số cột.

Ví dụ: Ma trận phím 4×4 sẽ có 4 cột và 4 hàng. Số lượng phím là 16 phím

Để điểu khiển 16 nút nhấn, thông thường chúng ta phải sử dụng 16 GPIO nhưng nếu sử dụng ma trận phím chúng ta chỉ cần sử dụng 8 GPIO.

Các nút nhấn sẽ nối hàng và cột với nhau. Khi nhấn nút 1 dây Hàng (Row) sẽ nối với dây Cột (Colum hay Col). Các nút nhấn tương ứng sẽ có vị trí nối hàng với cột khác nhau.

ma tran phim 4x4 1

Ví dụ: Nút dầu tiên trong ma trận được nhấn sẽ nối Cột 1 (C1) với hàng 1(R1), nút liền kề bên phải được nhấn sẽ nối Cột 2(C2) với Hàng 1(R1). Tương tự như vậy với các nút khác.

Quét phím là gì? Hướng dẫn điều khiển ma trận phím

Trong bài về nút nhấn chúng ta đã được học cách đọc trạng thái của 1 chân ( Read Input GPIO), Nút nhấn được nối 1 đầu vào GPIO 1 đầu vào GND hoặc VCC. Khi nhấn nút thì GND hoặc VCC được thông với nút nhấn, vậy nên khi Read sẽ cho kết quả 0 hoặc 1

Ý tưởng quét bàn phím như sau:

Thay vì nối 1 đầu nút nhấn với GND (hoặc VCC) chúng ta nối đầu đó với 1 GPIO khác. Chân GPIO đó chúng ta để là OUTPUT, vậy là chúng ta có thể điều khiển được điện áp trên đầu đó. Khi đó nếu nhấn nút GPIO Input = giá trị GPIO Ouput.

Ở trạng thái bình thường. GPIO Input được để ở chế độ pull down ( khi chưa nhấn nút sẽ có giá trị 0) , GPIO Ouput sẽ ở trạng thái 0 ( Chưa active). Khi đó cho dù chúng ta ấn nút thì GPIO Input cũng sẽ vẫn là gía trị 0.

mac dinh
Trạng thái mặc định

Khi chúng ta đổi trạng thái GPIO Output sang 1 ( Active), nhấn nút thì GPIO Input sẽ đọc được giá trị 1.

khi chua nhan nut
Khi chưa nhấn nút
khi nhan nut
Khi nhấn nút

 

Vậy khi nối nút nhấn thành ma trận 3×4.

Quét phím sẽ diễn ra như sau: Khi quét cột 1, nếu các phím trong cột đó được nhấn, tương ứng trạng thái GPIO của các hàng sẽ thay đổi theo vị trí của nút nhấn. Các nút nhấn trong các cột khác dù được nhấn cũng không có tác dụng gì.

Khi quét đến cột 2,3. cũng tương tự như vậy. Quá trình quét phải sảy ra rất nhanh, để có thể kiểm tra được tất cả các nút trong thời gian nhấn và thả ra.

quet phim

VD:

Để đọc được giá trị nhấn vi điều khiển sẽ lần lượt ghi mức 1 vào các chân 2 7 6 4 (Quét Hàng). Sau đó sẽ đọc giá trị từ 3 chân 3 1 5.
Nếu khi quét pin 2 mà pin3 có tín hiệu  => nút 1 được nhấn.

Tương tự với các nút còn lại.

Cấu tạo của ma trận phím 3×4 (Keypad 3×4)

Bao gồm 3 cột và 4 hàng, sắp xếp theo thứ tự sau

download
Keypad 3×4 Mềm
ban phim 3x4 cung
Keypad 3×4 Cứng

Trong bài viết này chúng ra sẽ sử dụng bàn phím cứng 3×4, Pinout tương tự như bàn phím mềm.

Lập trình STM32 quét ma trận phím 3×4

Cấu hình trong CubeMx

Chọn chip ST32F103C8T6. Cấu hình SYS – Debug – Serial Wire. Thạch anh nội

Trong GPIO chọn PA0 – 3: Input pull up, PA4- 6: Output

Screenshot 2

Tab Connectivy chọn UART1 Asynch

Screenshot 3

Đặt tên và Gen Code

Screenshot 4

Dowload thư viện Keypad

Các bạn truy cập link: Hướng dẫn download tài liệu lập trình STM32 

Download thư viện Device, trong đó có file KEYPAD.c và KEYPAD.h, copy file vào thư mục Src và Inc của project.

Click vào Add file, tìm tới File vừa down về. Nhấn Add để thêm file vào Project

Screenshot 5

Sử dụng thư viện ma trận phím KEYPAD

Sau khi thêm các file vào, chúng ta Include vào file. Tạo một biến Key để lưu trữ phím được đọc ra

Screenshot 6

Khai báo 1 bàn phím tên là Keypad và một KeyMap ( Kí tự tương ứng với vị trí nút nhấn trên Keypad)

Screenshot 7

Trước While (1) khởi tạo các Keypad, truyền các tham số KEYMAP, các cột và hàng vào.

Screenshot 8

Trong While Sử dụng Readkey để đọc phím, sau đó in ra UART1 và delay 1 khoảng thời gian nhỏ.

Nhấn F7 để Build sau đó nạp code.

Sơ đồ phần cứng

3 Cột tương ứng với chân 3,1,5 trên KEYPAD nối với PA4,5,6

4 Hàng tương ứng với chân 2,7,6,4 trên KEYPAD nối với PA0,1,2,3

Giải thích Code ma trận phím

Hàm Init khởi tạo các giá trị như KEYMAP, Vị trí các chân Cột và hàng, được copy vào struct Keypad đã khai báo.

Screenshot 9

Hàm Readkey, tạo ra vòng lặp. Trong vòng lặp đó ta ghi giá trị vào các cột, sau đó đọc lần lượt các hàng.

Screenshot 10

Khi thấy sự nút đó được đọc, ta sẽ return giá trị tương ứng trong KEYMAP

Screenshot 11

Hàm Config sẽ thay đổi KEYMAP, giúp việc chuyển đổi giá trị các nút nhấn trong quá trình code.

Kết

Phương pháp quét Ma trận phím là một phương pháp rất hay khi sử dụng GPIO, nó cũng tương tự khi quét các loại ma trận led hay các phương pháp quét khác. Các bạn có thể tự code theo lý thuyết mình đã nêu ra để hiểu rõ hơn về vấn đề này nhé.

Đừng quên tham gia nhóm Nghiện lập trình, để có thể kết nối với những anh em khác nhé!

Rate this post