怎么给线旋转法扫描矩阵键盘加延时?不想用delay(),打算用定时器延时防抖,或着加状态机,该怎么加呢?

2019-07-15 16:57发布

本帖最后由 zdy123456 于 2015-5-31 23:06 编辑

我写了一个矩阵扫描程序,proteus下运行还可以,主要的思想是建立两个变量keylast,keynow,当定时器每计时10ms时检查if(P1 != 0x0f),进入扫描程序,把扫描后的键值赋给keynow,if(keynow != keylast){keychange =1;keynow = keylast;},之后通过keychang的变化去控制其他任务,其他任务完成后keychange清零。具体程序如下:
if(g_bSystemtime10mS == 1)
                 {
                     if(0x0f != P1)
                    {
                                 keynow = P1;
                                 switch(keynow)
                                 {
                                         case 0x07: j = 3; break;
                                         case 0x0b: j = 2; break;
                                         case 0x0d: j = 1; break;
                                         case 0x0e: j = 0; break;
                                         default: break;
                                 }
                    
                                 P1 = 0XF0;                                                                  
                                 keynow = P1;
                                 switch(keynow)
                                 {
                                         case 0x70: i = 3; break;
                                         case 0xb0: i = 2; break;
                                         case 0xd0: i = 1; break;
                                         case 0xe0: i = 0; break;
                                         default: break;
                                 }
                                 P1 = 0x0f;
                                 keynow = MatNum[j];
                                 if(keynow != keyLast)
                                 {
                                         keyChange = 1;
                                         keyLast = keynow;
                                 }

                }g_bSystemTime10mS = 0;
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。