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 ;本回答被提问者采纳

51单片机矩阵键盘输入0-999999的任意数的问题?
0-999999,最多有6位数,因此可声明一个 6 byte的数组keybuffer[6]和一个存储数字位数的变量bitnum unsigned char keybuffer[6];unsigned char bitnum=0 ;if(key<10){ keybuffer[bitnum] = key ;bitnum ++ ;}\/\/如果用数码管显示,直接把keybuffer的值送显就可以了 \/\/如果还需把值算出...

如何将0-999999的所有数字都输入到EXCEL中?
在A1输入 0 选A1——菜单栏——开始——编辑——填充——系列——序列产生在:列(点选)——步长值:1——终止值:1000000——确定。

51单片机数码管倒计时程序,从999999开始倒计时,用定时器T1的中断...
while (1) { if (flag1s == 1) \/\/判断1秒定时标志 { flag1s = 0; \/\/1秒定时标志清零 sec--; \/\/秒计数自减1【这里是先减一,后面再送显示】 \/\/将sec按十进制位从低到高依次提取到buf数组中 buf[0] = sec%10; buf[1] = sec\/10%10; buf[2...

请在0 - 999999中输入您认为最小且唯一的数:
1*10^(-1024)

单片机菜鸟求高人指点 矩阵键盘 数码管,怎么实现:按1显示1,再按2显示1...
void scan();void disp_led(unsigned long int dat);void delay(unsigned int dly);void main(){for(k=0;k<=7;k++){SBUF=str[10];while(TI==0);TI=0;} while(1){scan();count=key_num;sum=sum*10+count;scan();while(key_num!=16)scan();disp_led(sum);delay(1);scan();...

单片机键盘输入数字
sbit Rs=P0^0;sbit Rw=P0^1;sbit E=P0^2;uchar key_led;unsigned char code disp_code[]=;unsigned char code key_code[]={ 0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77 };\/\/注意这里你自己看下你电路是怎么连得,对应改一下表单...

矩阵键盘和独立按键的区别是什么?
2010-03-01 51单片机矩阵键盘输入0-999999的任意数的问题? 32 2011-03-06 矩阵键盘扫描程序分析 41 2006-05-09 4x4矩阵键盘工作原理 6 2008-10-24 求助:谁有4x4的矩阵键盘的C程序呀?请指导我呀!!! 2011-04-26 如何用4X4矩阵键盘输入一个两位数? 7 ...

问阿拉伯数字数学问题!
6位数任意重复总共有9*10*10*10*10*10*10=90万个 去掉6位数都重复的,9个:111111、...999999 去掉有5位数重复的:先不考虑5个0 这6位有5个重复数1个另类数,设这另类数在第一位,则只能是1~9中的8个(不能和后面的数重复),共有8*9=72个 另类数在第2,3,4,5,6位时,可以从剩下的...

2010 word 插入 编号 只能是 0 - 999999, 我的几百万的怎么弄...
暂时没有发现可修改的设置。你可以使用excel批量转换后,再复制到word中!操作如下:

手机密码通常用六位数字组成(每位数字都可以从0~9这十个数字中任意选取...
每位数字都可以是0~9中任意一个数,所以是10的6次方,共1000000

相似回答