|
3黑币
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit DQ1=P2^0; //传感器A定义使用单片机P20端口
sbit DQ2=P2^1; //传感器B定义使用单片机P21端口
sbit DQ3=P2^2; //传感器C定义使用单片机P22端口
sbit DQ4=P2^3; //传感器D定义使用单片机P23端口
sbit DQ5=P2^4; //传感器E定义使用单片机P24端口
unsigned char car_num=0; //车位数值
unsigned char Set_car_H=5; //设置车数数值
signed char s_car_num=0; //剩余车位数值
uchar flag1,flag2; //设置 2 个标志位
uchar flag3,flag4; //设置 2 个标志位
uchar flag5,flag6; //设置 2 个标志位
uchar flag7,flag8; //设置 2 个标志位
uchar flag9,flag10; //设置 2 个标志位
uchar N1=0,N11=0; //有车或者没有标志
uchar N2=0,N22=0;
uchar N3=0,N33=0;
uchar N4=0,N44=0;
uchar N5=0,N55=0;
#include"nrf905.c"
void jishu();
void campare_display();
void delay_us(uint z) //延时
{
uint a,b;
for(a=z;z>0;z--)
for(b=110;b>0;b--);
}
///////////////////////////////////////////////////////////////
/******************主函数************************/
void main()
{
uchar num;
nRF905Init(); //NRF905的初始化
Config905(); //配置无线模块NRF905
TxBuf[0]=1; //模块
while(1)
{
jishu(); //车位统计
campare_display(); //车位号识别
TxBuf[1]=car_num/10;//十位
TxBuf[2]=car_num%10;//个位
num++;
if(num==2){ //模块
num=0;
TX(); //发送
}
}
}
void campare_display() //比较
{
if((N1==1)||(N2==1)||(N3==1)||(N4==1)||(N5==1)) {
if(N1==1){
TxBuf[3]='A';
}
else{
TxBuf[3]=0;
}
if(N2==1){
TxBuf[4]='B';
} else{
TxBuf[4]=0;
}
if(N3==1){
TxBuf[5]='C';
} else{
TxBuf[5]=0;
}
if(N5==1){
TxBuf[6]='D';
} else{
TxBuf[6]=0;
}
if(N4==1){
TxBuf[7]='E';
} else{
TxBuf[7]=0;
}
} else{
// Lcd_ShowSring(1,0," ");
}
}
//****************************************************
void jishu() //统计车位数函数
{
if(DQ1==0) //车位1
{
delay_us(5); //类似于去抖
if(DQ1==0)
{
flag1=1; //标志位flag1
}
}
if(flag1==1)// flag1=1 传感器A 红外对管检测到 说明有车
{
delay_us(5);
if(N1==0){
car_num++; //车位数值加1
N1=1;
} //
flag1=0; //清标志位
flag2=1; //启动标志
N11=0;
}
if(DQ1==1&&flag2==1) { //否则检测不到车
if(N11==0){
car_num--; //车位数值减1
TxBuf[3]=0;
N11=1;
}
N1=0;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(DQ2==0) //车位2
{
delay_us(5); //类似于去抖
if(DQ2==0)
{
flag3=1; ////标志位flag3
}
}
if(flag3==1)// 传感器B 红外对管检测到 说明有车
{
delay_us(5);
if(N2==0){
car_num++; //车位数值加1
N2=1;
}
flag3=0; //清空标志位
flag4=1; //启动标志
N22=0;
}
if(DQ2==1&&flag4==1) { //否则检测不到车
if(N22==0){
car_num--; //车位数值减1
TxBuf[4]=0;
N22=1;
}
N2=0;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
if(DQ3==0) //车位3
{
delay_us(5); //类似于去抖
if(DQ3==0)
{
flag5=1; ////标志位flag5
}
}
if(flag5==1)// 传感器C 红外对管检测到 说明有车
{
delay_us(5);
if(N3==0){
car_num++; //车位数值加1
N3=1;
} //
flag5=0; //清空标志位
flag6=1; //启动标志
N33=0;
}
if(DQ3==1&&flag6==1) { //否则检测不到车
if(N33==0){
car_num--;
TxBuf[5]=0; //车位数值减1
N33=1;
}
N3=0;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(DQ4==0) //车位4
{
delay_us(5); //类似于去抖
if(DQ4==0)
{
flag7=1; ////标志位flag7
}
}
if(flag7==1)// 传感器D 红外对管检测到 说明有车
{
delay_us(5);
if(N4==0){
car_num++; //车位数值加1
N4=1;
} //
flag7=0; //清空标志位
flag8=1; //启动标志
N44=0;
}
if(DQ4==1&&flag8==1) { //否则检测不到车
if(N44==0){
car_num--; //车位数值减1
TxBuf[7]=0;
N44=1;
}
N4=0;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(DQ5==0) //车位5
{
delay_us(5); //类似于去抖
if(DQ5==0)
{
flag9=1; //
}
}
if(flag9==1)// 传感器E 红外对管检测到 说明有车
{
delay_us(5);
if(N5==0){
car_num++;
N5=1;
} //
flag9=0; //清空标志位
flag10=1; //启动标志
N55=0;
}
if(DQ5==1&&flag10==1) { //否则检测不到车
if(N55==0){
car_num--; //车位数值减1
TxBuf[6]=0;
N55=1;
}
N5=0;
}
}
|
|