关于程序运行周期的问题,求助
时间:10-02
整理:3721RD
点击:
我用的是STC52的单片机,写了一些程序,主要有3个问题。1,在不安全的情况下,绿灯会在红灯亮起一会后亮,绿灯应该不亮
2,怎么实现三个红灯的亮灭同时进行。3,在进行一次运行之后,红灯绿灯就保持原来的状态不在改变,我希望能够根据当时的输入做出不同的输出。
求各位大神帮我看看吧!
#include<reg52.h>
sbit P1_0 = P1^0; /*安全带1号,人体感应传感器信号的输入*/
sbit P1_1 = P1^1; /*安全带1号,锁扣闭合信号的输入*/
sbit P1_2 = P1^2; /*安全带2号,人体感应传感器信号的输入*/
sbit P1_3 = P1^3; /*安全带2号,锁扣闭合信号的输入*/
sbit P1_4 = P1^4; /*安全带3号,人体感应传感器信号的输入*/
sbit P1_5 = P1^5; /*安全带3号,锁扣闭合信号的输入*/
sbit P3_0 = P3^0; /*对应蜂鸣器引脚*/
sbit P3_1 = P3^1; /*对应安全带1号的警报灯*/
sbit P3_2 = P3^2; /*对应安全带2号的警报灯*/
sbit P3_3 = P3^3; /*对应安全带3号的警报灯*/
sbit P3_4 = P3^4; /*继电器对应的引脚*/
void delay();
void main (void)
{
unsigned int a,b,c,n;
while(1)
{
if(P1_0==1&&P1_1==1) /*判断电压可能要根据实际情况更改*/
a=0; /*表明安全带1号不符合要求,需要报警*/
else a=1;
if(P1_2==1&&P1_3==1)
b=0; /*表明安全带2号不符合要求,需要报警*/
else b=1;
if(P1_4==1&&P1_5==1)
c=0; /*表明安全带3号不符合要求,需要报警*/
else c=1;
if(a==1&&b==1&&c==1)
n=1; /*在3个安全带都符合要求的情况下,遥控器才会接通*/
else n=0;
if(n==1)
P3_4=0; /*继电器接通*/
else
{
P3_4=1;
P3_0=0; /*蜂鸣器响*/
if(a==0)
P3_1=0; /*安全带1号的警报灯亮*/
else P3_1=1;
if(b==0)
P3_2=0; /*安全带2号的警报灯亮*/
else P3_2=1;
if(c==0)
P3_3=0; /*安全带3号的警报灯亮*/
else P3_3=1;
delay();
delay(); /*延时,蜂鸣器不响*/
P3_0=1;
}
}
}
void delay() /*延时程序*/
{
unsigned int x,y;
for(x=100;x>0;x--)
for(y=400;y>0;y--);
}
2,怎么实现三个红灯的亮灭同时进行。3,在进行一次运行之后,红灯绿灯就保持原来的状态不在改变,我希望能够根据当时的输入做出不同的输出。
求各位大神帮我看看吧!
#include<reg52.h>
sbit P1_0 = P1^0; /*安全带1号,人体感应传感器信号的输入*/
sbit P1_1 = P1^1; /*安全带1号,锁扣闭合信号的输入*/
sbit P1_2 = P1^2; /*安全带2号,人体感应传感器信号的输入*/
sbit P1_3 = P1^3; /*安全带2号,锁扣闭合信号的输入*/
sbit P1_4 = P1^4; /*安全带3号,人体感应传感器信号的输入*/
sbit P1_5 = P1^5; /*安全带3号,锁扣闭合信号的输入*/
sbit P3_0 = P3^0; /*对应蜂鸣器引脚*/
sbit P3_1 = P3^1; /*对应安全带1号的警报灯*/
sbit P3_2 = P3^2; /*对应安全带2号的警报灯*/
sbit P3_3 = P3^3; /*对应安全带3号的警报灯*/
sbit P3_4 = P3^4; /*继电器对应的引脚*/
void delay();
void main (void)
{
unsigned int a,b,c,n;
while(1)
{
if(P1_0==1&&P1_1==1) /*判断电压可能要根据实际情况更改*/
a=0; /*表明安全带1号不符合要求,需要报警*/
else a=1;
if(P1_2==1&&P1_3==1)
b=0; /*表明安全带2号不符合要求,需要报警*/
else b=1;
if(P1_4==1&&P1_5==1)
c=0; /*表明安全带3号不符合要求,需要报警*/
else c=1;
if(a==1&&b==1&&c==1)
n=1; /*在3个安全带都符合要求的情况下,遥控器才会接通*/
else n=0;
if(n==1)
P3_4=0; /*继电器接通*/
else
{
P3_4=1;
P3_0=0; /*蜂鸣器响*/
if(a==0)
P3_1=0; /*安全带1号的警报灯亮*/
else P3_1=1;
if(b==0)
P3_2=0; /*安全带2号的警报灯亮*/
else P3_2=1;
if(c==0)
P3_3=0; /*安全带3号的警报灯亮*/
else P3_3=1;
delay();
delay(); /*延时,蜂鸣器不响*/
P3_0=1;
}
}
}
void delay() /*延时程序*/
{
unsigned int x,y;
for(x=100;x>0;x--)
for(y=400;y>0;y--);
}
红灯绿灯的在哪点亮没看见呢
安全带1号,2号,3号的警报灯都是红灯,继电器后面也接了一个绿灯,要是继电器接通了,那绿灯就亮了
就是我认为继电器和那三个红灯是不可能同时接通的,但是事实是红灯亮了一段时间后绿灯自动亮了
