阿狸妖
求一个3x3键值计算的51单片机程序

下面是课本里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
本帖最后由
展开Biu

本帖最后由 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!

[查看全文]