uchar key_scan()//判断按键是否按下
{
uchar x = 0;
P30 = 1; P31 = 1; P32 = 1; P33 = 1;
P44 = 0; P42 = 0; P35 = 0; P34 = 0;
if ((P30 == 0) || (P31 == 0) || (P32 == 0) || (P33 == 0))
{
x = 1;
}
else
{
x = 0;
}
return x;
}
uchar h_l_go() //行列扫描
{
uchar i, j;
for (i = 1; i < 5; i++) {
P3 = h_l[i];
P42 = 1;
P44 = 1;
_nop_();
_nop_();
if (P34 == 0)
{
Delay(10);
if (P34 == 0) {
j = 4;
while (P34 == 0);
return key_go1(i, j);
}
}
else if (P35 == 0)
{
Delay(10);
if (P35 == 0) {
j = 3;
while (P35 == 0);
return key_go1(i, j);
}
}
else if (P42 == 0)
{
Delay(10);
if (P42 == 0) {
j = 2;
while (P42 == 0);
return key_go1(i, j);
}
}
else if (P44 == 0)
{
Delay(10);
if (P44 == 0)
{
j = 1;
while (P44 == 0);
return key_go1(i, j);
}
}
}
return 0;
}
uchar key_go1(uchar i, uchar j)//行列扫描后要处理的事,
{
uchar xx = 0;
switch (i)
{
case 1:
{
switch (j)
{
case 1:
{
xx = 1;
break;
}
case 2:
{
xx = 2;
break;
}
case 3:
{
xx = 3;
break;
}
case 4:
{
xx = 4;
break;
}
}
break;
}
case 2:
{
switch (j)
{
case 1:
{
xx = 5;
break;
}
case 2:
{
xx = 6;
break;
}
case 3:
{
xx = 7;
break;
}
case 4:
{
xx = 8;
break;
}
}
break;
}
case 3:
{
switch (j)
{
case 1:
{
xx = 9;
break;
}
case 2:
{
xx = 10;
break;
}
case 3:
{
xx = 11;
break;
}
case 4:
{
xx = 12;
break;
}
}
break;
}
case 4:
{
switch (j)
{
case 1:
{
xx = 13;
break;
}
case 2:
{
xx = 14;
break;
}
case 3:
{
xx = 15;
break;
}
case 4:
{
xx = 16;
break;
}
}
break;
}
}
return xx;
}
void key_go(uchar i)//按键按下做的事
{
switch (i)
{
case 1:
{
break;
}
case 2:
{
break;
}
case 3:
{
break;
}
case 4:
{
break;
}
case 5:
{
break;
}
case 6:
{
break;
}
case 7:
{
break;
}
case 8:
{
break;
}
case 9:
{
break;
}
case 10:
{
break;
}
case 12:
{
break;
}
case 13:
{
break;
}
case 14:
{
break;
}
case 15:
{ gomain1++;
if(gomain1>=3)
{gomain1=0;
}
break;
}
case 16:
{
break;
}
}
}
void key_togo()
{
if(key_scan())//有按键按下,按键检测
{ key_shake++;//去抖时间累计处理。
}
else//没有按键按下,
{
key_shake=0;
}
if(key_shake==2)//短按
{//这里加短按标志
if(key_scan())
{
keynum=h_l_go();
}
key_go(keynum);
}
else
{ if(key_shake>=150)长按
{
key_shake=151;
}
}
}
uchar key_scan()//判断按键是否按下
{
uchar x = 0;
P30 = 1; P31 = 1; P32 = 1; P33 = 1;
P44 = 0; P42 = 0; P35 = 0; P34 = 0;
if ((P30 == 0) || (P31 == 0) || (P32 == 0) || (P33 == 0))
{
x = 1;
}
else
{
x = 0;
}
return x;
}
uchar h_l_go() //行列扫描
{
uchar i, j;
for (i = 1; i < 5; i++) {
P3 = h_l[i];
P42 = 1;
P44 = 1;
_nop_();
_nop_();
if (P34 == 0)
{
Delay(10);
if (P34 == 0) {
j = 4;
while (P34 == 0);
return key_go1(i, j);
}
}
else if (P35 == 0)
{
Delay(10);
if (P35 == 0) {
j = 3;
while (P35 == 0);
return key_go1(i, j);
}
}
else if (P42 == 0)
{
Delay(10);
if (P42 == 0) {
j = 2;
while (P42 == 0);
return key_go1(i, j);
}
}
else if (P44 == 0)
{
Delay(10);
if (P44 == 0)
{
j = 1;
while (P44 == 0);
return key_go1(i, j);
}
}
}
return 0;
}
uchar key_go1(uchar i, uchar j)//行列扫描后要处理的事,
{
uchar xx = 0;
switch (i)
{
case 1:
{
switch (j)
{
case 1:
{
xx = 1;
break;
}
case 2:
{
xx = 2;
break;
}
case 3:
{
xx = 3;
break;
}
case 4:
{
xx = 4;
break;
}
}
break;
}
case 2:
{
switch (j)
{
case 1:
{
xx = 5;
break;
}
case 2:
{
xx = 6;
break;
}
case 3:
{
xx = 7;
break;
}
case 4:
{
xx = 8;
break;
}
}
break;
}
case 3:
{
switch (j)
{
case 1:
{
xx = 9;
break;
}
case 2:
{
xx = 10;
break;
}
case 3:
{
xx = 11;
break;
}
case 4:
{
xx = 12;
break;
}
}
break;
}
case 4:
{
switch (j)
{
case 1:
{
xx = 13;
break;
}
case 2:
{
xx = 14;
break;
}
case 3:
{
xx = 15;
break;
}
case 4:
{
xx = 16;
break;
}
}
break;
}
}
return xx;
}
void key_go(uchar i)//按键按下做的事
{
switch (i)
{
case 1:
{
break;
}
case 2:
{
break;
}
case 3:
{
break;
}
case 4:
{
break;
}
case 5:
{
break;
}
case 6:
{
break;
}
case 7:
{
break;
}
case 8:
{
break;
}
case 9:
{
break;
}
case 10:
{
break;
}
case 12:
{
break;
}
case 13:
{
break;
}
case 14:
{
break;
}
case 15:
{ gomain1++;
if(gomain1>=3)
{gomain1=0;
}
break;
}
case 16:
{
break;
}
}
}
void key_togo()
{
if(key_scan())//有按键按下,按键检测
{ key_shake++;//去抖时间累计处理。
}
else//没有按键按下,
{
key_shake=0;
}
if(key_shake==2)//短按
{//这里加短按标志
if(key_scan())
{
keynum=h_l_go();
}
key_go(keynum);
}
else
{ if(key_shake>=150)长按
{
key_shake=151;
}
}
}
暂无评论内容