现在的问题是,我用STM32接了一个4*4键盘,还有一块12864液晶,显示,还有键盘扫描都已调试成功,我定义的键码是0-15,当我按下10键时进入参数设置子程序,接下来就是需要按下0-9之间的键了,那么我如何才能根据我多次按下的单个按键,最后组合成3位 或多位数字呢 ?
参考了如下的程序:矩阵键盘扫描程序,程序名是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)
我也经过修改尝试过了,但是不对头啊,请各位大神看看那个 if(key<10) { n=10*n+key;} 岂不是自己就在do循环内做累加运算了啊,我调试的时候发现只要一有数字键按下,数据N直接就直接溢出了啊,请大家给点建议,谢谢,
下面是我修改的部分程序:
while(1)
{
int n=0,keyv;
char flag=0;
if(key()==10) //SET KeyPressed
{
do
{
delay_ms(50);
keyv=key();
if(keyv<10)//按下的是0-9的数字键
{
n=10*n+keyv;
}
if(keyv==11)//OK键被按下
flag=1;
if(keyv==12)//EXIT被按下
flag=1;
LCD_Dis_Digital(3, 4,n) ; //键码显示
}
while(!flag);
}
其中的key()函数已经做成 只允许单次有效 ,长按不会持续有扫描输出 |