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

相关推荐
猿~~~17 分钟前
STM32的HAL库开发---多通道ADC采集(DMA读取)实验
stm32·单片机·嵌入式硬件
Freak嵌入式1 小时前
开源一款I2C电机驱动扩展板-FreakStudio多米诺系列
嵌入式硬件·嵌入式·智能硬件·开源硬件·micropython·电机驱动·电子模块
kongba0072 小时前
Cursor提示词模板,开发GD32,C语言开发GD32 ARM单片机编程规范提示词 大厂风格代码规范
c语言·arm开发·单片机
LaoZhangGong1233 小时前
STM32的“Unique device ID“能否修改?
c语言·经验分享·stm32·单片机·嵌入式硬件
1101 11014 小时前
STM32-心知天气项目
stm32·单片机·嵌入式硬件
Ronin-Lotus4 小时前
嵌入式硬件篇---数字电子技术中的触发器
嵌入式硬件·fpga开发·触发器·数字电子技术·上位机知识
Ronin-Lotus5 小时前
嵌入式硬件篇---数字电子技术中的时序逻辑
单片机·嵌入式硬件·蓝桥杯·时序分析·数字电子技术
sinat_3607048215 小时前
STM32 看门狗
stm32·单片机·嵌入式硬件
亿道电子Emdoor15 小时前
【ARM】MDK如何生成指定大小的bin文件,并指定空区域的填充数据
arm开发·stm32·单片机
mftang15 小时前
STM32 CAN过滤器配置和应用方法介绍
stm32·单片机·嵌入式硬件