51单片机超声波测距l用cd1602显示程序
时间: 2023-08-31 15:06:22 浏览: 43
以下是基于51单片机的超声波测距并用cd1602显示的程序。
```c
#include<reg52.h>
#include<intrins.h>
#include<lcd1602.h>
#define uchar unsigned char //宏定义,用于简化代码
sbit Trig = P1^0; //定义超声波Trig引脚
sbit Echo = P1^1; //定义超声波Echo引脚
uchar distance; //定义距离变量
//延时函数,us级别
void delay_us(uchar i)
{
while(i--);
}
//延时函数,ms级别
void delay_ms(uchar i)
{
while(i--)
{
delay_us(245); //12MHz时钟下,延时1ms的实现
delay_us(245);
delay_us(245);
delay_us(245);
}
}
//超声波测距函数
void Ultrasonic()
{
uint T1,T2;
Trig = 1; //Trig引脚置1
delay_us(10); //延时10us
Trig = 0; //Trig引脚置0
while(!Echo); //等待Echo引脚变为1
TR1 = 1; //启动定时器
while(Echo); //等待Echo引脚变为0
TR1 = 0; //关闭定时器
T1 = TH1; //读取定时器高8位
T2 = TL1; //读取定时器低8位
distance = (T1*256+T2)/58; //计算距离
}
//主函数
void main()
{
Init_LCD(); //初始化LCD
while(1)
{
Ultrasonic(); //超声波测距
Lcd_Write_Com(0x80); //将光标移动到第1行第1列
Lcd_Write_String("Distance:"); //LCD上显示“Distance:”
Lcd_Write_Com(0x8A); //将光标移动到第1行第11列
Lcd_Write_Dat(distance/10+48); //显示距离的十位
Lcd_Write_Dat(distance%10+48); //显示距离的个位
Lcd_Write_String("cm"); //LCD上显示“cm”
delay_ms(200); //延时200ms
}
}
```
这是基本的程序框架,具体实现需要根据你所选用的超声波模块型号及LCD1602驱动库进行适当修改。