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

  • BÀI 10 : TIMER 0 PIC16F877A CCS Chào các bạn trong bài đăng này mình sẽ hướng dẫn về timer của PIC16F877A. Các bạn chú ý đây là 1 trong các modun của
  • BÀI 42 : DS1307 PIC16F877A CCS Trong file download bên dưới có nhiều project về DS1307 và I2C với PIC16F877A VÀ 8051 các bạn download về tham khảo nha
  • BÀI 1 : CHỚP TẮT LED PIC16F877A CCS Chào các bạn trong bài đăng này mình sẽ hướng dẫn các bạn về I/O của PIC16F877A cụ thể là chớp tắt led.  - 
  • BÀI 30 : PWM VÀ L298 PIC16F877A CCS 1 .IC L298. IC L298 là một IC tích hợp nguyên khối gồm 2 mạch cầu H bên trong. Với điện áp làm tăng công suất đầu ra
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

EmoticonEmoticon

:)
:(
=(
^_^
:D
=D
=)D
|o|
@@,
;)
:-bd
:-d
:p
:ng