一个小问题 | 已解决
用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;
}
}
}
试一下
if(!P33)
{
10ms延时;//消抖
if(!P33)
{
while(!P33);
P60=!P60;
}
} 这个ai写都可以实现的。不用怎么复杂 #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();
}
} 先不说讨论写的逻辑是否最优。
结果没有达到预期,应该是while(1)中没有加延迟进行防抖处理,按下、抬起的“毛刺”被正常处理了,可以加10ms左右的延迟效果应该有改善。 谢谢各位,问题解决了 没记错的话,普通的按键都是要加消抖的
页:
[1]