Chủ Nhật, 6 tháng 3, 2016

Bài 3: GPIO Với 8051: Nút Nhấn.

 

Chào các bạn!

     Nút nhấn (Button) là một linh kiện điện tử thông dụng trong các thiết bị điện tử. Nút nhấn thường được sử dụng để làm các nút điều khiển một chức năng nào đó, ví dụ nút điều chỉnh âm lượng, điều chỉnh độ sáng hay nút cho phép chọn các chế độ hoạt động...
     Hôm nay, mình xin giới thiệu đến các bạn bài viết sử dụng nút nhấn với vi điều khiển 8051. Ở bài trước, mình đã viết về việc sử dụng chân vi điều khiển 8051 xuất tín hiệu điều khiển led đơn (Output), hôm nay mình sẽ viết về việc sử dụng chân vi điều khiển 8051 để đọc tín hiệu từ nút nhấn (Input).

I. Sơ đồ nguyên lý.

     Trước hết, mình xin giới thiệu đến các bạn sơ đồ nguyên lý có sử dụng nút nhấn. Mình chỉ lấy sơ đồ mạch điều khiển led đơn ở bài trước và thêm hai nút nhấn vào P1.0 và P1.7 để điều khiển. Sơ đồ được cho như hình dưới.
 

     Các bạn lưu ý, khi mắc mạch sử dụng nút nhấn cho vi điều khiển 8051, các bạn nên mắc điện trở kéo ở chân vi điều khiển, điều này nhằm mục đích ổn định mức logic mặc định của chân VĐK khi nút chưa được nhấn. Ví dụ, ở sơ đồ trên, mình có mắc điện trở treo 10k lên nguồn dương. Vậy mặc định khi nút chưa được chấn, chân VĐK có mức logic 1 (5V), khi nút được nhấn, chân VĐK sẽ có mức logic 0 (0V).

II. Bài toán.

Mình xin được hướng dẫn các bạn làm quen lập trình VĐK 8051 với 2 bài toán như sau. 

1. Bài 1.

     Sử dụng 2 nút nhấn BT1 và BT2 lập trình điều khiển: Khi nhấn nút nhấn BT1, 8 led đơn D1-D8 sáng. Khi nhấn nút nhấn BT2, 8 led đơn D1-D8 tắt.
     Bài toán này khá đơn giản, chỉ cần kiểm tra mức logic trên 2 chân nối vào nút nhấn (P1.0 và P1.7), chân nào có mức logic 0 (tương ứng với nút được nhấn) thì mình sẽ thực hiện lệnh theo yêu cầu khi nút nhấn đó được nhấn. Vì ở đây đề bài không nói đến yêu cầu nhấn và giữ hay nhấn rồi nhả ra, nên mình chưa cần quan tâm vấn đề đó, chỉ cần biết rằng đã nhấn nút nhấn thì sẽ thực hiện lệnh, sau đó còn giữ hay thả ra thì chưa cần quan tâm.
     Để kiểm tra được mức logic trên chân VĐK (mức 0 hay mức 1), mình sẽ dùng câu lệnh "if". Lưu đồ thực hiện bài toán được cho như hình sau.
     Sau đây là đoạn code trong chương trình chính thực hiện bài toán đã cho.

 while(1)
 {
  /*Kiem tra xem BT1 co duoc nhan hay khong
  Neu duoc nhan, bat 8 led sang bang lenh P2 =0;
  Neu khong duoc nhan, di denh lenh tiep theo kiem 
                tra nut nhan BT2
  */
  if(BT1 == 0)
  {
   P2 = 0;       /*Bat 8 led sang*/
  }
  if(BT2 == 0)
  {
   P2=0xFF;     /*tat het 8 led*/
  }
 }
 

2. Bài 2.

       Sử dụng nút nhấn BT1 điều khiển theo yêu cầu: Ban đầu 8 led D1-D8 tắt, Khi nhấn nút nhấn BT1 1 lần (nhấn rồi nhả ra) thì 8 led D1-D8 sáng, sau đó tiếp tục nhấn nút BT1 thêm 1 lần nữa thì 8 led D1-D8 tắt, và tiếp tục lặp đi lặp lại như vậy.
   
     Với bài toán này, mấu chốt là mình phải đếm được số lần nhấn nút. Sau đó dựa vào số lần nhấn này điều khiển led. Để thực hiện bài toán này, mình sẽ dùng 1 biến để đếm số lần nhấn. Biến sẽ khởi tạo bằng 0, nếu nhấn lần thứ nhất biến tăng giá trị lên 1, lần thứ 2, biến tăng giá trị lên 2, nhưng khi nhấn lần thứ 3, mình sẽ reset giá trị biến về 1. Nghĩa là biến sẽ chỉ có 2 giá trị 1 hoặc 2. Nếu bằng 1 thì cho 8 led sáng, bằng 2 thì cho 8 led tắt.
     Sau đây là lưu đồ thuật toán cho ý tưởng trên.

Code được viết trong chương trình chính như dưới đây.

 
unsigned char bt_num = 0; 
 while(1)
 {
   /*Dem so lan nhan nut*/
   if(BT1==0)
   {
     delay_ms(10);   /*Chong nhieu*/
     if(BT1==0)
     {
       while(BT1==0);  /*Cho nut nhan dc nha*/
       bt_num ++; /*tang gia tri bien dem so lan nhan*/
       if(bt_num > 2)
              bt_num =1; /*Khi nhan hon 2 lan, 
                 reset gia tri bien dem ve 1
                               */
      }
   }
          /*Xu ly gia tri nhan nut*/
   if(bt_num == 1)
  P2 = 0;  /*bat 8 led sang*/
   if(bt_num == 2)
  P2 = 0xFF; /*tat 8 led */
 }
 

     Trên đây là cách sử dụng nút nhất với vi điều khiển 8051 của mình. Các bạn có thể tùy biến chương trình theo yêu cầu bài toán. Cái quan trọng là hiểu được yêu cầu bài toán để đưa ra thuật toán phù hợp.
     Chúc các bạn thành công!
     Website được thực hiện bởi: cửa hàng linh kiện điện tử Đức Long https://muabanlinhkien.net/






Không có nhận xét nào:
Write nhận xét