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的分享

相关推荐
方案开发PCBA抄板芯片解密6 分钟前
什么是FIB,芯片解密为什么需要做FIB
单片机·嵌入式硬件
双古36 分钟前
单片机调试,Ozone的使用
单片机·嵌入式硬件
飞凌嵌入式1 小时前
AIoT出海背景下,嵌入式主控的国际认证之路与价值思考
大数据·人工智能·嵌入式硬件·区块链·嵌入式
进阶的猪1 小时前
stm32 GPIO输出-使用固件库点亮LED灯 Q&A
c语言·笔记·stm32·单片机
沐欣工作室_lvyiyi1 小时前
基于STM32单片机的冷链运输监测系统(论文+源码)
stm32·单片机·毕业设计·冷链运输监测系统
IT方大同2 小时前
KEY(按键)&BUZZ(蜂鸣器)
单片机·嵌入式硬件
zd8451015002 小时前
STM32多路步进电机控制板
单片机·嵌入式硬件
进阶的猪2 小时前
stm32 USART-中断回显实验 Q&A
stm32·单片机·嵌入式硬件
应用市场2 小时前
基于 C# WinForms 的 Windows 系统监控工具开发实战
windows·单片机·c#
@good_good_study2 小时前
STM32 通用定时器基础中断配置函数及实验
stm32·单片机