BÀI 4 : GIAO TIẾP VỚI NÚT NHẤN PIC16F877A CCS (P2)

7:07:00 AM
Chào các bạn trong bài 3 mình đã giới thiệu với các bạn về cách giao tiếp với nút nhấn rồi bạn nào chưa xem thì xem lại tại đây để hiểu rõ hơn về cấu tạo và phân loại của nó nha ! 
Còn trong bài đăng này mình sẽ hướng dẫn các bạn thêm 1 phần nữa cũng là giao tiếp với nhút nhấn nhưng nó sẽ khó hơn bài trước vì trong bài trước chúng ta chỉ dùng lại ở việc giao tiếp thôi còn trong bài này thì chúng ta sẽ ứng dụng nó vào bài này để chuyển đổi hiệu ứng LED dùng 1 nút nhấn cụ thể là khi chúng ta không nhấn nút thì chương trình sẽ chạy bình thường còn nếu chúng ta nhấn nút thì nó sẽ chuyển sang hiệu ứng khác cho chúng ta ngay lập tức ! Chúng ta sẽ có đoạn chương trình như sau !
unsigned char KiemTraPhim()
{
   unsigned char i;
   for(i=0;i<50;i++)
   {
      delay_ms(10);
      if(input(pin_a0)==0)
      {
         if(check == 0)
         {
            check = 1;
             return 1;   
         }
      }
      else
      {
          check = 0;
      }   
   }
   return 0;
}
- Đoạn chương trình trên dùng để delay và kiểm tra nút nhấn của chúng ta cụ thể là khi nhấn nút thì nó sẽ kiểm tra cái bit check của chúng ta nếu mà bit check = 1 thì có nghĩa nút nhấn của chúng ta được nhấn nó sẽ return 1 còn nếu không nhấn thì nó sẽ return 0 . Và đoạn chương trình trong void main (void) được viết như sau :
while(true)
   {
      LED = 0x00;
      for(i=0;i<20;i++)
      {
          if(KiemTraPhim()) break;
          delay_ms(1000);
          LED = ~LED;
      }

      LED = 0x55;
      for(i=0;i<20;i++)
      {
         if(KiemTraPhim()) break;
         delay_ms(1000);
         LED = ~LED;
      }

      LED = 0x0F;
      for(i=0;i<20;i++)
      {
          if(KiemTraPhim()) break;
          delay_ms(1000);
          LED = ~LED;
      }
   }
- Giải thích đoạn chương trình trên như sau : Mỗi hiệu ứng LED bình thường chúng ta sẽ cho nó chạy  20 lần nếu như chúng ta nút nhấn nó sẽ lặp tức thoát khỏi chương trình đang thực thi và nhảy vào chương trình tiếp theo ! 
- Ảnh mô phỏng protues.
giao tiếp nút nhấn pic16f877a ccs
- Đây là code chương trình đầy đủ.
#include <16f877a.h>
#include <def_877a.h>
#use delay(clock=800000)
#fuses HS,NOWDT
#byte portb=0x06
#define LED portb
int kiemtra;
#bit  check = kiemtra.0
unsigned char i;
unsigned char KiemTraPhim()
{
   unsigned char i;
   for(i=0;i<50;i++)
   {
      delay_ms(10);
      if(input(pin_a0)==0)
      {
         if(check == 0)
         {
            check = 1;
             return 1;   
         }
      }
      else
      {
          check = 0;
      }   
   }
   return 0;
}

void main(void)
{
    trisa = 0xff;
    TRISB = 0X00;
   while(true)
   {
      LED = 0x00;
      for(i=0;i<20;i++)
      {
          if(KiemTraPhim()) break;
          delay_ms(1000);
          LED = ~LED;
      }

      LED = 0x55;
      for(i=0;i<20;i++)
      {
         if(KiemTraPhim()) break;
         delay_ms(1000);
         LED = ~LED;
      }

      LED = 0x0F;
      for(i=0;i<20;i++)
      {
          if(KiemTraPhim()) break;
          delay_ms(1000);
          LED = ~LED;
      }
   }
}
- Link download project Click here

Share this

Related Posts

Previous
Next Post »

3 nhận xét

Write nhận xét
October 16, 2016 at 6:08 AM delete

Anh cho em hỏi sao phải quét kiểm tra phím dùng vòng for tới 50 lần vậy ạ .

Reply
avatar
October 16, 2016 at 6:37 AM delete

Đó là thời gian cần thiết để nó kiểm tra nút nhấn của chúng ta ak ? nếu nhanh quá thì cũng không được mà lâu quá thì cũng không được !

Reply
avatar