1. 启动键 低电平输入启动运行程序 2. P2.0 输出低电平 3秒内要求P1.1收到低电平,如果3S计时到后没有收到低电平
P2.1 输出低电平2秒高电平2秒闪动,P2.2输出低电平
停止下一步程序操作直到按停止键停止
如果P1.1在3S内收到低电平, 则延时1S后P2.0输出高电平
3. 当P2.0输出高电平时,如果P1.1 3S计时后没有收到高电平
P2.1 输出低电平2秒高电平2秒闪动, P2.2输出低电平
停止下一步操作
如果P1.1在3S内收到高电平,延时1S 再运行2到3步循环处理。
4. P1.2 为停止键 所有端口输出高电平。
每一步按停止键都有效。
STC89C52RC 芯片 40PIN
#include<at89x52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
void delay(uint z)//1MS 延时
{
uint a,b;
for(a=z;a>0;a--)
for(b=120;b>0;b--);
}
bit biaozhi;
bit biaozhi1;
main()
{
uint i;
while(1)
{
if(P1_0==0) //开始按键按下
{
delay(10);
if(P1_0==0)
{
biaozhi=1;
}
}
if(biaozhi)//按了按键开始运行
{
P2_0=0;
biaozhi1=0;
while(P1_1==0);
for(i=0;i<300;i++)//检测3秒内是否收到低电平
{
delay(10);
if(P1_1==0)
{
biaozhi1=1;
break;
}
if(P1_2==0)
{
delay(10);
if(P1_2==0)
{
P1_0=1;
P1_1=1;
P1_2=1;
P2_0=1;
P2_1=1;
P2_1=1;
biaozhi=0;
break;
}
}
}
if(biaozhi1==0)//3秒没有低电平P21输出低电平并停止
{
P2_1=0;
while(1)
{
if(P1_2==0)
{
delay(10);
if(P1_2==0)
{
P1_0=1;
P1_1=1;
P1_2=1;
P2_0=1;
P2_1=1;
P2_1=1;
biaozhi=0;
break;
}
}
}
}
if(biaozhi1==1) //3秒有低电平延时1秒后P20高电平 再延时1秒 然后回到2循环
{
for(i=0;i<100;i++)// 延时1秒
{
delay(10);
if(P1_2==0)
{
delay(10);
if(P1_2==0)
{
P1_0=1;
P1_1=1;
P1_2=1;
P2_0=1;
P2_1=1;
P2_1=1;
biaozhi=0;
break;
}
}
}
{
P2_0=1;
biaozhi1=0;
while(P1_1==1);
for(i=0;i<300;i++)//检测3秒内是否收到低电平
{
delay(10);
if(P1_1==1)
{
biaozhi1=1;
break;
}
if(P1_2==0)
{
delay(10);
if(P1_2==0)
{
P1_0=1;
P1_1=1;
P1_2=1;
P2_0=1;
P2_1=1;
P2_1=1;
biaozhi=0;
break;
}
}
}
if(biaozhi1==1)//3秒没有低电平P21输出低电平并停止
{
P2_1=0;
while(1)
{
if(P1_2==0)
{
delay(10);
if(P1_2==0)
{
P1_0=1;
P1_1=1;
P1_2=1;
P2_0=1;
P2_1=1;
P2_1=1;
biaozhi=0;
break;
}
}
}
}
if(biaozhi1==0) //3秒有低电平延时1秒后P20高电平 再延时1秒 然后回到2循环
{
for(i=0;i<100;i++)// 延时1秒
{
delay(10);
if(P1_2==1)
{
delay(10);
if(P1_2==1)
{
P1_0=1;
P1_1=1;
P1_2=1;
P2_0=1;
P2_1=1;
P2_1=1;
biaozhi=0;
break;
}
}
}
P2_0=1;
for(i=0;i<100;i++)
{
delay(10);
if(P1_2==0)
{
delay(10);
if(P1_2==0)
{
P1_0=1;
P1_1=1;
P1_2=1;
P2_0=1;
P2_1=1;
P2_1=1;
biaozhi=0;
break;
}
}
}
}
}
}
}
}
}
|