您的位置 首页 模拟

矩阵键盘扫描程序

#includereg52.h>#defineuintunsignedint#defineucharunsignedcharuchartemp,key=16;sbitduan=P2^6;sbit

#include
#define uint unsigned int
#define uchar unsigned char
uchar temp,key=16;
sbit duan=P2^6;
sbit wei=P2^7;
sbit led0=P1^0;
sbit led1=P1^1;

uchar code table[]=
{0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0x00};
void display(uchar);
uchar scan_key();
void delay(uchar);

void main()
{
wei=1;
P0=0x00;
wei=0;//位全选通

while(1)
{
display(scan_key());
}
}

void display(uchar x)
{

duan=1;
P0=table[x];
duan=0;
}

uchar scan_key()
{
P3=0xfe; //检测榜首横排
temp=P3;
while(temp!=0xfe)
{
delay(20);
while(temp!=0xfe) //防抖检测
{
switch(temp)
{
case 0xee:{key=0;led0=0;break;}
case 0xde:{key=1;led1=0;break;}
case 0xbe:{key=2;break;}
case 0x7e:{key=3;break;}
default:break;

}
while(temp!=0xfe) //松手检测
{
temp=P3;
}
}

}

P3=0xfd; //检测第二横排
temp=P3;
while(temp!=0xfd)
{
delay(20);
while(temp!=0xfd)
{
switch(temp)
{
case 0xed:{key=4;break;}
case 0xdd:{key=5;break;}
case 0xbd:{key=6;break;}
case 0x7d:{key=7;break;}
default:break;

}
while(temp!=0xfd)
{
temp=P3;
}
}

}

P3=0xfb; //检测第三横排
temp=P3;
while(temp!=0xfb)
{
delay(20);
while(temp!=0xfb)
{
switch(temp)
{
case 0xeb:{key=8;break;}
case 0xdb:{key=9;break;}
case 0xbb:{key=10;break;}
case 0x7b:{key=11;break;}
default:break;

}
while(temp!=0xfb)
{
temp=P3;
}
}

}

P3=0xf7; //检测第4横排
temp=P3;
while(temp!=0xf7)
{
delay(20);
while(temp!=0xf7)
{
switch(temp)
{
case 0xe7:{key=12;break;}
case 0xd7:{key=13;break;}
case 0xb7:{key=14;break;}
case 0x77:{key=15;break;}
default:break;

}
while(temp!=0xf7)
{
temp=P3;
}
}

}

return key;

}

void delay(uchar x)
{
uchar i,j;
for(i=0;ifor(j=0;j<255;j++);
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/moni/275011.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部