DMDT
  • Danh Mục
    • Vi Điều Khiển
      • 8051
      • Arduino
      • AVR
      • IC Chức Năng
      • PIC
    • Module
      • MD Chuyển Đổi
      • MD GSM,GPS,3G
      • MD LCD
      • MD Nguồn
      • MD Wifi
    • Điện Tử Cơ Bản
      • ADC/DAC
      • Bộ Nhớ Bán Dẫn
      • Các Họ IC Số
      • Họ OPAM
      • Mạch Tổ Hợp
      • Mạch Tuần Tự
      • Linh Kiện Cơ Bản
    • Mạch Điện Vui
      • DIY – Tự Ráp Mạch
      • Hướng Dẫn Thiết Kế Mạch
      • Sản Phẩm Sáng Tạo
      • Tự Làm Mạch In
    • Cảm Biến
      • Analog (Tín hiệu điện áp)
      • Digital (Tín hiệu số)
  • Phần Mềm
  • Đồ Án
No Result
View All Result
DMDT
  • Danh Mục
    • Vi Điều Khiển
      • 8051
      • Arduino
      • AVR
      • IC Chức Năng
      • PIC
    • Module
      • MD Chuyển Đổi
      • MD GSM,GPS,3G
      • MD LCD
      • MD Nguồn
      • MD Wifi
    • Điện Tử Cơ Bản
      • ADC/DAC
      • Bộ Nhớ Bán Dẫn
      • Các Họ IC Số
      • Họ OPAM
      • Mạch Tổ Hợp
      • Mạch Tuần Tự
      • Linh Kiện Cơ Bản
    • Mạch Điện Vui
      • DIY – Tự Ráp Mạch
      • Hướng Dẫn Thiết Kế Mạch
      • Sản Phẩm Sáng Tạo
      • Tự Làm Mạch In
    • Cảm Biến
      • Analog (Tín hiệu điện áp)
      • Digital (Tín hiệu số)
  • Phần Mềm
  • Đồ Án
No Result
View All Result
DMDT
No Result
View All Result
Home Vi Điều Khiển 8051

Lập trình nút nhấn với 8051

2 Tháng Bảy, 2022
in 8051, Vi Điều Khiển
1.5k 30

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ấn
Share1122Tweet702

Related Posts

lập trình led 7 thanh
8051

Lập trình LED 7 thanh với 8051

4 Tháng Bảy, 2022
Module nRF24L01 2.4G – Cách Thức Sử Dụng Với Tất Cả Các Dòng VĐK
Điện Tử Cơ Bản

Module nRF24L01 2.4G – Cách Thức Sử Dụng Với Tất Cả Các Dòng VĐK

19 Tháng Sáu, 2022
BÀI 12: Đọc bàn phím khóa số với 8051.
8051

BÀI 12: Đọc bàn phím khóa số với 8051.

26 Tháng Sáu, 2022
Next Post
BÀI 8 : Lập trình nháy LED ĐƠN với 8051.

BÀI 8 : Lập trình nháy LED ĐƠN với 8051.

Bài 3: Lập trình LED Matrix với 8051.

Bài 3: Lập trình LED Matrix với 8051.

5 1 đánh giá
Đánh giá bài viết
Theo dõi
Đăng nhập
Thông báo của
guest
guest
0 Góp ý
Phản hồi nội tuyến
Xem tất cả bình luận

No Result
View All Result
  • Danh Mục
    • Vi Điều Khiển
      • 8051
      • Arduino
      • AVR
      • IC Chức Năng
      • PIC
    • Module
      • MD Chuyển Đổi
      • MD GSM,GPS,3G
      • MD LCD
      • MD Nguồn
      • MD Wifi
    • Điện Tử Cơ Bản
      • ADC/DAC
      • Bộ Nhớ Bán Dẫn
      • Các Họ IC Số
      • Họ OPAM
      • Mạch Tổ Hợp
      • Mạch Tuần Tự
      • Linh Kiện Cơ Bản
    • Mạch Điện Vui
      • DIY – Tự Ráp Mạch
      • Hướng Dẫn Thiết Kế Mạch
      • Sản Phẩm Sáng Tạo
      • Tự Làm Mạch In
    • Cảm Biến
      • Analog (Tín hiệu điện áp)
      • Digital (Tín hiệu số)
  • Phần Mềm
  • Đồ Án

Welcome Back!

Login to your account below

Forgotten Password?

Retrieve your password

Please enter your username or email address to reset your password.

Log In
wpDiscuz