📄 main.c
字号:
/*********************************************/
//超声测距===================================/
/*******************************************/
#include <at89x52.h>
#include<INTRINS.H>
#define CSI1 P3_0 //P1_0 发射 //P3_0
#define CSO1 P3_1 //P1_1 接收 //P3_1
#define CSI2 P2_4 //P1_2 //P2_4
#define CSO2 P2_5 //P1_3 //P2_5
unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f};
/***************小段延时,消除误差********************/
void delay_100us(void)
{ unsigned char k;
for(k=0;k<200;k++);
}
/***************40KHz方波延时程序********************/
void delay25us(void)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
void delay(int j)
{
int i;
for(;j!=0;j--)
for(i=124;i!=0;i--);
}
void delay_1s(unsigned char sec)
{
for(;sec!=0;sec--)
delay(1000);
}
int measure_time(void)
{
unsigned int time=0;
P2=0xff;
CSI1=0;
delay25us();
CSI1=1;
delay25us();
CSI1=0;
delay25us();
CSI1=1;
delay25us();
CSI1=0;
delay25us();
CSI1=1;
delay25us();
//开始计算时间
CSO1=1;
TH0=0;TL0=0;
TR0=1;
delay_100us(); //延时以消除误传
TR1=1;
while(!CSO1&&TH1<0xf6);
TR0=0;
TR1=0;
TH1=0;TL1=0;
time=TH0*255+TL0;
TR0=0;
TR1=0;
TH1=0;TL1=0;
if(time<500||time>3000)
return 1; //没检测到人返回1
else return 0;
}
int measure_time2(void)
{
unsigned int time=0;
P2=0xff;
CSI2=0;
delay25us();
CSI2=1;
delay25us();
CSI2=0;
delay25us();
CSI2=1;
delay25us();
CSI2=0;
delay25us();
CSI2=1;
delay25us();
//开始计算时间
CSO2=1;
TH0=0;TL0=0;
TR0=1;
delay_100us(); //延时以消除误传
TR1=1;
while(!CSO2&&TH1<0xf6);
TR0=0;
TR1=0;
TH1=0;TL1=0;
time=TH0*255+TL0;
TR0=0;
TR1=0;
TH1=0;TL1=0;
if(time<1000)
return 1;
else
return 0;
}
void main(void)
{
unsigned char a=0,b=0,c=0,d=0; //d用于清除c
P3_7=0; //控制信号给凌阳
TMOD=0x11;
while(1)
{
a+=measure_time(); // 没人加1
a+=measure_time();
a+=measure_time();
if(a==0) //(a<3)
{ a=0;
b+=measure_time2();//
b+=measure_time2();
b+=measure_time2();
d++;
if(b==3)
{ c++;
if(c==3)
{
P2=0xfd;
P3_7=1;
delay(100);
P3_7=0;
P0=table[c]; //显示
// delay_1s(60);
c=0;
}
else P2=0xfe;
}
if(d==3) //若三次中有又出现没有检测到就清除c
{
d=0;
c=0;
}
P0=table[c];
delay(500);
P3_7=0;
// P2=0xff;
}
delay(1000);
P2=0xff;
a=0;
b=0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -