改进的矩阵键盘扫描程序
时间:10-02
整理:3721RD
点击:
#include <reg51.h>
#include <math.h>
#define uchar unsigned char
void T_delay()
{
uchar c;
for(c=0;c<55;c++)
;
}
uchar log2(int d)
{
uchar t;
t=(int)(log10(d)/log10(2));
return t;
}
void main()
{
uchar g,h,key,value;
{ for(g=0;g<4;g++)
{
h=pow(2,g);
P1=h;
T_delay();
key=P1;
key>>=4;
if(key)
value=log2(key)+g*4;
}
}
}
矩阵键盘接在P1口,value为按下的按键
不知道执行效率怎么样,看起来简洁了许多
#include <math.h>
#define uchar unsigned char
void T_delay()
{
uchar c;
for(c=0;c<55;c++)
;
}
uchar log2(int d)
{
uchar t;
t=(int)(log10(d)/log10(2));
return t;
}
void main()
{
uchar g,h,key,value;
{ for(g=0;g<4;g++)
{
h=pow(2,g);
P1=h;
T_delay();
key=P1;
key>>=4;
if(key)
value=log2(key)+g*4;
}
}
}
矩阵键盘接在P1口,value为按下的按键
不知道执行效率怎么样,看起来简洁了许多
执行一次,少个主循环
忽略了,嘿嘿,主要看下面键盘扫描吧
代码少并不意味运行时间少。你这里面调用了数学运算函数,这在8位单片机上可是很要命的。
而且还有延时函数,直正的工程中是不行的哦。
给你个思路,按键这个东西其实就是定时去采样IO的电平而已。重点是定时采样。
谢谢
那就是放到定时器的中断函数里把。
h=pow(2,g);其实可以用h=1>>g;代替,
先看看,谢谢分享!