关于超声波测距的个人小程序

超声波测距,并用1602显示!

 

#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit send=P1^0;
sbit RS=P3^6;
sbit EN=P2^0;
uchar i,test=0,flag1=0;
unsigned long int time,s;
uchar  table[]={0x00,'.',0x00,0x00,0x00,'m'};
uchar table1[]={"failed!"};


void delay(uint ii)
{
uint i,j;
for(i=0;i<ii;i++)
for(j=0;j<11;j++);
}


void write_command(uchar com)//写命令
{
 RS=0;
 P0=com;
 delay(1);
 EN=1;
 delay(1);
 EN=0;

}
void write_data(uint data1)//写数据
{
 RS=1;
 P0=data1;
 delay(1);
 EN=1;
 delay(1);
 EN=0;

}

void yejing_init()//初始化
{
EN=0;
write_command(0x38);
write_command(0x0c);
write_command(0x06);
write_command(0x01);
}


void yejingxianshi()
{
 if(test==1)
  {
 
   table[4]=s%10+0x30;
   table[3]=(s/10)%10+0x30;
   table[2]=(s/100)%10+0x30;
   table[0]=(s/1000)%10+0x30;
   
   write_command(0x80);
   for(i=0;i<=5;i++)
   {write_data(table[i]);}
  }
 if(test==0)
  {
    write_command(0x80+0x40);
    for(i=0;i<7;i++)
    {write_data(table1[i]);}
  }

}

 


void timer0_init()
{
TL0=0xfd;
TH0=0xff;
}


void timer0() interrupt 1 using 1
{
 TL0=0xfd;
 TH0=0xff;
 send=~send;
 flag1++;
  if(flag1==5)
  {
   TR0=0;
   TL0=0xfd;
   TH0=0xff;
   flag1=0;
  }


}
void timer1_init()
{
TH1=0;
TL1=0;
}
void timer1()interrupt 3 using 3
{
TR1=0;
TH1=0;
TL1=0;
test=0;

yejingxianshi();
}

 

void extern0() interrupt 0 using 0
{
TR0=0;
TR1=0;
test=1;
time=(TH1<<8)|TL1;
s=(170*time)/1000;  //单位为厘米
yejingxianshi();
TH1=0;
TL1=0;
}

 

void init()
{
TMOD=0x11;
EA=1;
ET0=1;
ET1=1;
EX0=1;
IT0=0;//INT0低电平检测
TR0=0;
TR1=0;
yejing_init();
timer0_init();
timer1_init();
}


void main()
{
init(); 
while(1)
 {
 yejing_init();
 TR0=1;
 TR1=1;
 EA=0;
// delay(1);
 EA=1;
 delay(9000);
 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值