单片机矩阵键盘输入的数字怎么存放到数组中,a[10]数组中个元素有键盘输入,请高手指点

我还只按了一个键,a[10]的10个元素都是同一个键值,求高手帮帮忙
希望各位帮帮我,尽量详细点,感激不尽

嗯,你应该是取到键值就把它放到数组中吧,然后把取建的标志置为0对吧,但是单片机扫描速度很快,你按下去到提起手来单片机都扫了很多次了,即使标志被指为0又会很快被置为1的,然后又继续赋值了,你应该做个松键程序,跟按键程序差不多,也要消除抖动,确定按键被提起来后,再给数组赋值追问

请问你有现成的程序吗?若有能不能发给我啊,因为时间紧,凭我的水平可能又编不出来,希望你能帮帮我,万分感激!QQ:[email protected]

追答

我直接敲给你吧
毕竟你的硬件我也不了解啊
在键盘扫描部分加
if(kflag==1)
{
if(kvalue==0)
{
kcount++;
if(kcount>20)
kflag=0;
}
if(kvalue==0)
kcount=0;
}
kflag是按键标志位,kvalue是全键盘扫描完的结果,kcout是用来计数的,我就先用20了,具体数值得根据你自己那边的情况,这个加到扫描处理那里
最后对扫描的结果处理部分,bkvalue是用来存储本次最早一次的扫描结果,这样避免在本次处理是多次处理了
if(kflag==1)
{
if(kvalue!=bkvalue)
{
bkvalue=kvalue;
{ 数组赋值}
}
}
按键确定被抬起来后要将他们两个清零
if(kvalue==0)
{
........
bkvalue=0;
kvalue=0;
}
把你的程序改改就可以了,相信你可以的,整个程序都出来了,这点小细节好弄的

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-02-02
其实这是按键的重复扫描问题,因为单片机的运行非常快,所以当你按下按键的那些时间,已经可以执行多次键盘扫描和赋值了,最简单的方法是在赋值语句后上一定时间的延时,大概0.5秒左右就可以了,延时的时间是为了等按键释放之后再经行第二次的扫描。
第2个回答  2011-11-25
没有做松手检测吧?