51单片机超声波测距l用cd1602显示程序
时间: 2023-08-31 10:06:22 浏览: 82
以下是基于51单片机和CD1602液晶屏的超声波测距程序:
```c
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit RS=P1^0; //定义1602的接口
sbit RW=P1^1;
sbit EN=P1^2;
uchar Flag=0; //定义标志位
uchar TimeHigh,TimeLow; //定义高低电平时间
uint Distance; //定义距离
void Delay10us() //10us延时函数
{
_nop_();
_nop_();
_nop_();
}
void Delay100us() //100us延时函数
{
uchar i,j;
for(i=2;i>0;i--)
{
for(j=15;j>0;j--)
{
Delay10us();
}
}
}
void Init1602() //初始化1602函数
{
EN=0;
RS=0;
RW=0;
P0=0x38;
EN=1;
Delay100us();
EN=0;
P0=0x0c;
EN=1;
Delay100us();
EN=0;
P0=0x06;
EN=1;
Delay100us();
EN=0;
P0=0x01;
EN=1;
Delay100us();
EN=0;
P0=0x80;
EN=1;
Delay100us();
EN=0;
}
void Write1602(uchar dat,uchar com) //写命令函数
{
EN=0;
RS=0;
RW=0;
P0=com;
EN=1;
Delay10us();
EN=0;
Delay10us();
EN=1;
P0=dat;
Delay10us();
EN=0;
}
void InitTimer() //初始化定时器函数
{
TMOD=0x01;
TH0=0;
TL0=0;
ET0=1;
TR0=1;
}
void Timer0() interrupt 1 //定时器中断函数
{
if(Flag==0)
{
TH0=0;
TL0=0;
Flag=1;
Write1602('M',0x80);
Write1602('e',0x81);
Write1602('a',0x82);
Write1602('s',0x83);
Write1602('u',0x84);
Write1602('r',0x85);
Write1602('i',0x86);
Write1602('n',0x87);
Write1602('g',0x88);
}
else
{
TR0=0;
Distance=(TimeHigh*256+TimeLow)*0.017; //计算距离
Write1602('D',0xc0);
Write1602('i',0xc1);
Write1602('s',0xc2);
Write1602('t',0xc3);
Write1602(':',0xc4);
Write1602(Distance/100+0x30,0xc5);
Write1602(Distance%100/10+0x30,0xc6);
Write1602(Distance%10+0x30,0xc7);
Write1602('c',0xc8);
Write1602('m',0xc9);
Flag=0;
TR0=1;
}
}
void main()
{
Init1602();
InitTimer();
while(1)
{
Write1602('T',0x80);
Write1602('r',0x81);
Write1602('i',0x82);
Write1602('g',0x83);
Write1602('g',0x84);
Write1602('e',0x85);
Write1602('r',0x86);
Write1602(':',0x87);
Write1602('O',0xc0);
Write1602('K',0xc1);
Delay100us();
P3=0x01;
Delay100us();
P3=0x00;
while(!P3);
TH0=0;
TL0=0;
while(P3);
TimeHigh=TH0;
TimeLow=TL0;
}
}
```
说明:
本程序使用了51单片机的定时器和外部中断功能,通过超声波传感器测量距离,并将结果显示在CD1602液晶屏上。
程序首先进行了1602的初始化,然后开启定时器中断,进入主循环。
主循环中,先将“Trigger:OK”显示在1602上,然后向超声波传感器发送触发信号,等待接收到回波信号后,读取定时器的计数值,通过计算得到距离,并将结果显示在1602上。
需要注意的是,本程序使用了10us和100us的延时函数,如果在其他单片机上运行可能需要对延时函数进行修改。同时,超声波传感器的引脚连接也需要根据具体型号的引脚定义进行修改。
阅读全文