51单片机矩阵键盘程序:想把按键的值一一存到数组里,最后按下某个按键时,把数组里的某个数显示出来,

51单片机矩阵键盘程序:想把按键的值一一存到数组里,最后按下某个按键时,把数组里的某个数显示出来,现在遇到一个问题,就是数组里总是不能正确存放按键的每个值,显示出来时要么... 51单片机矩阵键盘程序:想把按键的值一一存到数组里,最后按下某个按键时,把数组里的某个数显示出来,现在遇到一个问题,就是数组里总是不能正确存放按键的每个值,显示出来时要么是第一个或者最后一个按键的值,求大神帮我看看,下面是我的部分程序 展开
 我来答
zhxiufan
2017-11-05 · 知道合伙人软件行家
zhxiufan
知道合伙人软件行家
采纳数:14923 获赞数:38379
国家科技进步奖

向TA提问 私信TA
展开全部
给一个键盘扫描程序参考:
void delay(unsigned int a)
{
unsigned int i,j;
for(i=0;i<a;i++)
for(j=0;j<120;j++);
}
uchar kbscan(void)
{
unsigned char sccode,recode;
P1=0x0f;  //发0扫描,列线输入
if ((P2 & 0x0f) != 0x0f)  //有键按下
{
delay(20);   //延时去抖动
if ((P1&0x0f)!= 0x0f)
{
sccode = 0xef;    //逐行扫描初值
while((sccode&0x01)!=0)
{
    P1=sccode;
if((P1&0x0f)!=0x0f)
{
    recode=(P1&0x0f)|0xf0;
while((P1&0x0f)!=0x0f);//等待键抬起
return((~sccode)+(~recode));
 }
        else
sccode=(sccode<<1)|0x01;
}
}
}
return 0;  //无键按下,返回0
}

uchar getkey(void)
{
unsigned char key,keyval=0xff;
key=kbscan();
switch(key)
{
case 0x11:keyval=1;break;
case 0x12:keyval=2;break;
case 0x14:keyval=3;break;
case 0x18:keyval=10;break; //+
case 0x21:keyval=4;break;
case 0x22:keyval=5;break;
case 0x24:keyval=6;break;
case 0x28:keyval=11;break; //-
case 0x41:keyval=7;break;
case 0x42:keyval=8;break;
case 0x44:keyval=9;break;
case 0x48:keyval=12;break; //清除
case 0x81:keyval=13;break;
case 0x82:keyval=0;break;
case 0x84:keyval=14;break; //小数点
case 0x88:keyval=15;break; //确认
default:keyval=16;break;
}
return(keyval);
}
追问
按键值返回那些是没问题的 问题是出在数组那里
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式