EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
第一种:这种方法很容易理解,但是程序比较长。 P2=0xfe;//给第一列送低电平 temp=P2; temp=temp&0xf0; while(temp!=0xf0) { delay(10); //去抖 temp=P2; temp=temp&0xf0; while(temp!=0xf0) { temp=P2; switch(temp) { case 0xee:num=1;break; case 0xee:num=2;break; case 0xee:num=3;break; case 0xee:num=4;break; } while(temp!=0xf0) //按键释放 { temp=P2; temp=temp&0xf0; } } } 然后再给第二、三、四列依次送低电平检查,也就是说再重复上边的程序四次
" b9 z5 u. D) P- I+ Z& {( q5 |第二种 uchar keyscan(void) { unsigned char cord_h,cord_l; P2=0x0f; //行线输出全为0 cord_h=P2&0x0f; //读入列线值 if(cord_h!=0x0f) //先检测有无按键按下 { delayms(10); //去抖 if((P2&0x0f)!=0x0f) { cord_h=P2&0x0f; //读入列线值 P2=cord_h|0xf0; //输出当前列线值 cord_l=P2&0xf0; //读入行线值 while((P2&0xf0)!=0xf0);//等待松开并输出 return(cord_h+cord_l);//键盘最后组合码值 } } return(0xff); //返回该值 - q7 }4 ^) i3 R& p# J. Q
第三种 uchar keyscan() { uchar i=0,j=0,key; P2=0xf0; // 高位拉高,低位拉低 if(((~P2)&0xf0)!=0) { delay(10); if(((~P32&0xf0)!=0) { P2=0xfe; while(((~P2)&0x0f)!=0) // 此语句保证只扫描四行 { if(((~P2)&0xf0)!=0) { switch((~P2)&0xf0) { case 0x10: j=0;break; case 0x20: j=1;break; case 0x40: j=2;break; case 0x80: j=3;break; } return(4*i+j); } else { P3=P3<<1; //循环4次 i++; } } } } return (key) ; } 第四种% B2 W' |/ @/ B a4 E, P
uchar keyscan(void)
3 [+ ]$ w6 A7 M! l' C7 U: b{
" I j1 \0 [8 G8 V# [ uchar code K_Tab[4][4] = {
% k# T& Y" `- T( e: Y 0xee, 0xde, 0xbe, 0x7e, 0xed, 0xdd, 0xbd, 0x7d,
9 x2 Q& E% s) j 0xeb, 0xdb, 0xbb, 0x7b, 0xe7, 0xd7, 0xb7, 0x77};4 b) R$ C& y8 _# `* U
uchar temp1 = 0xfe, temp2, i, j;
# R/ i6 n9 A1 e% j+ Z! \' w for(i = 0; i < 4; i++) 4 m" m! L- a) U0 D- L$ @3 ^5 Z. p
{ //扫描低四位/ v; |8 D' m/ M4 |: P- c
P3 = temp1; //输出一行0% F' @% O$ p" V# \' \ t
temp2 = P3; //马上就读入- H0 h v( B9 H* @
if((temp2 & 0xf0) != 0xf0) //如果有键按下- d$ h! L+ q- s8 f2 f
{
3 X4 z1 E: O( g for(j = 0; j < 4; j++) //就扫描高四位9 p# g2 c) z1 ~9 F' @/ @5 R
if(temp2 == K_Tab[j]) //查表
& W* `8 `/ K* N' @( o$ W return i * 4 + j; //查到了就返回按键的数值! V8 f0 n/ n; U% A. d. Y+ r9 i
}
2 G, @- S; \9 N" E: ]4 r& @ else temp1 = _crol_(temp1, 1);, O& B' B* f: x, `/ p% p$ F
}, D; q1 _+ J$ D- X: o
return 16; //没有查到,返回按键松开的代码
8 g8 o/ T$ B% A9 a0 \9 j2 L} : x, v% g$ Q: A( m
+ r: x0 P9 Z6 `5 v" w4 D% { |