Lập Trình Nút Nhấn Với 8051
Có thể bạn quan tâm
I.Đọ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:
#include<REGX52.H> sbit BUTTON = P3^7; sbit LED = P2^7; void main (void) { while(1) { LED = BUTTON; } }Đâ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 :
#include<REGX52.H> sbit BUTTON = P3^7; sbit LED = P2^7; void main (void) { while(1) { if(BUTTON == 0) { while(BUTTON == 0) { } LED = !LED; } } }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.
#include<REGX52.H> sbit BUTTON = P3^7; sbit LED = P2^7; void Delay_ms(unsigned int t) { unsigned int x,y; for(x=0;x<t;x++) { for(y=0;y<123;y++); } } void main (void) { while(1) { if(BUTTON == 0) { Delay_ms(100); if(BUTTON == 0) { while(BUTTON == 0) { } LED = !LED; } } } }Cách 2: Sử dụng so sánh dữ liệu trước và sau để phát hiện chuyển mức.

Code này chọn sườn xuống của nút nhấn để thực hiện lệnh điều khiển.
#include<REGX52.H> sbit BUTTON = P3^7; sbit LED = P2^7; bit Button_Old; void Delay_ms(unsigned int t) { unsigned int x,y; for(x=0;x<t;x++) { for(y=0;y<123;y++); } } void main (void) { while(1) { if(BUTTON == 0) { Delay_ms(100); if((BUTTON == 0) && (Button_Old == 1)) { LED = !LED ; } } Button_Old = BUTTON; Delay_ms(100); } }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.
Tags: 8051giao tiếp nút nhấn với 8051nút nhấnTừ khóa » Code Nút Nhấn Ccs
-
BÀI 4 : GIAO TIẾP VỚI NÚT NHẤN PIC16F877A CCS (P2)
-
BÀI 3 : GIAO TIẾP VỚI NÚT NHẤN PIC16F877A CCS (P1)
-
Nút Bấm Trong CCS - PIC Vietnam
-
Lập Trình PIC CCS Bài 3: Giao Tiếp Nút Nhấn Thay đổi Giá ... - YouTube
-
Lập Trình PIC Với CCS Bài 4 Nút Nhấn - Led 7 đoạn - Phần 1
-
BÀI 4-CHƯƠNG TRÌNH GIAO TIẾP NÚT NHẤN PIC16F877A
-
BÀI 9: ĐẾM TỪ 0 ĐẾN 99 SỬ DỤNG 2 NÚT NHẤN PIC16F877A XC8
-
Xin Giúp Code Pic C (ccs) - Dien Tu Viet Nam
-
Ngắt Port B, Điều Khiển Hiệu ứng Led đơn Bằng Nút Nhấn, Lập Trình Pic
-
Bài 4 - VĐK PIC16F887 Và Nút Nhấn - Diễn đàn Cơ điện Tử
-
Lập Trình PIC CCS Bài 3: Giao Tiếp Nút ... - TƯ VẤN SINH VIÊN HCM
-
BÀI 4 : Mô Phỏng PIC16F877A (XC8) Giao Tiếp Với Nút Nhấn