Bài 6. 8051 Giao tiếp nút bấm

🌱 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!

    Để đọ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.

>>>= Follow ngay =<<<

💚 Kênh Youtube Lập trình - Điện tử 💚

Để nhận được những bài học miễn phí mới nhất nhé 😊

Xem Bài 5                                    Xem Bài 7

2 Nhận xét

Mới hơn Cũ hơn