基于51单片机超声波测距并用lcd1602显示距离的代码
时间: 2023-09-01 17:11:06 浏览: 136
以下是基于51单片机的超声波测距并用LCD1602显示距离的代码,你可以参考一下:
```c
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit RS=P2^6;
sbit RW=P2^5;
sbit EN=P2^7;
//函数声明
void init();
void write_com(uchar com);
void write_data(uchar date);
void delayms(uint xms);
void delayus(uint xus);
uint read_distance();
void main()
{
uchar distance[5];
uint dis=0;
init();
while(1)
{
dis=read_distance();
sprintf(distance,"%d",dis);
write_com(0x80);
write_data('D');
write_data('i');
write_data('s');
write_data('t');
write_data(':');
write_data(distance[0]);
write_data(distance[1]);
write_data(distance[2]);
write_data(distance[3]);
write_data('c');
write_data('m');
delayms(500);
}
}
//初始化函数
void init()
{
write_com(0x38); //设置数据位数和显示模式
write_com(0x0c); //显示开,光标关,光标不闪
write_com(0x06); //文字不动,地址自动+1
write_com(0x01); //清屏
delayms(5);
}
//写命令函数
void write_com(uchar com)
{
RW=0;
RS=0;
P0=com;
EN=1;
delayus(5);
EN=0;
}
//写数据函数
void write_data(uchar date)
{
RW=0;
RS=1;
P0=date;
EN=1;
delayus(5);
EN=0;
}
//延时函数
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=114;j>0;j--);
}
void delayus(uint xus)
{
while(xus--);
}
//读取距离函数
uint read_distance()
{
uint time=0;
uint distance=0;
TR1=1;
P1=0xfe;
delayus(10);
P1=0xff; //发送一个脉冲
while(!P1_0); //等待超声波发射
TR0=1; //开启计时器
while(P1_0); //等待超声波返回
TR0=0; //关闭计时器
time=TH0<<8|TL0; //计时器计数值
distance=time*0.017; //计算距离
TH0=0;
TL0=0; //计时器清零
return distance;
}
```
这是一个基本的超声波测距程序,你可以根据自己的需要进行修改和完善。
阅读全文