标题: 求指导单片机程序思路 三个输入IO口,检测低电平 [打印本页]

作者: xhsh    时间: 2023-10-28 19:51
标题: 求指导单片机程序思路 三个输入IO口,检测低电平
各位好 我是小白
现在情况是这样的,
我有三个输入IO口,检测低电平
1.自动程序(电机自动正反转)
2.电机正转
3.电机饭庄

我在主函数while里边用了三个 if 语句
如果1是低电平  执行循环程序
如果2是低电平  执行电机正转
如果3是低电平  执行电机反转

但是我现在遇到的问题是点完1按钮后他只运行了一个循环就不动了 ,我的想法是要求他一直执行该循环语句  直到断电

我知道问题点出在哪里 但是就是不知道如何解决,请大家帮帮忙 提点一下


作者: xhsh    时间: 2023-10-28 19:51
对了是32单片机
作者: XLinliY.Zhang    时间: 2023-10-28 23:10
if(按钮x按下)
  记录状态为x

if(时间到了)
   switch(x)
     case 正转
     case 反转
     case if(不是反转)反转else正转
时间可以用定时器定时,或者while里面添加一个固定时间的循环,然后记录循环次数
作者: 188610329    时间: 2023-10-29 01:35
unsigned char status;

void main()
{
    while(1)
    {
         if(P10 == 0)  status =0;
         if(P11 == 0)  status =1;
         if(P12 == 0)  status =2;
         switch(status)
         {
                case 0:
                //xxxxxxxxxxxxxxxxxxxxx
                break;
                case 1:
                //xxxxxxxxxxxxxxxxxxxxx
                break;
                case 2:
                //xxxxxxxxxxxxxxxxxxxxx
                break;
                default:
                break;
         }
    }
}
作者: wulin    时间: 2023-10-29 08:11
楼主如果用的是普通按钮而不是自锁按钮,就需要用一个变量记忆当前按钮操作状态,用这个变量控制后续运行状态。否则按钮松手就只能运行一个循环。当再次判断3个按钮时就都是高电平,电机就不能持续既定工作状态。另外还需要有退出机制,否则除了断电停不下来。
作者: xhsh    时间: 2023-10-29 09:41
这是我昨天写的另一个(附件) 今天发现新的问题 在没有给B3输入低电平的情况下,循环程序开机就执行了,按下复位功能后,过一会又直接跳入xunhuan这段程序了

1.png (91.14 KB, 下载次数: 36)

1.png

2.png (28.07 KB, 下载次数: 31)

2.png

作者: xhsh    时间: 2023-10-29 09:44
XLinliY.Zhang 发表于 2023-10-28 23:10
if(按钮x按下)
  记录状态为x

和时间没有关系的,就是跳入不了循环程序 后边我自己试着写另一个方法 虽然实验成功了  但是发现了另一个问题 头大了  您可以帮忙看看我下边回复了一个帖子 那是另一种问题
作者: 大漠落日    时间: 2023-10-29 11:32
这个不难,小问题,
作者: xhsh    时间: 2023-10-30 16:09
wulin 发表于 2023-10-29 08:11
楼主如果用的是普通按钮而不是自锁按钮,就需要用一个变量记忆当前按钮操作状态,用这个变量控制后续运行状 ...

是的 是的 我现在想要停下就直接拔电源         您有办法推荐吗  
作者: xhsh    时间: 2023-10-30 16:10
大漠落日 发表于 2023-10-29 11:32
这个不难,小问题,

有解决方案吗 可以给点建议吗
作者: yzwzfyz    时间: 2023-11-1 16:43
1、做个10ms中断。
2、每次中断读入三个端口状态存入NEW,与变量LAST(是上次读入的数据,初化设置为全1)做比较。
2.1、NEW = LAST:什么也不做。
2.2、NEW <> LAST (有变化了),按照你的逻辑执行。(改变运行状态,正、反、停。)
3、令 LAST = NEW,为下次比较输入作依据。
更高级一点,加入按键防弹动:(这个不在此详细说明)
加个计次,5次按键组合的数据相同,认为是真实按键状态。低于5次不作数(弹动)。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1