基于51单片机的超声波测距系统设计

功能:

超声波测距仪,测量距离,用LCD12864显示信息。 lcd_writestr(0,0," 超声波测距仪 "); lcd_writestr(1,0,"********"); lcd_writestr(2,0,"当前被测距离为:"); lcd_writestr(3,0," 厘米 ");

原理图:

/*****************************************************

                                                       

* 功能:超声波测距

******************************************************/

#include <reg52.h>

#include "intrins.h"

#include "12864LCDdriver.h"

#define uchar unsigned char

#define uint unsigned int

#define ulong unsigned long int

#define V=173

sbit CSOut=P1^7;

sbit Start=P1^4;

ulong TIME;

uchar DISTANCE;

uchar code discode[11]={'0','1','2','3','4','5','6','7','8','9',' '};

ulong data disnum[5];

bit data ReceiveOK=0;

bit data TOut;

bit data FLAG;

/*********************************************************

* 函数名称:void delay2(uchar x)

* 功    能:延时函数

* 入口参数:无

* 出口参数:无

*********************************************************/

void delay2(uchar x)

{

 uchar a,b;

 for(a=0;a<x;a++)

  for(b=0;b<255;b++);

}

/*********************************************************

* 函数名称:void init(void)

* 功    能:初始化

* 入口参数:无

* 出口参数:无

*********************************************************/

void init(void)

{

 lcd_init();//LCD初始化,开机调用一次

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

 IT0=0;//INT0负边沿触发

 IP=0x01;//INT0高优先级

 EA=1;//开总中断

}

/*********************************************************

* 函数名称:

* 功    能:超声波发射函数

* 入口参数:无

* 出口参数:无

*********************************************************/

void CCOut(void)

{

 TR0=1;

//40KHz

 CSOut=0;//1

 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();

 _nop_();_nop_();

 CSOut=1;//2

 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();

 _nop_();

 CSOut=0;//3

 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();

 _nop_();_nop_();

 CSOut=1;//4

 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();

 _nop_();

 CSOut=0;//5

 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();

 _nop_();_nop_();

 CSOut=1;//6

 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();

 _nop_();

 CSOut=0;//7

 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();

 _nop_();_nop_();

 CSOut=1;//8

 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();

 _nop_();

 CSOut=0;//9

 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();

 _nop_();_nop_();

 CSOut=1;//10

 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();

 _nop_();

 CSOut=0;//11

 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();

 _nop_();_nop_();

 CSOut=1;//12

}

/*********************************************************

* 函数名称:void DataProcess(void)

* 功    能:数据处理函数

* 入口参数:无

* 出口参数:无

*********************************************************/

void DataProcess(void)

{

  ulong time=0;

  TIME=TH0;

  TIME=(TIME<<8)|TL0;

  TIME*=173;//距离

  TIME=TIME/10000;//单位:CM

  disnum[0]=(uchar)TIME%10;        //个位

  disnum[4]=TIME/10;

  disnum[1]=(uchar)disnum[4]%10;//十位

  disnum[4]=disnum[4]/10;

  disnum[2]=(uchar)disnum[4]%10;//百位

  disnum[4]=disnum[4]/10;

  disnum[3]=(uchar)disnum[4]%10;//千位

}

/*********************************************************

* 函数名称:void TimeOut(void) interrupt 1

* 功    能:超时处理函数 T0

* 入口参数:无

* 出口参数:无

*********************************************************/

void TimeOut(void) interrupt 1

{

 TR0=0;

 ET0=0;

 EX0=0;

 ReceiveOK=0;

 TOut=1;

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白茶丫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值