61 基于单片机的小车雷达避障及阈值可调

所有仿真详情导航:

PROTEUS专栏说明-CSDN博客

目录

一、主要功能

二、硬件资源

三、主程序编程

四、资源下载


一、主要功能

基于51单片机,采用超声波传感器检测距离,通过LCD1602显示屏显示,三个按键,第一个按键是切换模式,切换到阈值设置,两个按键负责阈值增减,初始阈值设置为20,如果低于20,则蜂鸣器报警,继电器断开,电机停止转动,高于阈值,则停止报警,继电器吸合,电机转动。

具体动态效果看B站演示视频(高清需要跳转到B站看)

基于单片机的小车雷达避障及阈值可调

二、硬件资源

基于KEIL5编写C++代码,PROTEUS8.15进行仿真,全部资源在页尾,提供安装包。

三、主程序编程

cpp 复制代码
#include <REGX52.H>
#include <intrins.h>
#include <stdio.h>
#include "Delay.h"
#include "LCD1602.h"
#define uchar unsigned char
#define uint unsigned  int
typedef unsigned char u8;
typedef unsigned int  u16;
typedef unsigned char uint8;
typedef unsigned int uint16;
typedef unsigned long uint32;


sbit Tr=P3^0;//触发信号
sbit Ec=P3^1;//回响信号
sbit beep=P2^7;
sbit key1 = P1^0;
sbit key2 = P1^1;
sbit key3 = P1^2;
sbit motor = P1^3;
uchar Recv_Buffer[4];
uint Voltage[]={'0','0','0','0'};
bit bdata IIC_ERROR;
  
unsigned int distance;
static unsigned char num;

unsigned int Read_value(void);//读值函数
unsigned int jlyz=20;
static int moshi = 0;

void Delay10us(void);//10us延时函数
void cslsz(void);

void Time0_Init()          //定时器初始化
{
    TMOD = 0x01;
    TH0 = 0x00;
    TL0 = 0x00;
    TR0 = 0;//先关闭定时器0
}

void Time0_Int() interrupt 1 //中断程序
{
   TH0  = 0xfe;             //重新赋值
   TL0  = 0x33;
}

unsigned int Read_value()
{
	uint result;
	Tr=1;//触发引脚发出11us的触发信号(至少10us)
	Delay10us();
	Tr=0;
	while(!Ec);//度过回响信号的低电平
	TR0=1;//开启定时器0
	while(Ec);//度过回响信号高电平
	TR0=0;//关闭定时器0
	result=((TH0*256+TL0)*0.034)/2;		// 距离cm=(时间us * 速度cm/us)/2
	return result + 2;	//+2修正补偿	
}

void main()					  //主函数
{	
	Tr=0;//出发引脚首先拉低
	LCD_Init();         //显示屏初始化
	Time0_Init();	   //定时初始化
	LCD_ShowString(1,1,"-----kaiji-----");
	Delay(1000);
	LCD_Init();
	LCD_ShowString(1,1,"yuzhi:");
	LCD_ShowString(2,1,"distance:");
	while(1)
	{
		Delay(200);
			cslsz();//按键判断
		  distance = Read_value();//读值
		distance = distance-1;
	    LCD_ShowNum(2,10,distance,3);
		  LCD_ShowNum(1,7,jlyz,3);
		if(moshi == 0) //判断
		{
			if(distance < jlyz)
			{
				beep = 1;
				motor = 1;
				
			}
			else
			{
				beep = 0;
				motor = 0;
			}
		}
	}
}

void cslsz()
{
	
	if(!key1)
	{
		moshi++;
		if(moshi>1)moshi=0;
		while(!key1);
	}
	if(!key2)
	{
		if(moshi==1)
		jlyz++;
		while(!key2);
	}
	if(!key3)
	{
		if(moshi==1)
		jlyz--;
		while(!key3);
	}
}



void Delay10us()
{
	TL0=0xF5;
	TH0=0xFF;
	TR0=1;
	while (TF0==0);
	TR0=0;
	TF0=0;
}

四、资源下载

全部资料(源程序、仿真文件、安装包、演示视频):

链接: https://pan.baidu.com/s/1Tiy7k1Fqj31cTDXlXew8AQ?pwd=vhh9 提取码: vhh9

--来自百度网盘超级会员v4的分享

相关推荐
一路往蓝-Anbo20 小时前
第五篇:硬件接口的生死劫 —— GPIO 唤醒与测量陷阱
c语言·驱动开发·stm32·单片机·嵌入式硬件
逑之21 小时前
C语言笔记16:文件操作
c语言·笔记·单片机
2401_863326111 天前
基于单片机智能光控路灯设计
单片机·嵌入式硬件
清风6666661 天前
基于单片机的球类比赛专用计分与暂停管理系统设计
单片机·嵌入式硬件·毕业设计·课程设计
Y1rong1 天前
STM32之时钟
stm32·单片机·嵌入式硬件
yuanmenghao1 天前
自动驾驶中间件iceoryx - 同步与通知机制(二)
开发语言·单片机·中间件·自动驾驶·信息与通信
斌蔚司李1 天前
Windows 电源高级选项
windows·stm32·单片机
钿驰科技1 天前
TC-BL2840驱动板在3D打印美甲仪无刷电机的应用
单片机·嵌入式硬件
llilian_161 天前
相位差测量仪 高精度相位计相位差测量仪的应用 相位计
大数据·人工智能·功能测试·单片机
A-花开堪折1 天前
Qemu-NUC980(十一):SPI Controller
linux·arm开发·驱动开发·嵌入式硬件