
下面是课本里2x2计算键值的
void ce_jianzhi ( )
{
uchar i,j,p; //定义局部变量
do
{
while(ce_anjian()==0); //是否有按键按下?若没有按下,判断等待
delay(15); //调用去抖延时子程序
}while(ce_anjian()==0); //是否有按键按下?若没有按下,返回值为0
for(i=0;i<2;i++)
{
P1=(0xfe<<i)|i; //循环扫描输出行扫描信号
for(j=0;j<2;j++)
{
p=P1&0x0c; //输入保留键盘的列数据,其余清0
if(p==0x08>>j) //判断具体哪列按键按下
{
y=i*2+j+1; //计算键值并存于全局变量y中
goto D1; //找到按键值,终端扫描查找
}
}
}
D1:delay(15); //调用去抖延时子程序
do
{
while(ce_anjian()==1); //按键是否释放?若没有释放,继续判断
//若有释放,返回值为0,则继续往下执行
delay(15); //调用去抖延时子程序
}while(ce_anjian()==1); //按键是否释放?若没有释放,继续判断
#24t#24t#24t
本帖最后由 Ca(OH)2 于 2016-4-27 05:13 编辑
啊,无聊挖坟啦! ------------------------------------------------- (别把握关小黑屋。#7133!
2x2 键值的话明显2x2是个二维的。。。(数组?) 每一个维度有两个项目。
呢3x3的话就是每个维度有三个项目啊。。#7036!
在下并不会单片机,只是稍微学过一点c语言。所以这行。。
P1=(0xfe<<i)|i; //循环扫描输出行扫描信号看不懂。不过根据
y=i*2+j+1; //计算键值并存于全局变量y中这行的话。。。
基本上就是, 不同的行列,i 和 j 会不一样,估计最后的算式你可能想要变换一下,不过基本上吧循环从 i<2 和 j<2 变成小于3 应该就可以了吧#6957!
[查看全文]