📄 超声波测距.c
字号:
#include <reg51.h>
#include "mtv230m.h"
unsigned char xdata af1;
unsigned char xdata af2;
unsigned char xdata af3;
unsigned char xdata af4;
unsigned char xdata af5;
unsigned char xdata af6;
unsigned char xdata af7;
unsigned char xdata af8;
unsigned char xdata af9;
unsigned char xdata af10;
unsigned char xdata af11;
unsigned char xdata af12;
unsigned char xdata af13;
char ufb;
char fbr;
unsigned int data juli;//回波距离
unsigned int julisz[9];
unsigned int pu;//平均距离
bit julicc;//超出范围标志
bit fs_yk;//发射和遥控标志=1为发射
bit jsf;//接收到回波标志
bit jsfa;//接收到回波溢出标志
bit yk_bz;//遥控标志
void int0() interrupt 0 using 0//计算超声波发射距离
{
unsigned char w;
unsigned char b;
unsigned char j;
unsigned int ds[9];
unsigned int k;
ufb=0;
EX0=0;
TR1=0;
julisz[8]=julisz[7];
julisz[7]=julisz[6];
julisz[6]=julisz[5];
julisz[5]=julisz[4];
julisz[4]=julisz[3];
julisz[3]=julisz[2];
julisz[2]=julisz[1];
julisz[1]=julisz[0];
julisz[0]=juli;
ds[0]=julisz[0];ds[1]=julisz[1];ds[2]=julisz[2];ds[3]=julisz[3];
ds[4]=julisz[4]; ds[5]=julisz[5];ds[6]=julisz[6];ds[7]=julisz[7];ds[8]=julisz[8];
for(b=0;b<8;b++)
{
w=b;
for(j=b+1;j<9;j++)
if(ds[j]<ds[w])w=j;
k=ds[w];ds[w]=ds[b];ds[b]=k;
}
pu=(ds[3]+ds[4]+ds[5])/3;
af1=af2;af2=af3;af3=af4;af4=af5;af5=af6;af6=af7;
af7=af8;af8=af9;af9=af10;af10=af11;af11=af12;af12=af13;af13=pu;
if(af1>af2)
ufb=ufb+1;
else if(af1<af2)
ufb=ufb-1;
else ;
if(af2>af3)
ufb=ufb+1;
else if(af2<af3)
ufb=ufb-1;
else ;
if(af3>af4)
ufb=ufb+1;
else if(af3<af4)
ufb=ufb-1;
else ;
if(af4>af5)
ufb=ufb+1;
else if(af4<af5)
ufb=ufb-1;
else ;
if(af5>af6)
ufb=ufb+1;
else if(af5<af6)
ufb=ufb-1;
else ;
if(af6>af7)
ufb=ufb+1;
else if(af6<af7)
ufb=ufb-1;
else ;
if(af7>af8)
ufb=ufb+1;
else if(af7<af8)
ufb=ufb-1;
else ;
if(af8>af9)
ufb=ufb+1;
else if(af8<af9)
ufb=ufb-1;
else ;
if(af9>af10)
ufb=ufb+1;
else if(af9<af10)
ufb=ufb-1;
else ;
if(af10>af11)
ufb=ufb+1;
else if(af10<af11)
ufb=ufb-1;
else ;
if(af11>af12)
ufb=ufb+1;
else if(af11<af12)
ufb=ufb-1;
else ;
if(af12>af13)
ufb=ufb+1;
else if(af12<af13)
ufb=ufb-1;
else ;
if(ufb>9)
{
fbr=10;
af1=0;af2=0;af3=0;af4=0;af5=0;af6=0;
af7=0;af8=0;af9=0;af10=0;af11=0;af12=0;af13=0;
}
else if(ufb<9)
{
fbr=-10;
af1=0;af2=0;af3=0;af4=0;af5=0;af6=0;
af7=0;af8=0;af9=0;af10=0;af11=0;af12=0;af13=0;
}
else ;
jsf=1;
}
void timer0() interrupt 1 using 1//发射和遥控
{
yk_bz=0;//启动进入遥控
}
void timer1() interrupt 3 using 3
{
if(juli>4000)
{
julicc=1;
juli=0xffff;//超出量程
jsfa=1;
TR1=0;
}
else juli=juli+1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -