帮我看看这段键盘扫描程序

yoshiki117   2008-3-20 19:09 楼主
帮我看看这段键盘扫描程序,程序设置按键按下时变量置位,按键放下时按变量

返回值,可是我在主程序用key_val=keyscan()调用时却出现问题,当没键按下时

键盘扫描程序不执行语句,只执行判断语句,这是函数返回的是什么值,是返回

void型还是0,如果返回void型,key_val值是否改变,是保持不变还是变成0,

当我按下键未释放时主程序却有动作,是否程序有执行语句和只执行判断语句

的返回值不一样,望迷津,谢谢!true=1,false=0;key是unsigned char ,
是用来判断哪个键按下的,按键接法是一个口接一个按键接地



uchar keyscan(void)
{
P1_0=true; P1_1=true; P1_2=true;
if(key==0){
if(P1_0==false)
{
P1_0=true;
dispdelay(2500);
  if(P1_0==false){
     key=1;   //A键按下
  }
}
}
if(P1_0==true){
if (key==1)
{P1_0=true;
  dispdelay(2500);
  if(P1_0==true)
   { key=0;
     return(1); //获得A键:1
   }
}
}

if(key==0){
if(P1_1==false)
{
P1_1=true;
dispdelay(2500);
  if(P1_1==false){
     key=2;
  }
}
}
if(P1_1==true){
if (key==2)
{P1_1=true;
  dispdelay(2500);
  if(P1_1==true)
   { key=0;
     return(2); //获得B键:2
   }
}
}

if(key==0){
if(P1_2==false)
{
P1_2=true;
dispdelay(2500);
  if(P1_2==false){
     key=3;
  }
}
}
if(P1_2==true){
if (key==3)
{P1_2=true;
  dispdelay(2500);
  if(P1_2==true)
   { key=0;
     return(3); //获得C键:3
   }
}
}
}

回复评论 (1)

你在检查的时候,不用判断key==0了吧。

代码有点乱

  1. uchar keyscan(void)
  2. {
  3.         P1_0=true; P1_1=true; P1_2=true;
  4.         if(key==0)
  5.         {
  6.                 if(P1_0==false)
  7.                 {
  8.                         P1_0=true;
  9.                         dispdelay(2500);
  10.                         if(P1_0==false)
  11.                         {
  12.                                 key=1;   //A键按下
  13.                         }
  14.                 }
  15.         }
  16.         if(P1_0==true)
  17.         {
  18.                 if (key==1)
  19.                 {
  20.                         P1_0=true;
  21.                         dispdelay(2500);
  22.                         if(P1_0==true)
  23.                         {
  24.                                 key=0;
  25.                                 return(1); //获得A键:1
  26.                         }
  27.                 }
  28.         }

  29.         if(key==0){
  30.         if(P1_1==false)
  31.         {
  32.         P1_1=true;
  33.         dispdelay(2500);
  34.         if(P1_1==false){
  35.         key=2;
  36.         }
  37.         }
  38.         }
  39.         if(P1_1==true){
  40.         if (key==2)
  41.         {P1_1=true;
  42.         dispdelay(2500);
  43.         if(P1_1==true)
  44.         { key=0;
  45.         return(2); //获得B键:2
  46.         }
  47.         }
  48.         }

  49.         if(key==0){
  50.         if(P1_2==false)
  51.         {
  52.         P1_2=true;
  53.         dispdelay(2500);
  54.         if(P1_2==false){
  55.         key=3;
  56.         }
  57.         }
  58.         }
  59.         if(P1_2==true){
  60.         if (key==3)
  61.         {P1_2=true;
  62.         dispdelay(2500);
  63.         if(P1_2==true)
  64.         { key=0;
  65.         return(3); //获得C键:3
  66.         }
  67.         }
  68.         }
  69. }
点赞  2008-3-21 11:57
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复