资源简介
通过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
- 上一篇:erp表结构
- 下一篇:Keymaker_Xilinx_ISE_7_1.exe
评论
共有 条评论