/***原点归零,恢复出厂,手动动作 ******/
/********STC8A4K16S2A12K16S*关闭夹具 ***/
/*****L804 CODE5188 2021 2 23*********/
#include <REG52.H>
#include <intrins.h>
#include <string.h>
#include "stdio.h"
#include <stdlib.h>
#define uchar unsigned char
#define uint unsigned int
#define CMD_IDLE 0 //空闲模式
#define CMD_READ 1 //IAP字节读命令
#define CMD_PROGRAM 2 //IAP字节编程命令
#define CMD_ERASE 3 //IAP扇区擦除命令
#define ENABLE_IAP 0x82 //if SYSCLK<12MHz 根据频率设置参数
#define IAP_ADDRESS_0 0x2200 //EEPROM首地址 parameter参数
uint a[10]; //定义数组a 存储串口数据串
bit Receive_Flag=0; //串口数据接收标志
bit Up_XData=0; //原点更新标志,X发生中断置一,回主程序更新XZ轴位置
bit Up_ZData=0; //原点更新标志,Z发生中断置一,回主程序更新XZ轴位置
sbit INT0PUT=P3^2; //外部中断0原点定位
sbit INT1PUT=P3^3; //外部中断1原点定位
sbit INTPUT1=P3^4; //
sbit INTPUT2=P3^5; //
sbit ClampingStop=P3^6; //夹紧 输入
sbit ReleaseStop=P3^7; //释放 输入
sbit LED0=P2^1;
sbit LED1=P4^2;
sbit LED2=P2^0;
sbit LED3=P4^1;
sbit Turntable=P4^3; //Y7 转盘输出 发信号给排列控制板
sbit PutterForword=P4^0; //Y0 推杆前进 发信号给排列控制板
sbit PutterBack=P5^5; //Y1 推杆后退 发信号给排列控制板
sbit ClampingOut=P2^6; //夹紧 输出
sbit ReleaseOut=P2^7; //释放 输出
sbit X_MTORCP=P2^5; //CP1 X轴脉冲
sbit X_MTORECT=P2^4; //D1 X轴方向
sbit Z_MTORCP=P2^3; //CP2 Z轴脉冲
sbit Z_MTORECT=P2^2; //D2 Z轴方向
bit X_ZEROFLAG; /*X_零点标志01*/
bit Z_ZEROFLAG; /*Z_零点标志01*/
bit MOTORRUN; //伺服电机 推杆 1启动,0停止
uint RETDATA; //串口数据校对
uint X_Origin; //X轴原点
uint Z_Origin; //Z轴原点
uint X_AxialPostion; //X轴位置
uint Z_AxialPostion; //Z轴位置
uint X_TotalLength; //X轴总长
uint Z_TotalLength; //Z轴总长
uint ProductThickness; //产品厚度
uint LayerNumber; //装箱层数
uint LeftSpeed; //左移速度
uint RightSpeed; //右移速度
uint UpSpeed; //上行速度
uint DownSpeed; //下行速度
uint X_OriginSpeed; //X轴原点速度
uint Z_OriginSpeed; //Z轴原点速度
uint X_ScaleFactor; //X轴比例系数
uint Z_ScaleFactor; //Z轴比例系数
uint counter; //产量计数器
uchar kcounter,kstatus; //按键计数标志 按键状态标志
uint Data_val;
uint aa=0;
uchar StopFlag; //
uint i; //定义数组array 存储工位数据
typedef uchar BYTE;
typedef uint WORD;
void IapIdle();
BYTE IapReadByte(WORD addr);
/*------------------延时子程序------------------------*/
void delay50us(uchar x) //@12.000MHz 50us
{
uint i,j;
for(i=0;i<x;i++)
for(j=0;j<2;j++);
}
/*------------------延时子程序------------------------*/
void delay(uint t)
{
uint i,j;
for(i=0;i<t;i++)
for(j=0;j<5;j++);
}
/*---------------延时子程序----------------*/
void delay1(uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<10;j++)
;
}
/*----关闭IAP----------------------------*/
void IapIdle()
{
IAP_CONTR = 0; //关闭IAP功能
IAP_CMD = 0; //清除命令寄存器
IAP_TRIG = 0; //清除触发寄存器
IAP_ADDRH = 0x80; //将地址设置到非IAP区域
IAP_ADDRL = 0;
}
/*-从ISP/IAP/EEPROM区域读取一字节-*/
BYTE IapReadByte(WORD addr)
{
BYTE dat; //数据缓冲区
IAP_CONTR = ENABLE_IAP; //使能IAP
IAP_CMD = CMD_READ; //设置IAP命令
IAP_ADDRL = addr; //设置IAP低地址
IAP_ADDRH = addr >> 8; //设置IAP高地址
IAP_TRIG = 0x5a; //写触发命令(0x5a)
IAP_TRIG = 0xa5; //写触发命令(0xa5)
_nop_(); //等待ISP/IAP/EEPROM操作完成
dat = IAP_DATA; //读ISP/IAP/EEPROM数据
IapIdle(); //关闭IAP功能
return dat; //返回
}
/*-写一字节数据到ISP/IAP/EEPROM区域-*/
void IapProgramByte(WORD addr, BYTE dat)
{
IAP_CONTR = ENABLE_IAP; //使能IAP
IAP_CMD = CMD_PROGRAM; //设置IAP命令
IAP_ADDRL = addr; //设置IAP低地址
IAP_ADDRH = addr >> 8; //设置IAP高地址
IAP_DATA = dat; //写ISP/IAP/EEPROM数据
IAP_TRIG = 0x5a; //写触发命令(0x5a)
IAP_TRIG = 0xa5; //写触发命令(0xa5)
_nop_(); //等待ISP/IAP/EEPROM操作完成
IapIdle();
}
/*---扇区擦除---------------*/
void IapEraseSector(WORD addr)
{
IAP_CONTR = ENABLE_IAP; //使能IAP val=IapReadByte(IAP_ADDRESS+1);
IAP_CMD = CMD_ERASE; //设置IAP命令
IAP_ADDRL = addr; //设置IAP低地址
IAP_ADDRH = addr >> 8; //设置IAP高地址
IAP_TRIG = 0x5a; //写触发命令(0x5a)
IAP_TRIG = 0xa5; //写触发命令(0xa5)
_nop_(); //等待ISP/IAP/EEPROM操作完成
IapIdle();
}
/*-----------------------------------------*/
void red_eeprom(void)
{
uint m,n;
LeftSpeed=IapReadByte(IAP_ADDRESS_0); //左移速度
RightSpeed=IapReadByte(IAP_ADDRESS_0+1); //右移速度
UpSpeed=IapReadByte(IAP_ADDRESS_0+2); //上行速度
DownSpeed=IapReadByte(IAP_ADDRESS_0+3); //下行速度
ProductThickness=IapReadByte(IAP_ADDRESS_0+4); //产品厚度
LayerNumber=IapReadByte(IAP_ADDRESS_0+5); //装箱层数
m=IapReadByte(IAP_ADDRESS_0+6); //X轴原点位置高八位
n=IapReadByte(IAP_ADDRESS_0+7); //X轴原点位置低八位
X_Origin=m*256+n;
m=IapReadByte(IAP_ADDRESS_0+8); //X轴总长高八位
n=IapReadByte(IAP_ADDRESS_0+9); //X轴总长低八位
X_TotalLength=m*256+n;
m=IapReadByte(IAP_ADDRESS_0+10); //Z轴原点位置高八位
n=IapReadByte(IAP_ADDRESS_0+11); //Z轴原点位置低八位
Z_Origin=m*256+n;
m=IapReadByte(IAP_ADDRESS_0+12); //Z轴总长高八位
n=IapReadByte(IAP_ADDRESS_0+13); //Z轴总长低八位
Z_TotalLength=m*256+n;
X_ScaleFactor=IapReadByte(IAP_ADDRESS_0+14); //X轴比例系数
Z_ScaleFactor=IapReadByte(IAP_ADDRESS_0+15); //Z轴比例系数
X_OriginSpeed=IapReadByte(IAP_ADDRESS_0+16); //X轴原点速度
Z_OriginSpeed=IapReadByte(IAP_ADDRESS_0+17); //Z轴原点速度
}
/*-----------------------------------------*/
void write_eeproma()
{
IapEraseSector(IAP_ADDRESS_0); //扇区擦除
IapProgramByte(IAP_ADDRESS_0,LeftSpeed); /*写入左移速度*/
IapProgramByte(IAP_ADDRESS_0+1,RightSpeed); /*写入右移速度*/
IapProgramByte(IAP_ADDRESS_0+2,UpSpeed); /*写入上行速度*/
IapProgramByte(IAP_ADDRESS_0+3,DownSpeed); /*写入下行速度*/
IapProgramByte(IAP_ADDRESS_0+4,ProductThickness); /*写入产品厚度*/
IapProgramByte(IAP_ADDRESS_0+5,LayerNumber); /*写入装箱层数*/
IapProgramByte(IAP_ADDRESS_0+6,X_Origin/256); /*写入X轴原点位置高八位*/
IapProgramByte(IAP_ADDRESS_0+7,X_Origin%256); /*写入X轴原点位置低八位*/
IapProgramByte(IAP_ADDRESS_0+8,X_TotalLength/256); /*写入X轴总长高八位*/
IapProgramByte(IAP_ADDRESS_0+9,X_TotalLength%256); /*写入X轴总长低八位*/
IapProgramByte(IAP_ADDRESS_0+10,Z_Origin/256); /*写入Z轴原点位置高八位*/
IapProgramByte(IAP_ADDRESS_0+11,Z_Origin%256); /*写入Z轴原点位置八位*/
IapProgramByte(IAP_ADDRESS_0+12,Z_TotalLength/256);/*写入Z轴总长高八位*/
IapProgramByte(IAP_ADDRESS_0+13,Z_TotalLength%256);/*写入Z轴总长低八位*/
IapProgramByte(IAP_ADDRESS_0+14,X_ScaleFactor); /*写入X轴比例系数*/
IapProgramByte(IAP_ADDRESS_0+15,Z_ScaleFactor); /*写入Z轴比例系数*/
IapProgramByte(IAP_ADDRESS_0+16,X_OriginSpeed); /*写入X轴原点速度*/
IapProgramByte(IAP_ADDRESS_0+17,Z_OriginSpeed); /*写入Z轴原点速度*/
}
/****************按键计数器状态寄存器归零*************/
void RstKey()
{
kcounter=0; //按键计数器归零
kstatus=0; //状态寄存器归零
}
/*****************按键低电平检测函数*****************/
void LowVoltKey(void) //按键计数器状态标志加一
{
kcounter++;
kstatus++;
delay(5); //延时
}
/*****************按键高电平检测函数*****************/
void HighVoltKey(void) //按键计数器加一 状态标志归零
{
kcounter++; //按键计数器加一
kstatus=0; //按键状态标志归零
delay(5); //延时
}
/*------------发送数据到界面0-----------------------------*/
void DisPlayData0()
{
printf("0XFF,0XFF,0XFF");
Data_val=9999;
printf("n0.val=%d\xff\xff\xff",Data_val); //X轴位置
printf("n0.val=%d\xff\xff\xff",Data_val); //X轴位置
printf("n7.val=%d\xff\xff\xff",Data_val); //Z轴位置
printf("n8.val=%d\xff\xff\xff",X_OriginSpeed); //X轴原点速度
printf("n9.val=%d\xff\xff\xff",Z_OriginSpeed); //Z轴原点速度
}
/*------------发送数据到界面1-----------------------------*/
void DisPlayData1()
{
printf("0XFF,0XFF,0XFF"); //,X_AxialPostion
printf("n8.val=%d\xff\xff\xff",ProductThickness); //产品厚度
printf("n8.val=%d\xff\xff\xff",ProductThickness); //产品厚度
printf("n9.val=%d\xff\xff\xff",LayerNumber); //装箱层数
printf("n0.val=%d\xff\xff\xff",X_AxialPostion); // X轴位置
printf("n7.val=%d\xff\xff\xff",Z_AxialPostion); // Z轴位置
}
/*------------发送数据到界面2-----------------------------*/
void DisPlayData2()
{
printf("0XFF,0XFF,0XFF");
printf("n0.val=%d\xff\xff\xff",LeftSpeed); //左移速度
printf("n0.val=%d\xff\xff\xff",LeftSpeed); //左移速度
printf("n1.val=%d\xff\xff\xff",RightSpeed); //右移速度
printf("n2.val=%d\xff\xff\xff",UpSpeed); //上行速度
printf("n3.val=%d\xff\xff\xff",DownSpeed); //下行速度
printf("n4.val=%d\xff\xff\xff",ProductThickness); //产品厚度
printf("n5.val=%d\xff\xff\xff",LayerNumber); //装箱层数
printf("n6.val=%d\xff\xff\xff",X_Origin); //X轴原点位置
printf("n7.val=%d\xff\xff\xff",X_TotalLength); //X轴总长
printf("n8.val=%d\xff\xff\xff",Z_Origin); //Z轴原点位置
printf("n9.val=%d\xff\xff\xff",Z_TotalLength); //Z轴总长
printf("n10.val=%d\xff\xff\xff",X_ScaleFactor); //X轴比例系数
printf("n11.val=%d\xff\xff\xff",Z_ScaleFactor); //Z轴比例系数
delay(100);
}
/*************关所有输出*******************************/
void reset_io()
{
LED0=1;
LED1=1;
LED2=1;
LED3=11;
Turntable=1; //Y7 转盘 输出 发信号给排列控制板
PutterForword=1; //Y0 推杆前进 发信号给排列控制板
PutterBack=1; //Y1 推杆后退 发信号给排列控制板
X_MTORCP=1; //CP1 X轴脉冲
X_MTORECT=1; //D1 X轴方向
Z_MTORCP=1; //CP2 Z轴脉冲
Z_MTORECT=1; //D2 Z轴方向
}
/*************原点X轴左移****/
void LeftRun()
{
X_MTORECT=1;
MOTORRUN=1;
while(X_ZEROFLAG&&MOTORRUN) //X轴原点标志未归零循环
{
LED1=~LED1;
X_MTORCP=0;
delay1(X_OriginSpeed);
X_MTORCP=1;
delay1(X_OriginSpeed);
}
}
/**************原点X轴右移***/
void RightRun()
{
X_MTORECT=0;
MOTORRUN=1;
while(X_ZEROFLAG&&MOTORRUN) //X轴原点标志未归零循环
{
LED1=~LED1;
X_MTORCP=0;
delay1(X_OriginSpeed);
X_MTORCP=1;
delay1(X_OriginSpeed);
}
}
/*************手动X轴左移****/
void Left_Run() //X_MTORECT=P2^4; //X轴方向
{
X_MTORECT=1;
MOTORRUN=1;
while(MOTORRUN)
{
X_MTORCP=0;
delay1(LeftSpeed);
X_MTORCP=1;
delay1(LeftSpeed);
X_AxialPostion=X_AxialPostion+1;
printf("n0.val=%d\xff\xff\xff",X_AxialPostion); // X轴位置
}
}
/**************手动X轴右移***/
void Right_Run()
{
X_MTORECT=0;
MOTORRUN=1;
while(MOTORRUN)
{
X_MTORCP=0;
delay1(RightSpeed);
X_MTORCP=1;
delay1(RightSpeed);
X_AxialPostion=X_AxialPostion-1;
printf("n0.val=%d\xff\xff\xff",X_AxialPostion); // X轴位置
}
}
/**************原点Z轴上升***/
void UpRun()
{
Z_MTORECT=1;
MOTORRUN=1;
while(Z_ZEROFLAG&&MOTORRUN) //Z轴原点标志未归零循环
{
LED1=~LED1;
Z_MTORCP=0;
delay1(Z_OriginSpeed);
Z_MTORCP=1;
delay1(Z_OriginSpeed);
}
}
/**************原点Z轴下降***/
void DownRun()
{
Z_MTORECT=0;
MOTORRUN=1;
while(Z_ZEROFLAG&&MOTORRUN) //Z轴原点标志未归零循环
{
LED1=~LED1;
Z_MTORCP=0;
delay1(Z_OriginSpeed);
Z_MTORCP=1;
delay1(Z_OriginSpeed);
}
}
/**************手动Z轴上升***/
void Up_Run()
{
Z_MTORECT=1;
MOTORRUN=1;
while(MOTORRUN)
{
Z_MTORCP=0;
delay1(UpSpeed);
Z_MTORCP=1;
delay1(UpSpeed);
Z_AxialPostion=Z_AxialPostion-1;
printf("n7.val=%d\xff\xff\xff",Z_AxialPostion); // Z轴位置
}
}
/**************手动Z轴下降***/
void Down_Run()
{
Z_MTORECT=0;
MOTORRUN=1;
while(MOTORRUN)
{
Z_MTORCP=0;
delay1(DownSpeed);
Z_MTORCP=1;
delay1(DownSpeed);
Z_AxialPostion=Z_AxialPostion+1;
printf("n7.val=%d\xff\xff\xff",Z_AxialPostion); // Z轴位置
}
}
/*------------初始化串口---------------------*/
void InitUart()
{
SCON=0X50; //8位数据,可变波特率
AUXR|=0x01; //串口1选择定时器2为波特率发生器
AUXR|=0X04; //定时器2时钟为Fosc,即1T
T2L=0XE0; //设置定时器处置 110592》9600
T2H=0XFE; //设置定时器处置 110592》9600
AUXR|=0X10; //启动定时器2
TI=1;
ES=1; //
EA=1;
}
/*************串口中断数据接收****B0 03暂停******/
/******Receive_Flag 更新数据标志*****************/
/******a[i] 数据接收缓存数组 i 数组下标**********/
void Uart() interrupt 4 using 1
{
if(RI)
{
if(SBUF==0XFA||SBUF==0XFF) //触摸屏结束码
{
Receive_Flag=1; //接收数据标志置一
RI=0; //
i=0; //数组计数器归零
}
else
{
a[i]=SBUF; //数组下标位置的数据等于SBUF
RI=0; //
i++;
}
if(Receive_Flag==1) //设备停止 退出循环
{
if(a[0]==0XA0) //写时间代码
{
if(a[1]==0X00) //写时间代码
{
Receive_Flag=0; //串口中断接收标志置零
i=0; //数组计数器归零
MOTORRUN=0; //关伺服电机 推杆进退
LED3=1;
}
}
}
}
}
/**************定时器0中断*************************/
void timer0() interrupt 1
{
TH0=0X53;
TL0=0X32;
aa++;
if(aa>=300)
{
LED0=~LED0;
aa=0;
}
}
/**************X原点归零**************************/
void exint0() interrupt 0 //INT0中断入口
{
RstKey(); //按键复位
if(X_ZEROFLAG==1) //
{
if(!INT0PUT) //中断入口
{
for(;kcounter<5;) //按键循环5次
{
if(!INT0PUT) //中断入口低电平
{
LowVoltKey(); //按键低电平 计数器加一状态标志加一
}
else if(~!INT0PUT) //中断入口高电平
{
HighVoltKey(); //高电平检测
}
}
if(kstatus>=3) /*按键状态标志大于等于3为有效值*/
{
EX0=0; //关外部中断0
X_ZEROFLAG=0; //X轴原点标志
X_AxialPostion=X_Origin; //X轴赋值
delay(2000);
Up_XData=1; //原点更新标志
}
}
RstKey(); //按键复位
}
}
/*************Z原点归零**************************/
void exint1() interrupt 2
{
RstKey(); //按键复位
if(Z_ZEROFLAG==1)
{
if(!INT1PUT) //中断入口
{
for(;kcounter<5;) //按键循环5次
{
if(!INT1PUT) //中断入口低电平
{
LowVoltKey(); //按键低电平 计数器加一状态标志加一
}
else if(~!INT1PUT) //中断入口高电平
{
HighVoltKey(); //高电平检测
}
}
if(kstatus>=3) /*按键状态标志大于等于3为有效值*/
{
EX1=0; //关外部中断1
Z_ZEROFLAG=0; //Z轴原点标志
Z_AxialPostion=Z_Origin; //Z轴赋值
Up_ZData=1; //原点更新标志
}
}
RstKey(); //按键复位
}
}
/*************************************************/
void main( ) /*主程序开始*/
{
reset_io(); //reset_io
AUXR=0X80; //STC系列的1T 设置
TMOD=0X01;
TH0=0X53;
TL0=0X32;
ET0=1;
TR0=1;
IT0=1; //使能INT0下降沿中断
EX0=1; //使能INT0中断
IT1=1; //使能INT1下降沿中断
EX1=1; //使能INT1中断
P_SW1=0x00; //RXD/P3.0, TXD/P3.1
Receive_Flag=0;
i=0; //数据接收计数器等于0
InitUart(); //初始化串口
delay50us(20); //
red_eeprom(); //
delay(100); //
printf("0XFF,0XFF,0XFF");
DisPlayData0(); //X轴 Z轴原点速度
X_AxialPostion=0; //X轴位置
Z_AxialPostion=0; //Z轴位置
counter=0; //产量归零
StopFlag=0; //
MOTORRUN=0; //
X_ZEROFLAG=1; //X原点标志等于1 未回原点状态
Z_ZEROFLAG=1; //Z原点标志等于1 未回原点状态
while(1)
{
/*******原点更新标志查询***************/
/***X轴更新标志为1,显示X轴原点位置*****/
/******XZ轴都回原点 跳转主页面*********/
if(Up_XData==1) //X轴原点更新标志为1,刷新X轴位置
{
Up_XData=0;
printf("n0.val=%d\xff\xff\xff",X_AxialPostion); //X轴位置
printf("n0.val=%d\xff\xff\xff",X_AxialPostion); //X轴位置
if(X_ZEROFLAG==0&&Z_ZEROFLAG==0) //XZ轴都回原点 跳转主页面
{
delay(100); //
printf("page 1\XFF\XFF\XFF");
}
}
/***Z轴更新标志为1,显示Z轴原点位置*****/
/******XZ轴都回原点 跳转主页面*********/
else if(Up_ZData==1) //Z轴原点更新标志为1,刷新Z轴位置
{
Up_ZData=0;
printf("n7.val=%d\xff\xff\xff",Z_AxialPostion); //Z轴位置
printf("n7.val=%d\xff\xff\xff",Z_AxialPostion); //Z轴位置
if(X_ZEROFLAG==0&&Z_ZEROFLAG==0) //XZ轴都回原点 跳转主页面
{
delay(100); //
printf("page 1\XFF\XFF\XFF");
}
}
if(Receive_Flag==1) //串口接收标志
{
Receive_Flag=0; //串口接收标志复位
if(a[0]==0XEF) //请求单片机写EEPROM
{
printf("n12.val=%d\xff\xff\xff",i); //数组计数器归零
printf("n13.val=%d\xff\xff\xff",RETDATA); //返回数据 命令
RETDATA=a[0];
printf("n13.val=%d\xff\xff\xff",RETDATA); //返回数据 命令
RETDATA=a[1];
printf("n14.val=%d\xff\xff\xff",RETDATA); //返回数据 参数
RETDATA=a[2];
printf("n15.val=%d\xff\xff\xff",RETDATA); //返回数据 数字高位
RETDATA=a[3];
printf("n16.val=%d\xff\xff\xff",RETDATA); //返回数据 数字低位
if(a[1]==0X00)
{
X_OriginSpeed=a[2]; //X轴原点速度
}
else if(a[1]==0X01)
{
Z_OriginSpeed=a[2]; //Z轴原点速度
}
else if(a[1]==0X02) //左移速度
{
LeftSpeed=a[2];
}
else if(a[1]==0X03) //右移速度
{
RightSpeed=a[2];
}
else if(a[1]==0X04) //上行速度
{
UpSpeed=a[2]; ///
}
else if(a[1]==0X05) //下行速度
{
DownSpeed=a[2];
}
else if(a[1]==0X06) //产品厚度
{
ProductThickness=a[2];
}
else if(a[1]==0X07) //装箱层数
{
LayerNumber=a[2];
}
else if(a[1]==0X08) //X轴原点位置
{
X_Origin=a[3]*256+a[2];
}
else if(a[1]==0X09) //X轴总长
{
X_TotalLength=a[3]*256+a[2];
}
else if(a[1]==0X0A) //Z轴原点位置
{
Z_Origin=a[3]*256+a[2];
}
else if(a[1]==0X0B) //Z轴总长
{
Z_TotalLength=a[3]*256+a[2]; //
}
else if(a[1]==0X0C)
{
X_ScaleFactor=a[2]; //X轴比例系数r
}
else if(a[1]==0X0D)
{
Z_ScaleFactor=a[2]; //Z轴比例系数r
}
Data_val=a[3]*256+a[2]; //
write_eeproma();
}
else if(a[0]==0XA0) //主画面后初始化事件
{
if(a[1]==0X55)
{
LED0=0;
Turntable=0; //转盘开
}
else if(a[1]==0XAA)
{
LED0=1;
Turntable=1; //转盘关
}
else if(a[1]==0X01) //左移
{
MOTORRUN=1;
LeftRun(); //原点状态左移
}
else if(a[1]==0X02) //右移
{
MOTORRUN=1;
RightRun(); //原点状态右移
}
else if(a[1]==0X03) //原点状态上行
{
MOTORRUN=1;
UpRun();
}
else if(a[1]==0X04) //原点状态下行
{
MOTORRUN=1;
DownRun();
}
else if(a[1]==0X05) //推杆前进
{
PutterForword=0;
PutterBack=1;
}
else if(a[1]==0X06) //推杆后退
{
PutterBack=0;
PutterForword=1;
}
else if(a[1]==0X08) //关推杆前进后退
{
PutterBack=1;
PutterForword=1;
}
}
else if(a[0]==0XA2) //主画面后初始化事件
{
if(a[1]==0X01) //左移
{
MOTORRUN=1;
Left_Run(); //Left_Run
}
else if(a[1]==0X02) //右移
{
MOTORRUN=1;
Right_Run();
}
else if(a[1]==0X03) //上行
{
MOTORRUN=1;
Up_Run();
}
else if(a[1]==0X04) //下行
{
MOTORRUN=1;
Down_Run();
}
else if(a[1]==0X05)
{
ClampingOut=0; //涨紧 输出
ReleaseOut=1;
RstKey(); //按键复位
for(;kcounter<5;) //按键循环5次
{
if(!ClampingStop) //中断入口低电平
{
LowVoltKey(); //按键低电平 计数器加一状态标志加一
}
else if(~!ClampingStop) //中断入口高电平
{
HighVoltKey(); //高电平检测
}
}
if(kstatus>=3) /*按键状态标志大于等于3为有效值*/
{
ClampingOut=1; //关涨紧输出
}
}
else if(a[1]==0X06)
{
ReleaseOut=0; //释放 输出
ClampingOut=1;
RstKey(); //按键复位
for(;kcounter<5;) //按键循环5次
{
if(!ClampingStop) //中断入口低电平
{
LowVoltKey(); //按键低电平 计数器加一状态标志加一
}
else if(~!ClampingStop) //中断入口高电平
{
HighVoltKey(); //高电平检测
}
}
if(kstatus>=3) /*按键状态标志大于等于3为有效值*/
{
ReleaseOut=1; //释放 输出
}
}
}
else if(a[0]==0XE1) //请求单片机发送数据到界面1
{
RETDATA=a[0];
printf("n13.val=%d\xff\xff\xff",RETDATA); //返回数据 命令
RETDATA=a[1];
printf("n14.val=%d\xff\xff\xff",RETDATA); //返回数据 参数
RETDATA=a[2];
printf("n15.val=%d\xff\xff\xff",RETDATA); //返回数据 数字高位
RETDATA=a[3];
printf("n16.val=%d\xff\xff\xff",RETDATA); //返回数据 数字低位
if(a[1]==0X00) //
{
if(X_ZEROFLAG==0&&Z_ZEROFLAG==0)
{
printf("n0.val=%d\xff\xff\xff",X_AxialPostion); //X轴位置
printf("n7.val=%d\xff\xff\xff",Z_AxialPostion); //Z轴位置
}
else
{
DisPlayData0();
}
}
if(a[1]==0X01) //
{
DisPlayData1();
}
if(a[1]==0X11) //请求单片机发送数据到界面2
{
DisPlayData2();
}
if(a[1]==0XE1) //出厂数据恢复
{
X_OriginSpeed=12; //X轴原点速度
Z_OriginSpeed=12; //Z轴原点速度
LeftSpeed=10; //左移速度
RightSpeed=10; //右移速度
UpSpeed=10; //上行速度
DownSpeed=10; //下行速度
ProductThickness=20; //产品厚度
LayerNumber=30; //装箱层数
X_Origin=20; //X轴原点位置
X_TotalLength=320; //X轴总长
Z_Origin=60; //Z轴原点位置
Z_TotalLength=600; //Z轴总长
X_ScaleFactor=10; //X轴比例系数
Z_ScaleFactor=10; //Z轴比例系数
write_eeproma();
delay50us(20); //
red_eeprom(); //
DisPlayData2();
}
}
i=0; //数组计数器归零
}
}
} //L804 CODE5188 2021 2 23