基于51单片机的搬运机器人系统protues仿真

硬件设计

链接:https://pan.baidu.com/s/1jxA6XBvbBPBtyn5aH9NTVQ
提取码:vjyo
在这里插入图片描述

代码设计

#include<reg52.h>
#include"config.h"
#include"key.h"
#include"LCD1602.h"

uint Volume; //定义变量 :物体的体积
uint Height;  //定义变量 :物体的高度
uchar JixiebiCount;	// 机械臂开始夹取物块标志位
uchar ChelunCount;  //机器车开始搬运物块标志位
uint count;	   //定时器计数变量
uint Distance; //定义变量 :已经搬运的距离
uchar StartTransferFlag;  //开始搬运物块标志位
uchar OverFlag;	   //本次搬运完成标志位
uchar StopJixiebiFlag;	//机械臂减速标志位
uchar StopChelunFlag;  //机器车减速标志位
uchar LayJixiebiFlag;  // 机械臂开始把物块从机器车上放下来 标志位
uchar StopLayJixiebi;  // 机械臂放下来 减速标志位
uchar ReturnFlag;//定义机器车回去标志位
uchar ReturnStop;  //机器车回去的减速标志位
uchar ComeCount,ReturnCount=100; //前往目的地的里程计数  回来的里程计数

void  Key_Scan(uchar mode)
{	 
	static uchar key_up=1;//按键按松开标志
	if(mode)
		key_up=1;  //支持连按		  
	if( key_up && (HeightPlus == 0 || HeightSub == 0 || VolumePlus == 0 ||VolumeSub == 0))
	{
		delayms(6);//去抖动 
		key_up=0;

		if(HeightPlus == 0)	//设置高度加按键
		 	Height++;
		else if(HeightSub == 0 && Height >0) 	//设置高度减 按键
			Height--;
		else if(VolumePlus == 0)   //设置的体积加按键
			Volume++;
		else if(VolumeSub == 0 && Volume > 0) //设置的体积减  按键
			Volume--;

	}    
}

void StartKeyScan(void)
{
	if(StartMesure == 0)   //检测是否按下开始测量物块的按键
	{
		delayms(6);//去抖动 
		if(StartMesure == 0)
		{
			while(!StartMesure);
			Volume = 0;
			Distance = 0;
			Height = 0;
			JixiebiCount = 0;
			OverFlag = 0;
		}
	}

	if(StartTransfer == 0 )  //检测是否按下开始搬运物块的按键
	{
		delayms(6);//去抖动 
		if(StartTransfer == 0 && Volume > 0 && Height >0)
		{
			while(!StartTransfer);
			StartTransferFlag = 1;
		}
	}
}

void deal()
{
	if(StartTransferFlag == 1)	//开始搬运了
	{
		JixiebiCount = 1;	 //机械臂先开始抓取物块放到车上
		ChelunCount = 0;
		TR0 = 1;//启动定时器0
		StartTransferFlag = 0;
		OverFlag = 0;
		StopJixiebiFlag = 0;

	}
	if(JixiebiCount == 1)
		RunJixiebi();  //模拟机械臂的电机开始动
	else
		StopJixiebi();	//模拟机械臂的电机停转

	if(StopJixiebiFlag == 1)
		ReJixiebi();	 //模拟机械臂的电机减速

	if(ChelunCount == 1)
		RunChelun();	 //模拟机器车的电机开始动
	else
		StopChelun();	 //模拟机器车的电机停转
	
	if(StopChelunFlag == 1)
		ReChelun();		   //模拟机器车的电机减速

	 if(LayJixiebiFlag == 1 ) //机械臂开始抓取物块放到目的地
		RunJixiebi();

	 if(StopLayJixiebi == 1)
	 	ReJixiebi();

	 if(ReturnFlag == 1)
		RunChelun();

	 if(ReturnStop == 1)
		ReChelun();


	if(OverFlag)
	{
		beep = 0;
		delayms(200);
		beep = 1;
	}		
}

void RunJixiebi(void) //模拟机械臂的电机开始动
{
	Jixiebi_IN1 = 1;
	Jixiebi_IN2 = 0;
}

void StopJixiebi(void) 	//模拟机械臂的电机停转
{
	Jixiebi_IN1 = 0;
	Jixiebi_IN2 = 0;
}

void StopChelun(void) //模拟机器车的电机停转
{
	Chelun_IN1 = 0;
	Chelun_IN2 = 0;
}


void ReJixiebi(void)  //模拟机械臂的电机减速
{
	Jixiebi_IN1 = 0;
	Jixiebi_IN2 = 1;
}

void ReChelun(void)	   //模拟机器车的电机减速
{
	Chelun_IN1 = 0;
	Chelun_IN2 = 1;
}

void RunChelun(void)  //模拟机器车的电机开始动
{
	Chelun_IN1 = 1;
	Chelun_IN2 = 0;
}

  • 1
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值