怎么做矩阵键盘的连续输入

2020-02-02 09:39发布

本帖最后由 zengdz 于 2012-10-23 16:37 编辑

   一个小项目里面有一个充值部分,通过键盘把要输入的数值显示在1602液晶上并且保存下来。但是我用大家常用的那种矩阵键盘扫描方法都不能实现,只显示一个按键输入就可以,但是要连续输入三个数字并且显示,总是有问题,里面应该有不能判断按键次数的问题,但是怎么判断呢?还有一种是中断法,但是没有找到可参考的资料,哪位有相关资料可否提供下,谢了!
  下面是我用的那种常用的扫描方法:
  void Keycan(void) //按键扫描程序 P34--P37为行线 P30--P33为列线
{
  unsigned char r, c;
  P3 = 0xF0;      // 发全0行列扫描码,列线输入
  if(P3 != 0xF0) // 若有键按下
  {
//      delay(10);// 延时去抖动
      r=P3;                   //保存行输入码
          P3=0x0f;           // 发全0行列扫描码,列线输入
          if(P3!=0x0f) // 若有键按下
          {
              c=P3;           //保存列输入码
          }
          Key=(r+c);   //键盘编码
//          delay(10);// 延时去抖动
  }  
}

/********对扫描到的键盘编码进行转换处理,变成数据键盘S1-S16*******/

unsigned char KeyDeal(unsigned char Key)
{
   unsigned char S;
   if(Key!=0)
{
   
                   switch(Key)
                   {
                   case 0xe7: S=1; break;
                   case 0xeb: S=2; break;
                   case 0xed: S=3; break;
                   case 0xee: S=4; break;
                   case 0xd7: S=5; break;
                   case 0xdb: S=6; break;
                   case 0xdd: S=7; break;
                   case 0xde: S=8; break;
                   case 0xb7: S=9; break;
                   case 0xbb: S=10; break;
                   case 0xbd: S=11; break;
                   case 0xbe: S=12; break;
                   case 0x77: S=13; break;
                   case 0x7b: S=14; break;
                   case 0x7d: S=15; break;
                   case 0x7e: S=16; break;
                   default: break;
                   }
         
  }
  return (S); // 返回键编码
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
devcang
1楼-- · 2020-02-02 12:26
最简单,延时间隔一下,连续检测
zengdz
2楼-- · 2020-02-02 13:50
 精彩回答 2  元偷偷看……
renwocai
3楼-- · 2020-02-02 18:29
在这个基础上,用状态机,做松手检测
zengdz
4楼-- · 2020-02-02 19:11
参考一个计算器的基本解决了、

一周热门 更多>