找回密码
 立即注册
查看: 503|回复: 4

求助如何用一个输入端口高低电平延时关闭两个输出端口

[复制链接]
  • 打卡等级:偶尔看看II
  • 打卡总天数:25
  • 最近打卡:2025-03-25 22:26:27

6

主题

17

回帖

174

积分

注册会员

积分
174
发表于 2023-12-23 10:43:38 | 显示全部楼层 |阅读模式
写一个这样的程序,当输入引脚为高电平时,控制两个输出引脚为一个引脚高电平一个引脚低电平,然后让两个输出引脚输出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置低电平        }    }}

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:25
  • 最近打卡:2025-03-25 22:26:27

6

主题

17

回帖

174

积分

注册会员

积分
174
发表于 2023-12-23 10:48:34 | 显示全部楼层
#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置低电平     
                    }   
           }
}
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2023-12-23 11:29:50 | 显示全部楼层
1.输入引脚不是你自己控制的么?
2.用的什么单片机,要注意有些单片机的IO模式默认高阻输入,使用引脚时需要重新配置工作模式,这个看手册去
3.你得一会儿开一会儿关的描述需要再精确一点,,,
4.看你的代码,发现在端口输出0之后 没有延时,,那么可能的运行情况就变成,
执行完 outPin1 = 0;    // 输出引脚1置低电平           
          outPin2 = 0;    // 输出引脚2置低电平  
这两条代码后,立马又根据输入端口的电平打开的输出端口
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:25
  • 最近打卡:2025-03-25 22:26:27

6

主题

17

回帖

174

积分

注册会员

积分
174
发表于 2023-12-23 11:53:36 | 显示全部楼层
就STC STC15W204S这个为例。引脚是自己控制的我的意思是说输入引脚为高的时候输出引脚一个脚为高一个为低延时30秒后输出引脚都为0,输出引脚为低电平是输出一个为低一个为高延时30秒后输出引脚也都为0.但又在while (1)里所以就一会开一会关。就是有没有办法在 循环里不管输入端是高电平只延时一次等下次是低电平的时候输出端再翻转。因为输入的电平是固定的持续的。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2023-12-23 12:07:06 | 显示全部楼层
hua77*** 发表于 2023-12-23 11:53
就STC STC15W204S这个为例。引脚是自己控制的我的意思是说输入引脚为高的时候输出引脚一个脚为高一个为低延 ...

这意思,,,那你可能需要再增加一个标志位了
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 06:47 , Processed in 0.295609 second(s), 70 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表