• 大小: 7KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-16
  • 语言: 其他
  • 标签: infra  

资源简介

通过2路红外对射,检测红外感应的顺序来判断人员进出,并由此判断进出方向、人员数量

资源截图

代码片段和文件信息


/*************************************
STC15W201S  仅有T0 T2两个定时器,仅有一个串口
*************************************/
//#include    
#include “STC15Fxxxx.H“
/******************************************/
sbit    P_LED = P1^3; //LED闪烁输出
// STC15F101W   1K flash128 SRAM
/*************IO 配置************
M1   M0
0    0   准双向口
0    1   推挽输出
1    0   高阻输入
1    1   开漏
****************************/
/**********30MHZ****1T***********/
/*******************************************
38K 时,在30MHZ 1T模式下,计时次数26.3us--对应789.47,分解成低电平263次,高电平526次
IO 输出低电平红外发射
//#define T1MS (65536-FOSC/1000)       //1T模式
//#define T1MS (65536-FOSC/12/1000)  //12T模式
********************************************/
/****************************************
1Hz下,1/4时间量,3/4时间不亮,以节约电能
T0计时,12T模式 每10毫秒中断一次
******************************************/
#define LEDT_TH  0x9E
#define LEDT_TL  0x58

#define LEDLMAX  10//25    //250毫秒亮
#define LEDHMAX  250//75    //750毫秒不亮
/*******************串口相关*****************************/
typedef unsigned char BYTE;
typedef unsigned int WORD;

#define FOSC 30000000L          //系统频率 30M
#define BAUD 9600               //串口波特率

#define NONE_PARITY     0       //无校验
#define ODD_PARITY      1       //奇校验
#define EVEN_PARITY     2       //偶校验
#define MARK_PARITY     3       //标记校验
#define SPACE_PARITY    4       //空白校验

//#define PARITYBIT EVEN_PARITY   //定义校验位
#define PARITYBIT NONE_PARITY   //定义校验位
#define S1_S0 0x40              //P_SW1.6
#define S1_S1 0x80              //P_SW1.7

bit busy;

void SendData(BYTE dat);
void SendString(char *s);
/*volatile unsigned char bdata COM1flag;
sbit Fs1Rbufempty = COM1flag^0;
sbit Fs1Rbufffull = COM1flag^1;
sbit Fs1Rstart =    COM1flag^2;
sbit Fs1Rdofinish = COM1flag^3;*/
/*************led灯处理*****************/
volatile unsigned char ledTimeNum;
void do_led(void);
/****************io中断处理控制************************/
sbit P_first = P3^2;   //INT0 进
sbit    P_last  = P3^3;   //INT1 出
volatile unsigned char bdata iovalue;

volatile unsigned char iovaluereadbkiovaluebeforeiovaluereadnum;   //为防止干扰,定为读4次,机40毫秒的数据保持,否则认定为干扰
bit ioupdateflag;     //数据有变化,则更新标志
/*************数据处理*****************/
#define IOOUTMAX 16
//volatile unsigned char iobuf[IOOUTMAX]={23101320320};
volatile unsigned char iobuf[IOOUTMAX];
volatile unsigned char ioheadiotail;//=11;
//unsigned char iobufdo[IOOUTMAX];   //将数据处理用
bit iofullflag;   //0  数据已经满了  ;1 则为空

#define DIRECTION_MANIN 0x01//0x02 //人进去的区分
#define DIRECTION_MANOUT 0x02//0x01 //人出来的区分
unsigned char judgenumjudgeStartjudgemiddlejudgerearjudgeresult;   //数据判断用
bit judgesomeonejudgesomeonefinishi;   //门口中间有人标志

/************************************
2 3 1 0 进的正常流程  1 3 2 0,出的正常流程   现在判断规,出现非零50毫秒,就认为有人,再判断人是出来还是进去,0后第一个数字,作为
方向参考,主要是判断3后的数据,如果为3后的数据,与第一个相等,则是退出,不增减人数,在0之前的数据是2,则是出,是1,则是进,如果3后为0,则以3之前的为参考,
**********************************/
/*************

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        5858  2018-08-31 10:16  infraT.c
     文件       15957  2018-08-30 19:48  infraR.c

评论

共有 条评论