Chat
Danh mục
Hệ thống bật tắt đèn thông minh - PIC

Hệ thống bật tắt đèn thông minh - PIC

Số lượng:
Thêm vào giỏ
Hệ thống bật tắt đèn thông minh - PIC đã được thêm vào giỏ hàng


Code Vi Điều Khiển:
#include<16f877a.h>            //thu vien cho pic
#FUSES NOWDT                    // No Watch Dog Timer
#FUSES HS                       // High speed Osc (> 4mhz)
#use delay(clock=20M)         //su dung tre
int8 const LED7[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
                              //mang hien thi cac so tu 0 den 9
long i,L1,L2,ng,x,y,vao,ra,DATA_INFR;   //khai bao cac bien
// Ham check xung START
/* Xung START là xung co:
- tin hieu o muc thap (0) có do dai 9ms
- tin hieu o muc cao (1) có do dai 4ms
Chi kiem tra tin hieu o muc thap dung 9ms la dung xung START
*/
unsigned char check_start()
{
    unsigned char i;
    if(DATA_INFR==0)              // Neu co canh xuong cua tin hieu
    {
          delay_us(500);          // Delay de chong nhieu
          if(DATA_INFR==0)        // Neu dung la co canh xuong cua tin hieu
          {
              for(i=0;i<40;i++)  // Chia nho xung START thanh 40 doan, moi doan dai 200us
              {
                    delay_us(200);
                    if(DATA_INFR==1) return 0;    // Neu tin hieu len muc cao (1) --> khong phai xung START
              }
              while(DATA_INFR==1);  
              return 1;          // Dung la xung start
          }

    }
}
// ===============================================================
//  Ham doc ma cua cac kenh
unsigned long int infr_sensor()
{
    unsigned char i;
    unsigned int Data_Infr;
    Data_Infr=0;
    if(check_start())                  // Neu dung xung START
    {
          while(DATA_INFR==1);          // Cho het bit 1 tiep theo
          while(DATA_INFR==0);          // Cho het bit 0 tiep theo
          for(i=0;i<24;i++)            // Lay 24 bit du lieu (bao gom 8 bit 0 va 8 bit 1 dau tien sau xung start)
          {
              //while(DATA_INFR==0);
              delay_us(750);          // Delay 750us de kiem tra bit
              if(DATA_INFR==0) Data_Infr=Data_Infr*2 + 1;
              if(DATA_INFR==1) Data_Infr=Data_Infr*2;
              while(DATA_INFR==1);    // cho canh len
              while(DATA_INFR==0);    // cho canh len
          }
          delay_ms(600);                // Cho het tin hieu (chong nhieu)
    }
    return Data_Infr;                  // Gia tri ma kenh tra ve
}
//============================================//

void den(ng){
      if (ng==0) output_a(0); //xuat ra cong a gia tri 0
      else output_a(1);       //xuat ra cong a gia tri 1
}

//============================================//

void led(ng){
         L1=(ng/ 1) % 10;      // Lay so hang don vi
         L2=(ng/ 10) % 10;     // Lay so hang chuc
    for(i=0;i<100;i++){
         output_c(LED7[L2]); output_d(1); delay_ms(1); output_d(0);
           // dua ma so hang chuc ra cong C, bat LED 1, tre 1ms roi tat
         output_c(LED7[L1]); output_d(2); delay_ms(1); output_d(0);
           // dua ma so hang don vi ra cong C, bat LED 2, tre 1ms roi tat
        }
}

//============================================//

int dauvao(){                  //ctr con dau vao
   if ((x==0)&&(y==0)){        //neu bat dau di vao thi thuc hien
      x=1;                     //ghi nhan da qua senso 1
      if (ng!=99) ng++;        //neu so nguoi con nho hon 99 thi dem tang
   }
   else if ((x==0)&&(y==1)){  //neu la cuoi cua qua trinh di ra
   x=1;                       //ghi nhan da qua senso 1
   }
}

//============================================//

int daura(){                //ctr con dau ra
   if ((x==0)&&(y==0)){     //neu bat dau di ra va con nguoi trong phong
      y=1;                  //ghi nhan da qua senso 2
      if (ng!=0) ng--;      //neu so nguoi con lon hon 0 thi dem giam
   }
   else if((x==1)&&(y==0)){ //neu la cuoi cua qua trinh vao
   y=1;                     //ghi nhan da qua senso 2
   }  
}

//============================================//

#INT_rb                     //khai bao ngat thay doi trang thai cong B

long vaora(){               //ctr ngat cong B
      vao=input(pin_b4);    //gan bien vao doc du lieu vao chan B4 tu senso 1
      ra=input(pin_b5);     //gan bien vao doc du lieu vao chan B5 tu senso 2
   if (vao==0) dauvao();    //neu co tin hieu vao thi cho chay ctr con dau vao
   else if (ra==0) daura(); //neu co tin hieu ra thi cho chay ctr con dau ra
   if ((x==1)&&(y==1)&&(vao==1)&&(ra==1)){
                            //khi ca 2 sense deu da co tin hieu thi cai dat lai
      x=0;
      y=0;
    }
   return ng;
}              

//============================================//

void main(){
      x=y=0; ng=0;         //Gan cac gia tri ban dau
      set_tris_a(0);       //Cong A la cong ra
      set_tris_b(0xff);    //Cong B la cong vao
      set_tris_c(0);       //Cong C la cong ra
      set_tris_d(0);       //Cong D la cong ra

      enable_interrupts(INT_rb);  //cho phep ngat ngoai dem vach
      enable_interrupts(GLOBAL);  //cho phep ngat toan cuc
   
     while (true)
     {            //lien tuc kiem tra senso va dieu khien den
      led(ng);             //goi ham hien thi den led
      den(ng); //goi ham bat tat den
   
      }
}
( Mô Phỏng + Code)
Khi nhấn nút "Tải Về Máy", bạn sẽ vào trang quảng cáo, vui lòng chờ 5 giây. Nút  hiện ra ở góc phải phía trên, nhấn vào để đến trang download
Echipkool - Chia sẻ kiến thức - Kết nối đam mê điện tử