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
Nguồn : Echipkool - Chia sẻ kiến thức - Kết nối đam mê điện tử
Đăng nhận xét