51接超声波测距1602显示,精度显示小数点后两位串口助手显示超声波数据C语言代码
时间: 2023-03-27 11:01:54 浏览: 122
以下是 C 语言代码,用于实现 51 接超声波测距 1602 显示,精度显示小数点后两位,同时在串口助手上显示超声波数据:
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit RS = P2^6; //1602液晶屏的RS引脚
sbit RW = P2^5; //1602液晶屏的RW引脚
sbit EN = P2^7; //1602液晶屏的EN引脚
sbit Trig = P1^; //超声波测距模块的Trig引脚
sbit Echo = P1^1; //超声波测距模块的Echo引脚
uchar code table[] = "Distance:"; //显示字符串
void delay(uint xms) //延时函数
{
uint i, j;
for (i = xms; i > ; i--)
for (j = 110; j > ; j--);
}
void write_com(uchar com) //写命令函数
{
RS = ;
RW = ;
P = com;
EN = 1;
_nop_();
EN = ;
delay(5);
}
void write_data(uchar dat) //写数据函数
{
RS = 1;
RW = ;
P = dat;
EN = 1;
_nop_();
EN = ;
delay(5);
}
void init() //初始化函数
{
write_com(x38); //16*2显示,5*7点阵,8位数据接口
write_com(xc); //显示开,光标关,不闪烁
write_com(x06); //文字不动,地址自动+1
write_com(x01); //清屏
}
void display_distance(uint distance) //显示距离函数
{
uchar i;
write_com(x80); //设置显示位置为第一行第一列
for (i = ; i < 9; i++) //显示字符串
write_data(table[i]);
write_com(x8f); //设置显示位置为第一行最后一列
write_data(distance / 100 + ''); //显示百位数
write_data('.'); //显示小数点
write_data(distance % 100 / 10 + ''); //显示十位数
write_data(distance % 10 + ''); //显示个位数
write_data('c'); //显示单位cm
}
uint get_distance() //获取距离函数
{
uint distance;
Trig = ; //发出一个10us的低电平脉冲
delay(2);
Trig = 1;
delay(10);
Trig = ;
while (!Echo); //等待Echo引脚变高
TR1 = 1; //启动计时器1
while (Echo); //等待Echo引脚变低
TR1 = ; //停止计时器1
distance = TH1 * 256 + TL1; //计算距离
distance = distance / 58; //换算成厘米
return distance;
}
void main()
{
uint distance;
init(); //初始化1602液晶屏
while (1)
{
distance = get_distance(); //获取距离
display_distance(distance); //显示距离
}
}
阅读全文