本帖最后由 xdcxdj 于 2013-9-17 19:28 编辑
我是才接触单片机,想用它来控制射沙机,可是编程不太会请大家帮帮忙!!!!谢谢了,大家看看就知道了,就是循环问题
这是写的程序
#include<reg51.h>
sbit qigang_left=P1^0; //气缸
sbit qigang_right=P1^1;
sbit qigang_up=P1^2;
sbit qigang_down=P1^3;
sbit qigang_shesha=P1^4;
sbit journey_left=P0^0; //行程开关
sbit journey_right=P0^1;
sbit journey_up=P0^2;
sbit journey_down=P0^3;
sbit flag_start=P0^4; //启动按钮
void t0(void) interrupt 0 using 0
{
flag_start=1;
}
/*************** 延时***********************/
void delay(unsigned char m) //延时子程序
{
unsigned char i,j,k;
m=m*100;
for(i=m;i>0;i--)
for(j=20;j>0;j--)
for(k=248;k>0;k--);
}
/******************* 主函数 *********************/
void main()
{
qigang_left=1;
qigang_right=1;
qigang_up=1;
qigang_down=1;
qigang_shesha=1;
IT0=1;
EX0=1;
EA=1;
if(flag_start==0)
{
while(1)
{
qigang_left=0; //机械手左移
while(1) //左移循环,等待左移的传感器开关
{
if(journey_left==0) //左面的传感器开关接通
{
qigang_left=1; //停止左移
qigang_down=0; //机械手下降
while(1) //下降循环,等待下降的传感器开关
{
if(journey_down==0) //下降的传感器开关接通
{
qigang_down=1; //停止下降
qigang_shesha=0; //射沙
delay(2); //射沙延时
qigang_shesha=1; //射沙关
delay(5); //排气延时
qigang_up=0; //开始上升
while(1) //上升循环,等待上升的传感器开关
{
if(journey_up==0) //上升的传感器开关接通
{
qigang_up=1; //停止上升
qigang_right=0; //向右移动
while(1)
{
if(journey_right==0) //右面的传感器开关接通
{
qigang_right=1; //停止向右
/***************就是这里,一个按钮控制是否跳出不执行下面程序**********/
qigang_down=0; //开启下降
while(1) //下降循环,等待下降的传感器开关
{
if(journey_down==0) //下降的传感器开关接通
{
qigang_down=1; //停止下降
qigang_shesha=0; //射沙
delay(2); //射沙延时
qigang_shesha=1; //射沙关
delay(5); //排气延时
qigang_up=0; //开始上升
while(1) //上升循环,等待上升的传感器开关
{
if(journey_up==0) //上升的传感器开关接通
{
qigang_up=1; //停止上升
flag_start=1;
break;
}
}
break;
}
}
break;
}
}
break;
}
}
break;
}
}
break;
}
}
break;
}
}
}
|