Lập trình 8051 – BÀI 2: Lập trình nút nhấn.

0
3787

Đọc đầu vào cơ bản

Trước tiên việc đầu tiên chúng ta cần làm là đọc được dữ liệu đầu vào ở 1 chân đang ở mức 0 hay 1. Để hiểu rõ, chúng ta cùng thực hiện một bài toán đơn giản như sau: Đọc dữ liệu từ 1 chân vi điều khiển và xuất dữ liệu ra một chân khác.

Mạch điện được thiết kế  như sau:

Mặc định đầu vào của chân 3.7 sẽ là 5V. Khi nhấn nút, đầu vào chân 3.7 sẽ là 0V. Chúng ta thực hiện việc đọc và xuất dữ liệu liên tục như sau:

Đây là một chương trình rất đơn giản. Mô phỏng chương trình với Proteus  Kết quả khi nút nhấn được nhấn LED sáng.

  1. Đọc đầu vào và xử lý nút nhấn

Ở bài toán tiếp theo chúng ta sẽ nghĩ đến việc thực hiện bài toán nhấn nút thì đèn sáng nhấn thêm lần nữa thì đèn tắt.

Cách 1:  Dùng hàm while để chờ chuyển mức.

Ở cách này, sau khi chúng ta phát hiện dữ liệu xuống mức 0, chúng ta sẽ dùng vòng lặp while chờ cho đến khi nào dữ liệu thoát khỏi mức 0 để xác nhận nút đã được nhấn. Lúc đó chúng ta có thể thực hiện các chức năng mà chúng ta mong muốn tương ứng với việc nhấn nút. Đoạn code như sau :

Trong thực tế, nút nhấn rất có khả năng bị chập chờn, dao động liên tục mức 0-1 (run tay khi nhấn chẳng hạn). Như thế, một lần nhấn, thả nút có thể khiến vi điều khiển hiểu là rất nhiều nhấn, thả liên tiếp. Để tránh hiện tượng này, khi phát hiện nút nhấn được nhấn chúng ta delay một khoảng thời gian nhỏ để “vượt qua” thời gian dao động thường gặp. Sau đó, chúng ta kiểm tra lại nút nhấn và thực hiện vòng chờ như trên.

 

Cách 2:  Sử dụng so sánh dữ liệu trước và sau để phát hiện chuyển mức.

Cách ở trên chúng ta đã có thể phát hiện được sự kiện nhấn nút, tuy nhiên có nhược điểm: Khi chúng ta thực hiện nhấn nút quá lâu thì trong lúc đó vi điều khiển không thực hiện việc gì, vòng while(1) làm tốn tài nguyên. Nếu người lập trình vẫn muốn vi điều khiển thực hiện các lệnh thì phải đưa code vào vong while này, rất bất tiện nếu như có nhiều nút nhấn. Vì thế chúng ta cần lựa chọn một cách giải quyết khác.

Ý tưởng: Chúng ta so sánh giữa mức ngay trước đó và mức mới. Nếu có sự sai khác giữa mức mới và mức ngay trước đó thì có nghĩa là có sự thay đổi về giá trị nút nhấn và tùy thuộc vào mục đích của người lập trình chọn sườn lên hay sườn xuống hoặc cả 2 sườn để thực hiện các lệnh lập trình theo ý muốn. Ở bài toán này chúng ta chọn sườn xuống của nút nhấn để thực hiện lệnh điều khiển.

Sau khi mô phỏng sẽ thấy ngay khi nút nhấn được nhấn, LED đã được thay đổi mà không cần chờ nút nhấn được thoát như trước nữa.

Như vậy, chúng ta đã tìm hiểu thêm được vấn đề dữ liệu đầu vào, đọc dữ liệu nút nhấn và điều khiển dữ liệu đầu ra. Ngoài ra, có một cách kiểm soát dữ liệu nút nhấn khác bằng ngắt ngoài, chúng ta sẽ cùng tìm hiểu thêm sau.

 

Trao đổi học tập

Comments