江上酒酒 发表于 2024-10-30 13:56:34

一个小问题 | 已解决

用STC32G12K128的试验箱写程序,按下再松开P33,P60亮,按下再松开P33,P60灭,一直循环下去,但是最后结果有些奇怪,有知道的吗


#include <STC32G.H>
void main()
{
      unsigned int a=1,b=1;
      P3M0=0X00;
      P3M1=0X00;
      P4M0=0X00;
      P4M1=0X00;
      P6M0=0X00;
      P6M1=0X00;
      P40=0;
      while(1)
      {
                if(P33==0&&P60==1)
                {
                        a=2;
                }
                if(P33==1&&a==2)
                {
                        P60=0;
                }
                if(P33==0&&P60==0)
                {
                        a=3;
                }
                if(P33==1&&a==3)
                {
                        P60=1;
                }
      }
}

邮箱 发表于 2024-10-30 14:11:06

试一下
if(!P33)
{
10ms延时;//消抖
if(!P33)
{
    while(!P33);
    P60=!P60;
}
}

soma 发表于 2024-10-30 14:14:30

这个ai写都可以实现的。不用怎么复杂

bkeuqoaq 发表于 2024-10-30 14:29:30

#include <STC32G.H>
void main()
{
      unsigned int a=0;
      P3M0=0X00;
      P3M1=0X00;
      P4M0=0X00;
      P4M1=0X00;
      P6M0=0X00;
      P6M1=0X00;
      P40=0;
      while(1)
      {
                        if (a == 0)
                        {
                                if (!P33)
                                {
                                        a = 1;
                                }
                        }
                        else
                        if (a == 1)
                        {
                                if (P33)
                                {
                                        a = 0;
                                        P60 = !P60;
                                }
                        }
                        else
                        {
                                a = 0;
                        }
                       
                        Delay10ms();
      }
}

21cnsound 发表于 2024-10-30 14:30:59

先不说讨论写的逻辑是否最优。

结果没有达到预期,应该是while(1)中没有加延迟进行防抖处理,按下、抬起的“毛刺”被正常处理了,可以加10ms左右的延迟效果应该有改善。

江上酒酒 发表于 2024-10-30 15:00:29

谢谢各位,问题解决了

祁祁祁 发表于 2024-11-4 10:44:41

没记错的话,普通的按键都是要加消抖的
页: [1]
查看完整版本: 一个小问题 | 已解决