keil编写lcd1602显示hc-sr04超声波测距代码
时间: 2023-09-24 16:12:30 浏览: 137
好的,请稍等,我来为您查询资料。以下是keil编写lcd1602显示hc-sr04超声波测距代码的示范:
```
#include<reg52.h>
#include<intrins.h>
#include<string.h>
#include<math.h>
#define dat_port P0
#define addr_port P2
sbit rs=P2^6;
sbit rw=P2^5;
sbit en=P2^7;
sbit trig=P2^0;
sbit echo=P2^1; //定义引脚
unsigned char dis[5]; //存储距离数值
unsigned char buffer[10]; //存储距离字符串
unsigned int time;//定义时间变量
void delayms(int num)
{
int i,j;
for(i=0;i<num;i++)
for(j=0;j<120;j++);
}
void delayus(int us)
{
while(us--);
}
void write_cmd(unsigned char cmd)
{
rs=0;
rw=0;
dat_port=cmd;
en=1;
_nop_();
_nop_(); //等待2个机器周期
en=0;
delayus(50);
}
void write_dat(unsigned char dat)
{
rs=1;
rw=0;
dat_port=dat;
en=1;
_nop_();
_nop_(); //等待2个机器周期
en=0;
delayus(50);
}
void init_lcd(void)
{
write_cmd(0x38); //8位总线,2行显示,5*7字符
delayms(1);
write_cmd(0x01); //清屏
delayms(1);
write_cmd(0x0c); //光标不闪
}
void display(unsigned char *p)
{
unsigned int i;
for(i=0;i<strlen(p);i++)
{
write_dat(p[i]); //逐行显示
delayms(1);
}
}
void delay_10us() //0.1ms的延时程序
{
int i=1;
while(i--);
}
void send() //发送触发信号
{
trig=1;
delay_10us();
trig=0;
}
unsigned int get_time() //获取回波信号
{
unsigned int t=0;
while(!echo);
while(echo) //计算时间
{
t++;
delay_10us();
}
return t;
}
float get_dis(unsigned int t) //计算距离
{
float distance;
distance=t*0.1*340/2; //速度:340m/s,除以2是因为往返,0.1是计算单位换算
return distance;
}
void main()
{
init_lcd();
delayms(200);
while(1)
{
send();
time=get_time();
sprintf(dis,"%d ",time);//将时间转为字符串
display("Distance:");
display(dis);
display("cm");
delayms(2000);
write_cmd(0x01); //清屏
}
}
```
以上是Keil编写LCD1602显示HC-SR04超声波测距代码的示例,您可以参考并试着运行它。
阅读全文