近来看了好几个单片机的键盘扫描程序的代码,发现代码都比较罗嗦,如果键盘按键从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];
}
}
}
文章评论(0条评论)
登录后参与讨论