硬件设计
链接: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;
}