2049|1

71

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

帮我看看这段键盘扫描程序 [复制链接]

帮我看看这段键盘扫描程序,程序设置按键按下时变量置位,按键放下时按变量

返回值,可是我在主程序用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
   }
}
}
}

最新回复

你在检查的时候,不用判断key==0了吧。 代码有点乱 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         }         }         } }复制代码  详情 回复 发表于 2008-3-21 11:57
点赞 关注

回复
举报

65

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
你在检查的时候,不用判断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. }
复制代码
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表