下面程序中 if(s1!=key1),key1=s1;该怎么理解,为什么缺少其中的一个,按键就不能按一下加1

sbit s1=P1^0;
unsigned char key1=1;
void keyscan()
{
if(s1!=key1)
{
delay(10);//延时10 ms
if(s1==0)
{
day++;
}
key1=s1;
}
}

s1!=key1
这个是判断s1和key1是否不相等,不相等的话,为真;相等,则为假

key1=s1
这个是直接赋值,将s1的值赋给key1,如果s1的值不为0,那么整个表达式的的值恒为真,就没有判断的意义了追问

你看我这样理解对不对
当按键按下时,s1为0,而key1为1,所以为真,然后执行下面的语句,当执行key1=s1时,将s1的值赋给key1,然后再去执行if(s1!=key1)进行判断表达式是否为真。

追答

你这个按键消抖写的就有问题

 if(s1!=key1)
  { 
    delay(10);//延时10 ms
   if(s1==0)//这个判断根本就没有意义
   {
   day++;
   } 
   key1=s1;
  }

应该是

 if(!key1)
  { 
    delay(10);//延时10 ms
   if(!key1)
   {
   day++;
   } 
   while(!key1);
   delay(10);//延时10 ms
   while(!key1);
  }

温馨提示:答案为网友推荐,仅供参考
相似回答