日志档案

发表于 2008-2-2 15:00:11

0

标签: 键盘扫描  

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

近来看了好几个单片机的键盘扫描程序的代码,发现代码都比较罗嗦,如果键盘按键从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][i];
  }
 }
}

 

系统分类: 单片机   |   用户分类: 单片机相关   |   来源: 原创   |   【推荐给朋友】   |   【添加到收藏夹】

    阅读(727)    回复(0)  

投一票您将和博主都有获奖机会!