矩阵接上去不能实现功能 是不是程序出现问题了,求大神帮忙看下 本人菜鸟。。。//键盘扫描子程序流程:
void vShowOneChar(unsigned char ucChar)
{
switch(ucChar)
{
case '0': vWriteData(0x30);break;
case '1': vWriteData(0x31);break;
case '2': vWriteData(0x32);break;
case '3': vWriteData(0x33);break;
case '4': vWriteData(0x34);break;
case '5': vWriteData(0x35);break;
case '6': vWriteData(0x36);break;
case '7': vWriteData(0x37);break;
case '8': vWriteData(0x38);break;
case '9': vWriteData(0x39);break;
case 'a': vWriteData(0x61);break;
case 'b': vWriteData(0x62);break;
case 'c': vWriteData(0x63);break;
case 'd': vWriteData(0x64);break;
case 'e': vWriteData(0x65);break;
case 'f': vWriteData(0x66);break;
default: break;
}
}
unsigned char ucKeyScan()
{
unsigned char ucTemp=0; //扫描状态暂存。
unsigned char ucRow=0,ucLine=0; //行号,列号。
for(ucLine=0;ucLine<4;ucLine++) //列扫描
{
SCANPORT=uca_LineScan[ucLine]; //输出扫描电位。
ucTemp=SCANPORT&0x0F; //输入扫描电位,并屏蔽高4位。
if(ucTemp!=0x0F)
{ //判断该列是否有按键按下。
switch(ucTemp)
{
case 0x0E: ucRow=10;break; //如果有,则判断行号。
case 0x0D: ucRow=20;break;
case 0x0B: ucRow=30;break;
case 0x07: ucRow=40;break;
default: ucRow=50;break;
}
break;
}
}
SCANPORT=0x0F; //恢复P1口
return ucRow+ucLine+1; //返回按键编码。格式为2位数,高位为行号,低位为列号。
}
void vKeyProcess(unsigned char ucKeyCode)
{
SendCommand(0xC4+uc_ClickCount);
if(a_key==1)
{
switch(ucKeyCode)
{
case 41:vShowOneChar('7');temp=7;break;
case 42:vShowOneChar('8');temp=8;break;
case 43:vShowOneChar('9');temp=9;break;
case 31:vShowOneChar('4');temp=4;break;
case 32:vShowOneChar('5');temp=5;break;
case 33:vShowOneChar('6');temp=6;break;
case 21:vShowOneChar('1');temp=1;break;
case 22:vShowOneChar('2');temp=2;break;
case 23:vShowOneChar('3');temp=3;break;
case 12:vShowOneChar('0');temp=0;break;
SendCommand(0xc4+uc_ClickCount);
SendCommand(0x0f);
}
switch(ucKeyCode)
{
case 44:/*vShowOneChar('c');*/temp=12;break; //'/'
case 34:/*vShowOneChar('d')*/temp=13;break; //'清除'
case 24:/*vShowOneChar('e')*/temp=14;break; //'下调'
case 14:/*vShowOneChar('f')*/temp=15;break; //'上调'
case 13:/*vShowOneChar('b');*/temp=11;break; //'返回'
case 11:/*vShowOneChar('a');*/temp=10;break; //'ON/C'
default:break;
}
if(temp==11) //判断按键与上一次所按的键是否相同。
{
delay_50ms(100);
if(uc_ClickCount<255) //同一个连续按下的次数小于255
{ uc_ClickCount++;
SendCommand(0xc3+uc_ClickCount);
SendCommand(0x0f);}
if(uc_ClickCount==3)
uc_ClickCount=0;
SendCommand(0xc4+uc_ClickCount);
SendCommand(0x0f);
}
if(temp<=9)
{switch(uc_ClickCount)
{
case 0:key_ctt[0]=temp;break;
case 1:key_ctt[1]=temp;break;
case 2:key_ctt[2]=temp;break;
default:break;
}
}
}
}
万分感谢!!
后面应该接低,你没接,所有是灰 {MOD}的!
一周热门 更多>