ButtonTL CHUYÊN NGÀNHVi điều khiển

Tutorial 1 button 2 mode – press releases and holding

Tutorial 1 button 2 mode – press releases and holding

(nhấn nhã và nhấn giữ)

Trong project này ta sử dung một button thực hiện 2 chế độ (1 button 2 mode).

Kết nối với vi điều khiển 16f877A: Button kết nối RB1, led 7 đoạn kết nối với portd (RD0…RD7) và portb (RB4…RB7).

Mô tả project: Khi nhấn nhả button, mỗi lần nhấn nhã led 7 đoạn tăng 1 đơn vị, tương ứng với số lần nhấn button. Khi nhấn giữ button, led 7 đoạn hiển thị số tăng dần. Bạn xem video sau bài đăng để hiểu rõ hơn.

Code tham khảo với mikroC Pro for Pic:

/*
 * Project name: 1 Button 2 che do
 * Author: http://dientudieukhien.net
 * Description: Neu nhan button va nha ra thi led 7 doan hien thi so lan nhan button,
 neu nhan giu button - hold button thi led 7 doan se dem len den khi nao nha button.
 * Test configuration:
     MCU:             PIC16F877A
     Oscillator:      HS, 08.0000 MHz
     SW:              mikroC v8.0
*/
unsigned short mask(unsigned short num) {
  switch (num) {
    case 0 : return 0xC0;
    case 1 : return 0xF9;
    case 2 : return 0xA4;
    case 3 : return 0xB0;
    case 4 : return 0x99;
    case 5 : return 0x92;
    case 6 : return 0x82;
    case 7 : return 0xF8;
    case 8 : return 0x80;
    case 9 : return 0x90;
  } //case end
}
unsigned short digit_no, digit10, digit1, digit;
void interrupt() {
  if (digit_no==0) {
    PORTB.F7=0;
    PORTB.F6 = 0;          // Turn off all 7seg displays
    PORTD = digit1;     //  send mask for ones digit to PORTD
    PORTB.F7 = 1;          //  turn on 1st 7 seg., turn off 2nd
    digit_no = 1;
  } else {
    PORTB.F6=0;
    PORTB.F7 = 0;          // Turn off all 7seg displays
    PORTD = digit10;    //  send mask for tens digit to PORTD
    PORTB.F6 = 1;          //  turn on 2nd 7 seg., turn off 1st
    digit_no = 0;
    }
  TMR0 = 0;             //  clear TMRO
  INTCON = 0x20;        //  clear TMR0IF and set TMR0IE
}

void display(unsigned short i){
unsigned short digit;
digit=i%10;
digit1=mask(digit);           //hien thi hang don vi
digit=i/10;
digit10=mask(digit);          // hien thi hang chuc
delay_ms(500);
}

void main() {
unsigned short i,j,dem;
  OPTION_REG  = 0x80;   // Timer0 settings
  TMR0        =   0;
  INTCON      = 0xA0;   // Disable PEIE,INTE,RBIE,T0IE
  trisb=0x03;
  trisd=0x00;
  trisa=0X00;
  portb=0;
  portd=0;
  i=0;
  j=0;
  dem=0;
  display(i);
for(;;){
        if(Button(&portb,1,1,0)){ //Kiem tra button nhan giu hay nhan roi nha ra
                                 dem=dem+1;
                                 delay_ms(1);
                                 }
       if(dem==1){  //Neu nhan roi nha ra
                  i=i+1;
                  display(i);
                  }
      if(dem>1){  //Neu nhan giu - hold button
                display(j);
                j=j+1;
                delay_ms(30);
                if(Button(&portb,1,0,1)){
                                         i=0;
                                         j=0;
                                         delay_ms(1000);
                                         display(j);
                                         goto lap;
                                         }
                }
      lap:      //Kiem tra neu buton nha ra thi resest dem.
      if(Button(&portb,1,0,1)){
      dem=0;
                               }
      }
}

 








giaoanppt

Giaoan.link trang chia sẽ giáo án điện tử, bài giảng powerpoint, template powerpoint, nguyên liệu làm bài giảng, tài liệu, biểu mẫu miễn phí!

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

This site uses Akismet to reduce spam. Learn how your comment data is processed.