51单片机矩阵键盘输入0-999999的任意数的问题?

问题是这样的 ,我要用矩阵键盘输入0-999999之间的任意一个数,把这个数给变量n,我已经做好了矩阵键盘扫描程序,程序名是void anjian(),他最后得到一个返回的键值,把这个键值传给一个变量key,关系式是key=anjian(),这样我只要去检测key的值就可以知道是哪个键按下了,因为矩阵键盘需要循环调用,所以我用的是do....while语句,程序如下:
n=0;
flag=0;
do
{
key=anjian();
if(key<10)//按下的是0-9的数字键
{
n=10*n+key;
}
if(key==11)//OK键被按下
flag=1;
if(key==12)//EXIT被按下
flag=1;
}
while(!flag)
....................
假设输入一百二十三,那么当然第一 读按键就得到1,第二次就会得到2,第三次就会得到3,结果就是:
x=0;
x=0*10+1; //第一次按键按下,x=1
x=1*10+2; //第二次键按下,x=12
x=12*10+3; //第三次键按下,x=123
最后x=123;现在的问题就是下次读回按键的值的时候第一次的x的值没了,就是我输入2的时候之前的1没了,我输入3的时候前面的12就更没了,怎么解决,或者有没有更简单的方法,其他的方法也行......
不好意思着急写错了,下面的x 就是上面的n....................高手进来愿意的话请留下QQ...........感激不尽

0-999999,最多有6位数,因此可声明一个 6 byte的数组keybuffer[6]和一个存储数字位数的变量bitnum

unsigned char keybuffer[6];
unsigned char bitnum=0 ;

if(key<10)
{
keybuffer[bitnum] = key ;
bitnum ++ ;
}//如果用数码管显示,直接把keybuffer的值送显就可以了
//如果还需把值算出的话
unsigned long value = 0,temp = 1;
unsigned char i ;
for(i=0; i<bitnum; i++)
{
value = keybuffer[bitnum-i]*temp + value ; //从个位开始累加
temp = temp * 10 ;
}
return value ;
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-02-25
一定要把输入的一串数字转换为一个整数才行啊?如果是设计一个密码锁,要20位的数字,那岂不是没办法了?

就是一楼说的,设定一个数组,把每次输入的数字存储在数组中,这样就减少了工作量。
第2个回答  2010-02-24
应该使用数组,分别存放六个输入的数字。
当有新的按键值输入了,滑动存储,只是保留最后输入的六个输入的数字。
需要计算的时候,再计算出 x=...。
注意,999999已经超出了整型数的范围。
第3个回答  2010-02-24
x=0;
x=0*10+1; //第一次按键按下,x=1
x=1*10+2; //第二次键按下,x=12
x=12*10+3; //第三次键按下,x=123
试试这样
x=0;
x=x*10+1
x=x*10+2
x=x*10+3
第4个回答  2010-02-25
0-999999,最多有6位数,因此可声明一个 6 byte的数组keybuffer[6]和一个存储数字位数的变量bitnum

unsigned char keybuffer[6];
unsigned char bitnum=0 ;

if(key<10)
{
keybuffer[bitnum] = key ;
bitnum ++ ;
}//如果用数码管显示,直接把keybuffer的值送显就可以了
//如果还需把值算出的话
unsigned long value = 0,temp = 1;
unsigned char i ;
for(i=0; i<bitnum; i++)
{
value = keybuffer[bitnum-i]*temp + value ; //从个位开始累加
temp = temp * 10 ;
}
return value ;本回答被提问者采纳
相似回答