有一些语句没有弄明白,在后面我会有标注,可以帮我一下吗?我是新人

void matrixkeyscan()
{
uchar temp,key; (temp在这个程序中有什么作用)
P1=0xfe; (这个语句是如何判断我按了那个独立键盘上面的键)
temp=P1; (这句是用来判断按的是那个键吗?)
temp=temp&0xf0; (这句话有什么作用)
if(temp!=0xf0) (这句也不懂)
{
delayms(10);
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xee:
key=13;
break;
case 0xde:
key=12;
break;
case 0xbe:
key=11;
break;
case 0x7e:
key=10;
break;
}
while(temp!=0xf0) (这个循环有什么作用)
{
temp=P1;
temp=temp&0xf0;
}
display(key);
}
}
下面还有,但是太多了,基本是一样的,这一个程序主要是想按一个键然后数码管对应显示数字

后面没有备注的就是明白的,如果不介意,可以加我qq,517075232,谢谢,我就只有10分,全给你了,新手求教了

因为看不到完整源代码,我也只能猜测……

void matrixkeyscan()
{
    uchar temp,key;  //temp用来存放key的高4位或者低4位,总之是一半
    P1=0xfe;        (这个语句是如何判断我按了那个独立键盘上面的键)
    temp=P1;         //temp先存完整的key
    temp=temp&0xf0;  //这样temp里面高4位留下来了,低4位被抹成零了。
    if(temp!=0xf0)   //测试高4位是不是全是1,如果不全是1,证明有按键按下
    {                //从这个代码段可以看出,被按下某个按键,某个指定位就会为0
      delayms(10);   //延时间10毫秒,就是0.01秒
      temp=P1;       //再取一次按下的按键
      temp=temp&0xf0; //还是把高4位留下,低4位抹去
      if(temp!=0xf0)  //如果这时没有键被按下,则忽略。结合上面的代码,目的为了忽略按下时间少于10毫秒的敲击
      {
        temp=P1;      //再取一遍按键,这次当作有效按键
        switch(temp)  //开始判断按下是哪个键了
        {              //后面根据具体按键是那个值,用该按键的代码给key赋值
          case 0xee:  //如果按下的是11101110位置,就是13号键
               key=13;
               break;
          case 0xde:
               key=12;
               break;
          case 0xbe:
               key=11;
               break;
          case 0x7e:
               key=10;
               break;
         }
         while(temp!=0xf0) //测试按键是否抬起
         {                   //如果按键没有抬起,循环去取按键值测试,直到发现已经抬起按键则停止循环
           temp=P1;
           temp=temp&0xf0;
         }
        display(key);      // 用找到的按键代码去显示这个按键
      }
    }

大概就是这样吧……

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