/*------------------主循环程序----------------*/
void main( ) /*主程序开始*/
{ /**加一**/
P0M0=0XFF; //推挽输出
P0M1=0X00; //推挽输出
P1M0=0XFF; //推挽输出
P1M1=0X00; //推挽输出
P2M0=0X00; //准双向输入
P2M1=0X00; //准双向输入
P3M0=0X00; //准双向输入
P3M1=0X00; //准双向输入
P4M0=0XE1; //P4.0 4.5 4.6 4.7推挽输出
P4M1=0X00; //P4.1 4.2 4.3 4.4准双向输入
P5M0=(P5M0&~0x03)|0x3C; //P5.2 5.3 5.4 5.5推挽输出
P5M1&=~0x3F; //P5.0 5.1 准双向输入
P6M0=0X0F; //P6.0 6.1 6.2 6.3推挽输出
P6M1=0; //P6.4 6.5 6.6 6.7准双向输入
P7M0=0XF0; //P7.4 7.5 7.6 7.7推挽输出
P7M1=0X00; //P7.0 7.1 7.2 7.3准双向输入
IT0=1; //设置INT0的中断类型 (1:仅下降沿 0:上升沿和下降沿)
EX0=1; //使能INT0中断
EA=1;
Timer0_Init(); //定时器0初始化
Timer1_Init(); //定时器0初始化
InitUart(); //初始化串口定时器1做波特率发生器
P_SW1=0x00; //RXD_2/P3.0, TXD_2/P3.1
EX_INT0=1; //拉高P3.2
IT0=1; //设置INT0的中断类型 (1:仅下降沿 0:上升沿和下降沿)
EX0=1; //使能INT0中断
MotoraRun_Flag=0; //定时器电机A运行标志
MotorbRun_Flag=0; //定时器电机B运行标志
MotorcRun_Flag=0; //定时器电机C运行标志
MotordRun_Flag=0; //定时器电机D运行标志
i=0; //数组计数器归零
red_eeprom();
delay10ms(10);
printf("XFF,XFF,XFF"); //向串口屏发启动信号
delay10ms(50);
Counter=0; //产量计数器
Pump_Counter=0; //打油计数器
lub_Counter=0; //润滑计数器
printf("n0.val=%d\xff\xff\xff",Counter);
printf("n0.val=%d\xff\xff\xff",Counter); //
Receive_Flag=0; //接收数据标志置零
WARNING_Time=0; //报警计时计数器
RUN_Flag=0; //自动运行标志
OutPut8=0; //手动
Time_Flag=0; //报警定时启用标志
Error_Flag=0; //报警定时到启动标志
Zero_Flag=0; //工位零点标志
Point_Flag=0; //工位零点完成标志
while(1)
{
delay10ms(5);
if(Receive_Flag==1)
{
i=0; //数组计数器归零
OutPut22=1; //帧数据指示灯接收一帧开启处理完关闭
Receive_Flag=0;
if(a[0]==0XA0&&a[1]==0XA0)
{
if(a[2]==0X01) //夹具1开
{
Voice(); //提示声
OutPut9=0;
}
else
if(a[2]==0X00) //夹具1关
{
Voice(); //提示声
OutPut9=1;
}
}
else if(a[0]==0XA0&&a[1]==0XA1)
{
if(a[2]==0X01) //夹具2开
{
Voice(); //提示声
OutPut10=0;
}
else
if(a[2]==0X00) //夹具2关
{
Voice(); //提示声
OutPut10=1;
}
}
else if(a[0]==0XA0&&a[1]==0XA2)
{
if(a[2]==0X01) //夹具3开
{
Voice(); //提示声
OutPut11=0;
}
else
if(a[2]==0X00) //夹具3关
{
Voice(); //提示声
OutPut11=1;
}
}
else if (a[0]==0XA0&&a[1]==0XA3)
{
if(a[2]==0X01) //夹具4开
{
Voice(); //提示声
OutPut12=0;
}
else
if(a[2]==0X00) //夹具4关
{
Voice(); //提示声
OutPut12=1;
}
}
else if(a[0]==0XA0&&a[1]==0XA4)
{
if(a[2]==0X01) //夹具5开
{
Voice(); //提示声
OutPut13=0;
}
else
if(a[2]==0X00) //夹具5关
{
Voice(); //提示声
OutPut13=1;
}
}
else if(a[0]==0XA0&&a[1]==0XA5)
{
if(a[2]==0X01) //夹具6开
{
Voice(); //提示声
OutPut14=0;
}
else
if(a[2]==0X00) //夹具6关
{
Voice(); //提示声
OutPut14=1;
}
}
else if(a[0]==0XA0&&a[1]==0X5A)
{
if(a[2]==0X01) //机座进
{
Voice(); //提示声
OutPut3=0;
}
else
if(a[2]==0X00) //机座退
{
Voice(); //提示声
OutPut3=1;
}
}
else if(a[0]==0XA0&&a[1]==0X6A)
{
if(a[2]==0X01) //润滑缸进
{
Voice(); //提示声
OutPut18=0;
}
else
if(a[2]==0X00) //润滑缸退
{
Voice(); //提示声
OutPut18=1;
}
}
else if (a[0]==0XA0&&a[1]==0XA6)//电机1进
{
Voice(); //提示声
DIR0=1;
MotoraRun_Flag=1; //定时器电机A运行标志
}
else if (a[0]==0XA0&&a[1]==0XA7)//电机2进
{
Voice(); //提示声
DIR1=1;
MotorbRun_Flag=1; //定时器电机B运行标志
}
else if (a[0]==0XA0&&a[1]==0XA8)//电机3进
{
Voice(); //提示声
DIR2=0;
MotorcRun_Flag=1; //定时器电机C运行标志
}
else if (a[0]==0XA0&&a[1]==0XA9)//电机4进
{
Voice(); //提示声
DIR3=1;
MotordRun_Flag=1; //定时器电机D运行标志
}
//电机进
else if (a[0]==0XA0&&a[1]==0XAA)//电机1退
{
Voice(); //提示声
DIR0=0;
MotoraRun_Flag=1; //定时器电机A运行标志
}
else if (a[0]==0XA0&&a[1]==0XAB)//电机2退
{
Voice(); //提示声
DIR1=0;
MotorbRun_Flag=1; //定时器电机B运行标志
}
else if (a[0]==0XA0&&a[1]==0XAC)//电机3退
{
Voice(); //提示声
DIR2=1;
MotorcRun_Flag=1; //定时器电机C运行标志
}
else if (a[0]==0XA0&&a[1]==0XAD)//电机4退
{
Voice(); //提示声
DIR3=0;
MotordRun_Flag=1; //定时器电机D运行标志
}
else if (a[0]==0XA0&&a[1]==0XAE)//打油
{
Voice(); //提示声
OutPut21=0;
delay5ms(val6); //间隙时间
OutPut21=1;
}
//电机退
else if (a[0]==0XB0&&a[1]==0XA6)//电机1关
{
Voice(); //提示声
DIR0=1;
MotoraRun_Flag=0; //定时器电机A运行标志
CP0=1;
}
else if (a[0]==0XB0&&a[1]==0XA7)//电机2关
{
Voice(); //提示声
DIR1=1;
MotorbRun_Flag=0; //定时器电机B运行标志
CP1=1;
}
else if (a[0]==0XB0&&a[1]==0XA8)//电机3关
{
Voice(); //提示声
DIR2=1;
MotorcRun_Flag=0; //定时器电机C运行标志
CP2=1;
}
else if (a[0]==0XB0&&a[1]==0XA9)//电机4关
{
Voice(); //提示声
DIR3=1;
MotordRun_Flag=0; //定时器电机D运行标志
CP3=1;
}
//工位零点
else if (a[0]==0XB1&&a[1]==0XA1)//工位零点
{
Voice(); //提示声
if(Point_Flag==0) //工位零点未完成
{
Zero_Flag=1; //工位零点标志循环检测输入低电平
RstKey();
for(;kcounter<10;) //按键循环10
{
if(!IntPut5&&!IntPut22&&!IntPut23)//过桥退 机座退 润滑退
{
LowVoltKey(); //按键低电平 计数器加一状态标志加一
}
else if(~!IntPut5||~!IntPut22||~!IntPut23) //按键高电平
{
HighVoltKey(); //按键计数器 状态计数器归零
}
}
if(kstatus>=8) /*按键状态标志大于等于8为有效值*/
{
do /*行程输入信号检测标志无输入为1,永久循环*/
{ //Zero_Flag
delay10ms(100); //电机停顿延时
KEY_counter=0;
KEY_status=0;
for(;KEY_counter<10;) //检测按键 KEY_counter小于10循环
{
if(!IntPut4) //工位零点信号按键低电平
{
KEY_counter++;
KEY_status++; //按键低电平 计数器加一状态标志加一
}
else if(~!IntPut4) //按键高电平
{
KEY_counter++; //按键计数器加一 状态标志归零
KEY_status=0; //按键低电平 计数器加一状态标志加一
}
}
if(KEY_status>=8) /*按键状态标志大于等于8为有效值*/
{
FLAG_M=15; //零点完成
printf("va1.val=%d\xff\xff\xff",FLAG_M); //触摸屏变量交定时器解析
Point_Flag=1; //工位零点完成标志 定时器1指示灯闪烁
Zero_Flag=0; //工位零点标志归零
Signauto=0; /*行程输入信号连续检测到3次Signauto=0退出循环*/
OutPut20=0; //完成提示声开
Delay_100ms(5); //
OutPut20=1; //完成提示声关
Delay_100ms(5); //
OutPut20=0; //完成提示声开
Delay_100ms(5); //
OutPut20=1; //完成提示声关
}
else
{
FLAG_M=2; //工位旋转
printf("va1.val=%d\xff\xff\xff",FLAG_M);//
OutPut1=0; //电机开
OutPut17=0; //电机开
delay10ms(100); //电机停顿延时
Signauto=1; /*行程输入信号检测标志无输入为1,永久循环*/
RstKey();
Time_Error=0; //定时器触发超时报警计数器归零
Time_Flag=1; //启动工位旋转报警标志由定时器计数
Time_Warning=val12; //报警缓冲定时器比较值
//工位旋转 定时器累计旋转超时计数 外部中断0检测角度停止位
while(Signauto) //外部中断0检测到输入信号 退出循环
{
delay10ms(100); //报警停顿延时
if(Error_Flag==1) //定时器计数超设置值
{
delay10ms(100); //
OutPut20=~OutPut20; //旋转超时报警
}
}
}
}
while(Zero_Flag); //
}
else
{
Delay_100ms(20); //
FLAG_M=16; //限位失效 润滑机座退未复位
printf("va1.val=%d\xff\xff\xff",FLAG_M); //触摸屏变量交定时器解析
Delay_100ms(50); //
}
FLAG_M=17; //待机
printf("va1.val=%d\xff\xff\xff",FLAG_M); //触摸屏变量交定时器解析
}
}
//电机关
else if(a[0]==0XA1&&a[1]==0XA0)
{
if(a[2]==0X01) //过桥开
{
Voice(); //提示声
OutPut4=0;
}
else
if(a[2]==0X00) //过桥关
{
Voice(); //提示声
OutPut4=1;
}
}
//过桥
else if(a[0]==0XA1&&a[1]==0XA1)
{
if(a[2]==0X01) //闸门1开
{
Voice(); //提示声
OutPut5=0;
}
else
if(a[2]==0X00) //闸门1关
{
Voice(); //提示声
OutPut5=1;
}
}
//闸门1
else if(a[0]==0XA1&&a[1]==0XA2)
{
if(a[2]==0X01) //闸门2开
{
Voice(); //提示声
OutPut6=0;
}
else
if(a[2]==0X00) //闸门2关
{
Voice(); //提示声
OutPut6=1;
}
}
//闸门2
else if(a[0]==0XA1&&a[1]==0XA3)
{
if(a[2]==0X01) //吹气一开
{
Voice(); //提示声
OutPut15=0;
}
else
if(a[2]==0X00) //吹气一关
{
Voice(); //提示声
OutPut15=1;
}
}
else if(a[0]==0XA1&&a[1]==0XA4)
{
if(a[2]==0X01) //吹气二开
{
Voice(); //提示声
OutPut16=0;
}
else
if(a[2]==0X00) //吹气二关
{
Voice(); //提示声
OutPut16=1;
}
}
//吹气
else if(a[0]==0XA1&&a[1]==0XA7)
{
if(a[2]==0X01) //闸门3开
{
Voice(); //提示声
OutPut2=0;
}
else
if(a[2]==0X00) //闸门3关
{
Voice(); //提示声
OutPut2=1;
}
}
//闸门3
//电机旋转 外部中断0检测到输入信号 退出循环
else if(a[0]==0XA0&&a[1]==0XAF) //手动测试页 电机旋转
{
Voice(); //提示声
Read_Intput(val12); //旋转超时
}
//电机感应开关检测。
else if (a[0]==0XDA&&a[1]==0XA0)//page0 产量显示
{
Delay_100ms(20);
printf("n0.val=%d\xff\xff\xff",Counter);
printf("n0.val=%d\xff\xff\xff",Counter); //
}
//返回首页
else if (a[0]==0XD5&&a[1]==0X00)//A轴速度
{
val1=a[3]*256+a[2]; //
Write_EEprom();
printf("n8.val=%d\xff\xff\xff",val1);
Renovate(); //刷新显示
delay1(50);
Dis_Data(); //
}
else if (a[0]==0XD5&&a[1]==0X01)//B轴速度
{
val2=a[3]*256+a[2]; //
Write_EEprom();
printf("n8.val=%d\xff\xff\xff",val2);
Renovate(); //刷新显示
delay1(500);
Dis_Data(); //
}
else if (a[0]==0XD5&&a[1]==0X02)//C轴速度
{
val3=a[3]*256+a[2]; //
Write_EEprom();
printf("n8.val=%d\xff\xff\xff",val3);
Renovate(); //刷新显示
delay1(50);
Dis_Data(); //
}
else if (a[0]==0XD5&&a[1]==0X03)//D轴速度
{
val4=a[3]*256+a[2]; //
Write_EEprom();
printf("n8.val=%d\xff\xff\xff",val4);
Renovate(); //刷新显示
delay1(50);
Dis_Data(); //
}
else if (a[0]==0XD5&&a[1]==0X04)//润滑模数
{
val5=a[3]*256+a[2]; //
Write_EEprom();
printf("n8.val=%d\xff\xff\xff",val5);
Renovate(); //刷新显示
delay1(50);
Dis_Data(); //
}
else if (a[0]==0XD5&&a[1]==0X05)//润滑时间
{
val6=a[3]*256+a[2]; //
Write_EEprom();
printf("n8.val=%d\xff\xff\xff",val6);
Renovate(); //刷新显示
delay1(50);
Dis_Data(); //
}
else if (a[0]==0XD5&&a[1]==0X06)//吹气时间1
{
val7=a[3]*256+a[2]; //
Write_EEprom();
printf("n8.val=%d\xff\xff\xff",val7);
Renovate(); //刷新显示
delay1(50);
Dis_Data(); //
}
else if(a[0]==0XD5&&a[1]==0X07) //吹气时间2
{
val8=a[3]*256+a[2]; //
Write_EEprom();
printf("n8.val=%d\xff\xff\xff",val8);
Renovate(); //刷新显示
delay1(50);
Dis_Data(); //
}
else if(a[0]==0XD5&&a[1]==0X08) //缺料超时
{
val9=a[3]*256+a[2]; //
Write_EEprom();
printf("n8.val=%d\xff\xff\xff",val9);
Renovate(); //刷新显示
delay1(50);
Dis_Data(); //
}
else if(a[0]==0XD5&&a[1]==0X09) //油泵打油计数
{
val10=a[3]*256+a[2]; //
Write_EEprom();
printf("n8.val=%d\xff\xff\xff",val10);
Renovate(); //刷新显示
delay1(50);
Dis_Data(); //
}
else if(a[0]==0XD5&&a[1]==0X0A) //攻丝超时
{
val11=a[3]*256+a[2]; //
Write_EEprom();
printf("n8.val=%d\xff\xff\xff",val11);
Renovate(); //刷新显示
delay1(50);
Dis_Data(); //
}
else if(a[0]==0XD5&&a[1]==0X0B) //旋转超时
{
val12=a[3]*256+a[2]; //
Write_EEprom();
printf("n8.val=%d\xff\xff\xff",val12);
Renovate(); //刷新显示
delay1(50);
Dis_Data(); //
}
else if(a[0]==0XD5&&a[1]==0X0C) //退刀超时
{
val13=a[3]*256+a[2]; //
Write_EEprom();
printf("n8.val=%d\xff\xff\xff",val13);
Renovate(); //刷新显示
delay1(50);
Dis_Data(); //
}
else if(a[0]==0XD5&&a[1]==0X0D) //润滑超时
{
val14=a[3]*256+a[2]; //
Write_EEprom();
printf("n8.val=%d\xff\xff\xff",val14);
Renovate(); //刷新显示
delay1(50);
Dis_Data(); //
}
else if(a[0]==0XD5&&a[1]==0X0E) //恢复数据
{
RESET_Data(); //
Write_EEprom();
Renovate(); //刷新显示
delay1(50);
Dis_Data(); //
}
else if (a[0]==0XD5&&a[1]==0X0F)//过桥时间
{
val15=a[3]*256+a[2]; //
Write_EEprom();
printf("n1.val=%d\xff\xff\xff",val15);
}
else if (a[0]==0XD5&&a[1]==0X1F)//手动速度
{
val16=a[3]*256+a[2]; //
Write_EEprom();
printf("n1.val=%d\xff\xff\xff",val16);
}
else if (a[0]==0XF0&&a[1]==0X1F)//自动
{
Voice(); //提示声
RUN_Flag=1; //自动运行标志
OutPut7=0; //自动
OutPut8=1; //手动
val17=val1/2; //三轴速度
Run_start();
}
else if(a[0]==0XDA&&a[1]==0XA3) //显示参数
{
red_eeprom();
Dis_Data();
}
else if(a[0]==0XDA&&a[1]==0XA2) //过桥时间
{
delay1(50);
printf("n0.val=%d\xff\xff\xff",val15);//
printf("n0.val=%d\xff\xff\xff",val15);//过桥时间
printf("n2.val=%d\xff\xff\xff",val16);//手动速度
}
else if(a[0]==0XF0&&a[1]==0XF2) //报警使能关闭
{
Error_Flag=0; //
}
else if(a[0]==0XA0&&a[1]==0XC0) //电机1正转攻丝
{
Voice(); //提示声
DIR0=1;
MotoraRun_Flag=1; //定时器电机A运行标志
MotorAForward(); //检测电机A位置
}
else if(a[0]==0XA0&&a[1]==0XC1) //电机2正转攻丝
{
Voice(); //提示声
DIR1=1;
MotorbRun_Flag=1; //定时器电机B运行标志
MotorBForward();
}
else if(a[0]==0XA0&&a[1]==0XC2) //电机3正转攻丝
{
Voice(); //提示声
DIR2=0;
MotorcRun_Flag=1; //定时器电机C运行标志
MotorCForward();
}
else if(a[0]==0XA0&&a[1]==0XC3) //电机4正转攻丝
{
Voice(); //提示声
DIR3=1;
MotordRun_Flag=1; //定时器电机D运行标志
MotorDForward();
}
else if(a[0]==0XA0&&a[1]==0XCA) //电机1反转退丝
{
Voice(); //提示声
DIR0=0;
MotoraRun_Flag=1; //定时器电机A运行标志
MotorABackInt();
}
else if(a[0]==0XA0&&a[1]==0XCB) //电机2反转退丝
{
Voice(); //提示声
DIR1=0;
MotorbRun_Flag=1; //定时器电机B运行标志
MotorBBackInt();
}
else if(a[0]==0XA0&&a[1]==0XCC) //电机3反转退丝
{
Voice(); //提示声
DIR2=1;
MotorcRun_Flag=1; //定时器电机C运行标志
MotorCBackInt();
}
else if(a[0]==0XA0&&a[1]==0XCD) //电机4反转退丝
{
Voice(); //提示声
DIR3=0;
MotordRun_Flag=1; //定时器电机D运行标志
MotorDBackInt(); //MotorBack()
}
else if(a[0]==0XA0&&a[1]==0XCE) //退刀补偿
{
Voice(); //提示声
DIR0=0; //电机A反转
DIR1=0; //电机B反转
DIR2=1; //电机C反转
DIR3=0; //电机D反转
MotorBack();
}
RstKey();
LowVoltKey();
HighVoltKey();
}
} //修改过桥时间 工位旋转定时器计数器归零
} //2024 5 4 L2866 CODE 13104
STC单片机和串口触摸屏自由通讯协议
最新推荐文章于 2024-11-10 17:20:46 发布