微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 如何用4*4矩阵键盘实现多位输入

如何用4*4矩阵键盘实现多位输入

时间:10-02 整理:3721RD 点击:
我需要用4*4矩阵键盘输入位数最多为四位的多位数。我要实现输入0-9时,键盘可以继续输入,液晶1602保持不变,输入10-15时,液晶1602显示我所输入的数值。我写了键盘扫描程序,但是组合起来就不会写了,尝试了很多方法,总是不能成功,以下是我的部分代码,大神能否帮我看看。我觉得主要是逻辑的问题。
void count()
{
        uchar sn;
        uint num1=0;
        sn=key1();//这是键盘扫描程序,16个按键分别返回0-15
        while(sn<10)//当输入0-9时,键盘可以继续输入
        {
                num1=num1*10+sn;
                sn=key1();
        }
        write_f(num1);//输入10-15将我输入的多位数送到1602显示,write_f()是显示函数。
}

1.把num1改为全局变量
2.把while(sn<10)改为if(sn<10)
3.把sn=key1()去掉
4.把write_f(num1)放到if里面
这样输入一位就显示一位,输入n位就显示n位

实话,我没看懂他问的什么?

我也看不明白!

我是觉得小编为什么要全部输入了才显示!

就是跟计算器差不多,能输入多位数,多位数最高位数为四位,输完多位数后弄一个确定键,确定键按下后将这个输入的数送到1602显示出来,我的矩阵键盘16个键分别返回值是0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,我的要求是0-9作为输入键,10-15中随便一个都可以当做确定键。这样能看懂吗??……

真怀疑你没用过计算器,每输入一位数难道没显示?比如输入123,输入了123要按确定键才能显示,如果我有这计算器我绝对砸了!永不使用这计算器!
上面已经改了,和计算器一样!

哈哈哈对不起我用过计算器,照你说的改如下
void count()
{
        uchar sn;
        num1=0;
        sn=key1();
        if(sn<10)//°′??êy×??ü
        {
                num1=num1*10+sn;
                write_f(num1);
        }
       
}
可是这样改只能输入一位数,不能输入多位数的。而且我不明白,要是输入一位显示一位的话,那它怎么知道我什么时候输完这个数啊

      把num1=0;去掉

改了还是不行呀(T_T)……

不知你显示是怎么写的?
把write_f(num1);改为 write_f(sn);
num1只是把输入的多位数合成了一个数,方便后面计算

void write_f(uint date)         //显示函数
{
  uchar qian,bai,shi,ge;
  qian=date/1000;
  bai=date/100%10;
  shi=date/10%10;
  ge=date%10;
  write_com(0x80+0x42);
  write_data(0x30+qian);
  write_data(0x30+bai);
  write_data(0x30+shi);
  write_data(0x30+ge);
  write_data(0x4D);
  write_data(0x48);
  write_data(0x5a);
}
所以应该显示num1
void count
{
        sn=key1();
        if(sn<10)//按下0-9键,一直显示输入的数据
        {
                num1=num1*10+sn;
                write_f(num1);
        }
        else//按下10-15键将num1清零
       {
                num1=0;
       }
}
uint num1
void main()//主函数
{
        num1=0;
        init();//初始化函数
        while(1)
        {
                count();
        }
}
我觉得我这样写并没错,然而并不能出来结果

void write_f(uint date)         //显示函数
{
        uchar qian,bai,shi,ge;
  qian=date/1000;
  bai=date/100%10;
  shi=date/10%10;
  ge=date%10;
  write_com(0x80+0x42);
  write_data(0x30+qian);
  write_data(0x30+bai);
  write_data(0x30+shi);
  write_data(0x30+ge);
  write_data(0x4D);
  write_data(0x48);
  write_data(0x5a);
}
所以应该是num1
void count()//检测并显示输入值
{
        sn=key1();
        if(sn<10)//按下0-9,显示输入值
        {
                num=num*10+sn;
                write_f(num);       
        }
        else//按下10-15,将num1清零
        {
                num=0;
        }
}
uint num1;
void main()
{
        num=0;
        init();//初始化函数
        while(1)
        {
                count();
        }
}
我觉得我这样写并没错,,然而并不能出来结果。

输入一位就显示一位,并不是显示一个数(一个数可以有多个位),num1是用来后面计算的,不是用来显示的!

应该把字符放在数组中输出吧?

应该把字符放在数组中输出

你没看明白你瞎回复,误导别人

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top