基本信息
源码名称:通过两对红外对管检测进出人流量 具有定时检测的功能
源码大小:5.76M
文件格式:.rar
开发语言:C/C++
更新时间:2018-04-03
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 1 元 
   源码介绍

#include <STC89C5xRC.H>
#include "sys.h"
#include "LCD.h"
#include "intrins.h" 

sbit IRIN = P2^2;
sbit IROUT = P2^3;

unsigned int in=0,out=0,end=0,seccnt=0,sect=0,mint=0;

#define FOSC 12000000L        //晶振频率
#define T1MS (65536-FOSC/12/1000)   //计算1ms定时器值

void INTinit();

void main()
{
	LCD_init();
	INTinit();
	LCD_ShowString(0,0,"   1400820117");	
	LCD_ShowString(0,1,"IN:   OUT:");	
  while(1)
  {
		if(end==0)
		{
			if(IRIN==0)  //如果内侧对管被挡住
			{
				LCD_ShowString(0,0,"1");
				while(IRIN==0);
				LCD_ShowString(0,0,"2");
				while(IRIN==1 && IROUT==1);
				LCD_ShowString(0,0,"3");
				if(IROUT==0)  //如果外侧对管被挡住
				{
					while(IROUT==0);
					in  ;		//进入人数加一
				}
				LCD_ShowString(0,0,"4");
			}
			else if(IROUT==0)  //如果内侧对管被挡住
			{
				LCD_ShowString(0,0,"1");
				while(IROUT==0);
				LCD_ShowString(0,0,"2");
				while(IRIN==1 && IROUT==1);
				LCD_ShowString(0,0,"3");
				if(IRIN==0)  //如果外侧对管被挡住
				{
					while(IRIN==0);
					out  ;		//进入人数加一
				}
				LCD_ShowString(0,0,"4");
			}
			LCD_Showvar(3,1,in);
			LCD_Showvar(10,1,out);
			LCD_Showvar(14,1,sect);
			LCD_Showvar(14,0,mint);
		}
		if(mint==1)
			end=1;
	}
}

void INTinit()
{
		IT0 = 1;                        //set INT0 int type (1:Falling 0:Low level)
    EX0 = 1;                        //enable INT0 interrupt
	
	  IT1 = 1;                        //set INT1 int type (1:Falling only 0:Low level)
    EX1 = 1;                        //enable INT1 interrupt
	
	  TMOD = 0x10;                    //set timer1 as mode1 (16-bit)
    TL1 = T1MS;                     //initial timer1 low byte
    TH1 = T1MS >> 8;                //initial timer1 high byte
    TR1 = 1;                        //timer1 start running
    ET1 = 1;                        //enable timer1 interrupt
	
	  EA = 1;                         //open global interrupt switch
}



void tm1_isr() interrupt 3 using 1
{
    TL1 = T1MS;                     //reload timer1 low byte
    TH1 = T1MS >> 8;                //reload timer1 high byte
    if (seccnt-- == 0)               //1ms * 1000 -> 1s
    {
        seccnt = 1000;               //reset counter
        sect  ;      //work LED flash
				if(sect==60)   //60秒为一分钟
				{
					sect=0;
					mint  ;
				}
    }
}


void exint0() interrupt 0           //(location at 0003H)   切换
{
//	if(timemode==0)
//		timemode=1;
//	else
//		timemode=0;
}

void exint1() interrupt 2           //(location at 0013H)		清零
{
	out=0;
	in=0;
	end=0;
	mint=0;
	sect=0;
}