你这个程序有很多问题啊,看不明白
array=(uchar)malloc(n_estsizeof(uchar));//这里n_est没有定义
//这里应该判断malloc是否成功
memset(array,0,sizeof(uchar)); //这里sizeof(uchar)=1 只有一个字节被初始化
for(i=0;i<n;i++)
{
array[i] = (ptr);//这里array的每个元素都被赋值为ptr[0]
}
根据你的描述,正常来说不可能第一个元素不行,而其他的元素都正确的
这个是单独的键盘扫描子程序,你可以借鉴一下
我使用的P3口接的矩阵键盘,你可以根据需要适当改变 还要注意我的键值可能和你不一样,这就要看你的硬件电路是怎么设计的了
uint keyscan(void)//键盘扫描函数,使用行列反转扫描法
{
uint cord_h,cord_l,cord;//行列值
P3=0x0f; //行线输出全为0
cord_h=P3&0x0f; //读入列线值
if(cord_h!=0x0f) //先检测有无按键按下
{
delay(); //去抖
if(cord_h!=0x0f)
{
cord_h=P3&0x0f; //读入列线值
P3=cord_h|0xf0; //输出当前列线值
cord_l=P3&0xf0; //读入行线值
for(;;)
{
P3=0x0f;
if(P3==0x0f)
break;
}
P10=0;
delayring();
P10=1;
switch(cord_h+cord_l)
{
case 0x7e:P0=led[1];cord=1;break;
case 0x7d:P0=led[2];cord=2;break;
case 0x7b:P0=led[3];cord=3;break;
case 0x77:P0=led[4];cord=4;break;
case 0xbe:P0=led[5];cord=5;break;
case 0xbd:P0=led[6];cord=6;break;
case 0xbb:P0=led[7];cord=7;break;
case 0xb7:P0=led[8];cord=8;break;
case 0xde:P0=led[9];cord=9;break;
case 0xdd:P0=led[0];cord=0;break;
case 0xee:cord=13;break;
case 0xed:cord=14;break;
case 0xeb:cord=15;break;
case 0xe7:cord=16;break;
}
P2=h;
return(cord);//键盘最后组合码值
}
}return(0xff); //返回该值
}
如果有按键,就会返回按键值, 如果没按键则返回 0XFF, 通过读取返回值可以判断是否有按键, 在程序开头可以加上全局变量的断码表, 这就看你用的是共阴的还是共阳的数码管了~~
祝您的问题早日得到解决 谢谢
以上就是关于C语言用mallloc函数申请内存建立可变长度数组之后为何赋值不对全部的内容,包括:C语言用mallloc函数申请内存建立可变长度数组之后为何赋值不对、需要一个STC89C52芯片的矩阵按键扫描程序,要求:每一个按键(共16个)对应数码管0~F显示出来、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)