51单片机项目设计:超声波测距、智能小车(keil+proteus)带仿真

项目采用51单片机控制超声波传感器进行测距,实时显示距离并通过串口发送数据。小车搭载L298N电机驱动,按键控制移动,实现自动测距与轮廓绘制。

超声波测距小车

资料链接:51单片机超声波测距.rar
链接:https://pan.baidu.com/s/1rEJR5DYoAz_lJZHWJy9sOg
提取码:abcd
取走点赞哦~

项目展示:
在这里插入图片描述
仿真展示 :
在这里插入图片描述

一、项目要求

(一)项目内密

本课题的主要内容是,将超声波传感器安装在一台沿直线行走的小车上,由AT89C51 控制超声波传感器,发出超声信号,记录超声液从发射到接收的所需要的时间,得到其与|被测物体之间的能离。在小车行走的过程中,不断重复测距,得到一组距离数据。由单片机记录测得的距离,经过数据处理,将其显示在液晶屏上。同时,将一组距离数据,由串口传到上位机,由VB程序保存距离数据,并画出曲线,就得到了被测物体的单边轮廓。

(二)课题研究方需

超声波测距仪系统主要由单片机最小系统、超声波模块、LCO显示电路及电源电路组成。系统的主要功能如下:

超声波传感器发射和接收超声波,依据计时时间测量出与被测物体之间的矩离。

AT89CS51单片机作为主控制器,控制超声波信号的发送和接收,可以用来控制发射模块脸发脉冲的开始时间和脉宽,响应接受超声波返回时刻并进行测量和计数发射到返回的时间间隔。

液晶屏显示器实时显示测量距离。

上位机串口通讯,接收距离数据,利用VB程序把则好的距离记下并画出曲线,还原轮那曲线,从而实现通过超声波来测量物体单边轮常测量。

二、项目设计

(一)项目设计思想

1、使用HC-SR04超声波传感器模块测量距离
2、使用LCD1602液晶显示屏显示实时测量距离
3、使用L298N电机驱动,驱动两个电机运转,设置一个按键,按下按键,小车前进一段距离
4、开启串口通信,把距离数据通过串口发送到电脑进行处理

(二)购买材料
1、智能小车底盘
在这里插入图片描述
2、L298N
在这里插入图片描述
3、超声波模块HC-SR04
在这里插入图片描述
4、液晶屏 LCD1602
在这里插入图片描述
再准备一些其他小元件就OK,单片机最小系统、洞洞板、按键、插座等

(三)先设计硬件
根据原理图设计硬件
在这里插入图片描述
这是我设计好的实物图
在这里插入图片描述
在这里插入图片描述

(四)编写代码
main.c

/********************************************
项目名称:51超声波测距
作者:化作尘
版本:V1.1
更新时间:V1.0 2020年4月12日18:28:02
	      V1.1 2020年4月23日13:35:00
邮箱:2809786963@qq.com
*********************************************/

#include "reg52.H"//器件配置文件
#include"lcd.h"
//SR04传感器接口
sbit RX  = P3^2;
sbit TX  = P3^3;
sbit key  = P1^4;
char keymode=0;   //按键 模式
int keycount=0;  //小车运动延时控制

//变量声明
unsigned int  time=0;
unsigned long S=0;

char Mode=0;
bit  flag=0;
bit flag_KEY=0;
unsigned char act[]={
   
   0xff,0xfa,0xf5,0xf9,0xf6};	  //小车动作控制
unsigned char disbuff[4]	   ={
   
   0,0,0,0};		 //缓存数组用于存放距离信息
/***************************************************************************/
//延时
void delay_ms(unsigned int m)
{
   
   
    unsigned int b,c;
    for(c=0;c<m;c++)
        for(b=0;b<120;b++);
}
//短延时
void delay(unsigned int t)
{
   
   
	while(t--);
}
/***************************************************************************/
void Key(void)//按键扫描函数
{
   
   
	key = 1;
	delay_ms(1);
	if(key==0)		  //检测按键K1是否按下	   开关
	{
   
   	
			delay_ms(10);   //消除抖动 一般大约10ms
			if(key==0)	 //再次判断按键是否按下
			{
   
   
				keymode++;
				if(keymode == 2)keymode = 0;
				
			}
			while(!key)
评论 38
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

化作尘

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

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

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

打赏作者

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

抵扣说明:

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

余额充值