Thứ Tư, 9 tháng 12, 2015

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

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

1 nhận xét so far


EmoticonEmoticon