hc-sr04c语言程序,HC-SR04超声波单片机源程序

#include

#include

#include"LCD1602.h"

sbit Trig=P1^0;

sbit Echo=P1^1;

bit  flag=0;

/*

---------------------

延时函数

---------------------

*/

void delay(unsigned int z)

{

unsigned int x,y;

for(x=z;x>0;x--)

for(y=400;y>0;y--);

}

/*

---------------------

超声波启动函数

---------------------

*/

void start()

{

int i;

Trig=0;                  //控制端初始状态拉低

Echo=0;                  //初始状态接收端置0

Trig=1;                  //控制端拉高,给一个高电平

for(i=0;i<20;i++)          //给至少10us的高电平

{

_nop_();                  //精确延时,推荐使用,在头文件intrins.h中

}

Trig=0;                  //将控制端拉低,触发条件完成

}

/*

---------------------

LCD1602显示函数

---------------------

*/

void LcdDisplay(unsigned int temp)

{

LCD1602_writebyte("The Distance is:");

LCD1602_write(0,0x80+0x41);

LCD1602_write(1,temp/1000+0x30);

LCD1602_write(1,temp%1000/100+0x30);

LCD1602_write(1,temp%100/10+0x30);

LCD1602_write(1,46);               //此处显示的是小数点.

LCD1602_write(1,temp%10+0x30);

LCD1602_write(1,0x43);             //此处显示的是C,16进制对应的ASCII的值

//LCD1602_write(1,67);               //十进制对应的ASCII值,此处显示的也是C

LCD1602_write(1,0x4d);               //此处显示的是M,16进制对应的ASCII的值

//LCD1602_write(1,77);               //十进制对应的ASCII值,此处显示的也是M

delay(400);

LCD1602_write(0,0x01);             //1602 清屏 指令

}

/*

---------------------

距离计算与显示函数

---------------------

*/

void count()

{

unsigned int time,timeH,timeL;

float distance,falseValue;

timeH=TH0;

timeL=TL0;

TH0=0;

TL0=0;

time=timeH*256+timeL;

distance=time*1.7/100;                     //distance=(time/2)*340m/s  time的单位是us转化为s等于time*10^(-6)        340m/s转化为cm是34000cm/s

//综合到一块就是:distance=17000*time*10^(-6)=time*1.7/100

distance=distance*10;                      //距离扩大10倍,为了能够精确到小数点后一位

if(distance<20 || distance>4500 || flag==0)

{

flag=1;

falseValue=8888;

LCD1602_write(0,0x80);

LCD1602_writebyte("Error!");

delay(200);

LCD1602_write(0,0x01);

delay(200);

LcdDisplay(falseValue);

}

else

{

LcdDisplay(distance);

}

}

/*

---------------------

主函数

---------------------

*/

void main()

{

LCD1602_cls();

while(1)

{

TMOD=0X11;

TH0=0;

TL0=0;

start();

while(!Echo);

TR0=1;

while(Echo);

TR0=0;

count();

delay(120);

}

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值