超声波.h

#include “delay.h”
#include “stc8a8k.h”

//说明
//这个程序,可以提供多个超声波模块的测距,例子中有3个测距
//如果需要删除,只有一个的话,需要将初始化函数的端口模式也进行相关的设置;
//使用的是定时器T0的计数模式,以及用到定时器T0的中断。需要进行中断的入口设置,以及中断优先级的设置
//如果用到其他的计数定时器,需要对初始化,以及计数的函数进行设置;
//尤其要注意:必须将超声波模块的每个接口,尤其是ECHO接口的引脚,的引线有效,不能线是坏的,不然会陷入死循环,不能跳出循环
sbit TRIG = P2^7;
sbit ECHO =P2^6;

sbit TRIG1 = P1^4;
sbit ECHO1 =P1^5;

sbit TRIG2 = P1^6;
sbit ECHO2 =P1^7;

extern float Sx;//这是计算得到的距离,单位是mm,晶振11.0592Mhz;
extern bit HCflag;

void HCSR04Init();//初始化函数,要记得把端口模式进行设置,定时器0和中断进行设置,计数模式,
void HCSR04Count(void);//
void HCSR04Start(char i);//i:第几个超声波模块,i:1-3,这个程序中是这样。
float ReadHCSR04(char i);//阅读超声波的距离,里面包括开始函数,所以直接使用就可以了。返回的结果是计算得到的距离数值。

。。。。。。。。。。。。
。。。。。。。。。。。使用实例

OLED_Init();
HCSR04Init();
delay_tms(100);

while(1)
{
numm=ReadHCSR04(0);
sprintf(disc,"%0.3f",numm);
OLED_ShowString(0,0, “8p:”);
OLED_ShowString(80,0, disc);

	 numm=ReadHCSR04(1);
	sprintf(disc,"%0.3f",numm);

	OLED_ShowString(80,1, disc);

// numm=ReadHCSR04(2);
// sprintf(disc,"%0.3f",numm);
// OLED_ShowString(80,2, disc);
// OLED_ShowFloatii(0,3,numm,33);

}

}

猜你喜欢

转载自blog.csdn.net/lmf666/article/details/102994073