51单片机超声波测距并用1602液晶显示距离程序

51单片机超声波测距并用1602液晶显示距离程序
51单片机超声波测距并用1602液晶显示距离程序

#include

#include<2.h>

#include

#define uchar unsigned char

#define uint unsigned int

sbit rs=P3^5;

sbit wr=P3^6;

sbit lcden=P3^4;

void delay()//100us

{

uchar i,j;

for(i=0;i<1;i++)

for(j=0;j<30;j++); }

void write_command(uchar command) {

rs=0;

wr=0;

lcden=0;

P0=command;

lcden=1;

delay();

lcden=0;

}

void lcd_initial()

{

write_command(0x38);

write_command(0x0c);

write_command(0x06);

}

void write_data(uchar lcd_data)

{

rs=1;

wr=0;

lcden=0;

P0=lcd_data;

lcden=1;

delay();

lcden=0;

}

uchar shi,ge,bai;

int jia=0;//如果计数器满,则保存满值

unsigned long int num=0;//注意数据类型

sbit trig=P2^0;//定义发送引脚

sbit echo=P3^6;//定义接受回响信号引脚

void send()//发送声波

{

trig=1;

delay();

trig=0;

}

void main()

{

while(1)

{

TMOD=0x01;//定时器方式1

ET0=1;//允许T0中断

EA=1;//开启总中断

TH0=0;//装初值

TL0=0;

send();

while(!echo);//如果回响变为高电平则执行下一步

TR0=1;//启动定时器

while(echo);//等待回响结束

TR0=0;//关闭定时器

num=TH0*256+TL0+jia;

jia=0;

num=num*0.017*12/11;

lcd_initial();//液晶初始化

bai=num/100;

shi=num/10%10;

ge=num%10%10;

write_command(0x80+0x02);//地址

write_data(0x30+bai);

write_data(0x30+shi);

write_data(0x30+ge);

}

}

void Time0(void) interrupt 1//计数器满时,进入中断,jia用来保存满值{

jia=jia+65535;

TH0=0;

TL0=0;

}

相关主题
相关文档
最新文档