非常简洁!可直接调用!!!
单片机源程序如下:
- #include "STC15Fxxxx.H"
- #include "hc_sr04.h"
- u16 time=0;
- u16 timer=0;
- bit flag =0;
- void Delay45us() //@11.0592MHz
- {
- unsigned char i;
- i = 122;
- while (--i);
- }
- //========================================================================
- // 函数: HC_SR04_Init()
- // 描述: 初始化HC_SR04所需硬件。
- // 参数:
- // 返回: none.
- //========================================================================
- void HC_SR04_Init()
- {
- TMOD |= 0x01; //定时器0 16位不可重装模式
- TH0 = 0x00; // 设置定时初值
- TL0 = 0x00; //设置定时初值
- TR0=1;
- ET0=1;
- EA=1;
- }
- //========================================================================
- // 函数: HC_SR04_Start()
- // 描述: 开始发送声波。
- // 参数:
- // 返回: none.
- //========================================================================
- void HC_SR04_Start()
- {
- Trig_Pin = 0;
- Delay45us();
- Trig_Pin = 1;
- }
- //========================================================================
- // 函数: int HC_SR04_Loop()
- // 描述: 返回距离。
- // 参数:
- // 返回: distance:距离(单位:厘米).
- //========================================================================
- int HC_SR04_Loop()
- {
- int distance;//distance|距离
- HC_SR04_Start();
- while(!Echo_Pin); //Wait when RX is zero|当RX为零时等待
- TR0=1; //Opening count|开启计数
- while(Echo_Pin); //When RX counts to 1 and waits|当RX为1计数并等待
- TR0=0; //Closing count|关闭计数
- time=TH0*256+TL0;
- TH0=0;
- TL0=0;
- distance=(time*1.87)/100; //算出来是CM
- if(flag==1) //超出测量
- {
- flag=0;
- distance=0;
- }
- return distance;
- }
- void zd0() interrupt 1 //T0中断用来计数器溢出,超过测距范围
- {
- flag=1; //中断溢出标志
- }
复制代码
所有资料51hei提供下载:
HC_SR04.zip
(60.9 KB, 下载次数: 75)
|