怎么给线旋转法扫描矩阵键盘加延时?不想用delay(),打算用定时器延时防抖,或着加状态机,该怎么加呢?
时间:10-02
整理:3721RD
点击:
我写了一个矩阵扫描程序,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;
}
已经找到资料了,附链接http://bbs.elecfans.com/forum.ph ... &extra=page%3D1