🌱 Bài 6. 8051 Giao tiếp nút bấm
Để giao tiếp nút bấm, ta quan tâm đến chế độ input của 8051.
Mặc định, Port 1, 2, 3 input ở mode pullup, trong khi port 0 là floating nên cần điện trở kéo bên ngoài.
Các chế độ GPIO có trong bài viết sau!
🌱 8051 GPIO Input
Để đọc nút bấm, ta đọc giá trị bit tương ứng trong thanh ghi của chân trong port. Ví dụ, nút bấm ở chân P2.1 thì ra đọc bit P2_1 của thanh ghi P2 😃
Do mode Pullup (port 1,2,3) hoặc điện trở kéo ngoài (port 0), nên mặc định, bit đọc được ban đầu là 1. Khi bấm nút, bit này = 0.
Vì vậy, ta dùng câu lệnh điều kiện if để đọc nút bấm:
if (bit == 0) // nút được bấm
{
//Thực hiện điều cần làm
}
else // nút không được bấm
{ .... }
Ví dụ: Đọc nút bấm tại chân P2.1 điều khiển led tại chân P2.0. Ban đầu nút tắt. Khi nút được bấm, Led sẽ đảo trạng thái.
** Một số thuật ngữ có thể được giải thích sau
🚕🚙 Có một vấn đề: Khi mô phỏng, nút bấm đôi khi được bấm quá lâu, làm LED đảo liên tục. Ngoài thực tế, vấn đề này còn xảy ra nhiều hơn (có cả phím lởm !!)
=> Hiện tượng dội phím = "SWITCH BOUNCE"
=> Cần được giải quyết!
🌱 Debounce nút nhấn
Có thể thấy dạng sóng của hiện tượng dội phím.
Từ đó, ta có 2 cách giải quyết hiện tượng này:
- Debounce bằng phần cứng: Khử dạng răng cưa bằng tụ điện - Ta lắp một tụ gốm (khoảng 100nF) song song với nút bấm.
- Debounce bằng phần mềm: Đọc lại giá trị nút bấm sau khoảng răng cưa ~ 20ms.
if (bit == 0) // nút được bấm
{
delay_ms (20);
if (bit == 0) // Kiểm tra lại nút bấm
{
//Thực hiện điều cần làm
}
}
Một chia sẻ khác về việc kiểm tra khi nào nút bấm được nhả ra:
Dùng một vòng lặp while()
while (bit == 0);
Trong thực tế, có thể kết hợp cả 2 phương pháp này.
Kết luận
Trong bài này, chúng ta đã tìm hiểu về cách giao tiếp nút bấm với vi điều khiển 8051. Chúng ta đã học về chế độ input, cách đọc giá trị nút bấm, và cách xử lý hiện tượng dội phím (switch bounce) bằng cả phương pháp phần cứng và phần mềm. Những kiến thức này rất quan trọng trong việc phát triển các ứng dụng tương tác với người dùng thông qua nút bấm trên vi điều khiển 8051.
>>>>>> Follow ngay <<<<<<<
Để nhận được những bài học miễn phí mới nhất nhé 😊
Chúc các bạn học tập tốt 😊
bài viết rất hữu ích ạ
Trả lờiXóaCảm ơn bạn, mong bạn ủng hộ kênh nhiều hơn :D
Xóa