求助如何用一个输入端口高低电平延时关闭两个输出端口
写一个这样的程序,当输入引脚为高电平时,控制两个输出引脚为一个引脚高电平一个引脚低电平,然后让两个输出引脚输出30秒钟后全部置为低电平;当输入引脚为低电平时,控制两个输出引脚为一个引脚高电平一个引脚低电平,然后让两个输出引脚输出30秒钟后全部置为低电平;但是输入端口一直有不是高电平就是低电输入。用STC单片机怎么写?我写了一个 如下但一直在执行一会开一会关。
#include <reg51.h>sbit inputPin = P1^0; // 输入引脚 P1.0sbit outPin1 = P1^1; // 输出引脚1 P1.1sbit outPin2 = P1^2; // 输出引脚2 P1.2void delay(unsigned int ms){ unsigned int i, j; for (i = 0; i < ms; i++) for (j = 0; j < 123; j++); // 经测试此处的延迟值可以达到大致1ms的延时}void main(){ outPin1 = 0; // 初始化输出引脚1为低电平 outPin2 = 0; // 初始化输出引脚2为低电平 while (1) { if (inputPin == 1) // 输入引脚为高电平 { outPin1 = 1; // 输出引脚1置高电平 outPin2 = 0; // 输出引脚2置低电平 delay(30000); // 延时30秒 outPin1 = 0; // 输出引脚1置低电平 outPin2 = 0; // 输出引脚2置低电平 } else // 输入引脚为低电平 { outPin1 = 0; // 输出引脚1置低电平 outPin2 = 1; // 输出引脚2置高电平 delay(30000); // 延时30秒 outPin1 = 0; // 输出引脚1置低电平 outPin2 = 0; // 输出引脚2置低电平 } }}
#include <reg51.h>
sbit inputPin = P1^0; // 输入引脚 P1.0
sbit outPin1 = P1^1; // 输出引脚1 P1.1
sbit outPin2 = P1^2; // 输出引脚2 P1.2
void delay(unsigned int ms)
{
unsigned int i, j;
for (i = 0; i < ms; i++)
for (j = 0; j < 123; j++); // 经测试此处的延迟值可以达到大致1ms的延时
}
void main()
{
outPin1 = 0; // 初始化输出引脚1为低电平
outPin2 = 0; // 初始化输出引脚2为低电平
while (1)
{
if (inputPin == 1) // 输入引脚为高电平
{
outPin1 = 1; // 输出引脚1置高电平
outPin2 = 0; // 输出引脚2置低电平
delay(30000); // 延时30秒
outPin1 = 0; // 输出引脚1置低电平
outPin2 = 0; // 输出引脚2置低电平
}
else // 输入引脚为低电平
{
outPin1 = 0; // 输出引脚1置低电平
outPin2 = 1; // 输出引脚2置高电平
delay(30000); // 延时30秒
outPin1 = 0; // 输出引脚1置低电平
outPin2 = 0; // 输出引脚2置低电平
}
}
} 1.输入引脚不是你自己控制的么?
2.用的什么单片机,要注意有些单片机的IO模式默认高阻输入,使用引脚时需要重新配置工作模式,这个看手册去
3.你得一会儿开一会儿关的描述需要再精确一点,,,
4.看你的代码,发现在端口输出0之后 没有延时,,那么可能的运行情况就变成,
执行完 outPin1 = 0; // 输出引脚1置低电平
outPin2 = 0; // 输出引脚2置低电平
这两条代码后,立马又根据输入端口的电平打开的输出端口 就STC STC15W204S这个为例。引脚是自己控制的我的意思是说输入引脚为高的时候输出引脚一个脚为高一个为低延时30秒后输出引脚都为0,输出引脚为低电平是输出一个为低一个为高延时30秒后输出引脚也都为0.但又在while (1)里所以就一会开一会关。就是有没有办法在 循环里不管输入端是高电平只延时一次等下次是低电平的时候输出端再翻转。因为输入的电平是固定的持续的。
hua7718534 发表于 2023-12-23 11:53
就STC STC15W204S这个为例。引脚是自己控制的我的意思是说输入引脚为高的时候输出引脚一个脚为高一个为低延 ...
这意思,,,那你可能需要再增加一个标志位了
页:
[1]