原创 “线反转法”4*4键盘扫描程序

2008-2-2 15:00 5892 7 7 分类: MCU/ 嵌入式

近来看了好几个单片机的键盘扫描程序的代码,发现代码都比较罗嗦,如果键盘按键从4*4变成8*8时,代码将成几何倍数增长。于是,经过自己的反复琢磨,有了下面的改进后的代码:


思路:在有按键的时候,扫描行和列方向上的电平,同时,在很短时间内(10ms)交换行和列方向上的高低电平,再次扫描,即可知道按键的所在位置。


 //4*4键盘
#include
unsigned char num[4][4]={0xc0,0xf9,0xa4,0xb0,
                                         0x99,0x92,0x82,0xf8,
                                         0x80,0x90,0x88,0x83,
                                         0xc6,0xa1,0x86,0x8e};
void delay10ms(void)
{
  unsigned char i,j;
  for(i=20;i>0;i--)
  for(j=248;j>0;j--);
}
void main()
{
 unsigned char i,j,tmp1,tmp2;
 while(1)
 {
  P0=0x0f;
  if(P0!=0x0f)
  {
    tmp1=P0;
 switch(tmp1)
 {
  case 0x07:   i=3;  break;
  case 0x0b:   i=2;  break;
  case 0x0d:   i=1;  break;
  case 0x0e:   i=0;  break;
 }
 P0=0xf0;
 delay10ms();
 tmp2=P0;
 switch(tmp2)
 {
  case 0x70:   j=3;  break;
  case 0xb0:   j=2;  break;
  case 0xd0:   j=1;  break;
  case 0xe0:   j=0;  break;
 }
 P1=num[j];
  }
 }
}


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
7
关闭 站长推荐上一条 /3 下一条