在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例嵌入式开发 → 通过两对红外对管检测进出人流量 具有定时检测的功能

通过两对红外对管检测进出人流量 具有定时检测的功能

嵌入式开发

下载此实例
  • 开发语言:C/C++
  • 实例大小:5.76M
  • 下载次数:18
  • 浏览次数:463
  • 发布时间:2018-04-03
  • 实例类别:嵌入式开发
  • 发 布 人:Remy
  • 文件格式:.rar
  • 所需积分:1
 相关标签: 定时 检测 红外线

实例介绍

【实例简介】

【实例截图】

from clipboard

【核心代码】

#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;
}

标签: 定时 检测 红外线

实例下载地址

通过两对红外对管检测进出人流量 具有定时检测的功能

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警