标题: 关于单片机矩阵键盘多位数的输入程序问题 [打印本页]

作者: XLXUN    时间: 2021-9-18 21:39
标题: 关于单片机矩阵键盘多位数的输入程序问题
矩阵键盘多位数的输入,有问题,大佬们帮忙看看
    while(1)
    {
         /*************判断是不是连续扫描*****/
    conkey=Key_Scan();
        printf("%d\r",conkey);
   if(conkey==66)     //如果是66,进入连续扫描模式
  {
        flagsw=1;
      printf("进去了\r");
       while(conkey!=68)
         {  
             if(conkey!=420)
             {     
             printf("2进去了\r");
           chgkey[0]=Key_Scan();

              conkey=Key_Scan();
             }
           while(conkey!=68)
         {  
              printf("3进去了\r");
             if(conkey!=420)
             {
                 chgkey[1]=Key_Scan();
             conkey=Key_Scan();
             }
                while(conkey!=68)
         {   printf("4进去了\r");
             if(conkey!=420)
             {
                 chgkey[2]=Key_Scan();
              conkey=Key_Scan();
             }
                  while(conkey!=68)
         {  
             if(conkey!=420)
             chgkey[3]=Key_Scan();
              conkey=68;
                   }
                }
             }
           keysum=chgkey[0]*1000+chgkey[1]*100+chgkey[2]*10+chgkey[3]*1;
                printf("%d\r",keysum);         
              LCD_ShowString(188,120,"wrong",RED,WHITE,16,0);   
             LCD_ShowIntNum(188,140,keysum,4,GREEN,WHITE,16);   
         }
     }
            



作者: lkc8210    时间: 2021-9-19 01:43
请你说出有什么问题
方便我们找错
作者: yzwzfyz    时间: 2021-9-19 08:48
说说你思路吧,看看你的思路是否清晰。
作者: xianfajushi    时间: 2021-9-19 10:22
矩阵键盘值只有1位数要多位数需要自己去合成
作者: xianfajushi    时间: 2021-9-19 10:24
那么多循环不怕逻辑混乱?
作者: xianfajushi    时间: 2021-9-19 10:25
keysum=chgkey[0]*1000+chgkey[1]*100+chgkey[2]*10+chgkey[3]*1;有必要*1?填鸭式学习!
作者: XLXUN    时间: 2021-9-19 11:15
yzwzfyz 发表于 2021-9-19 08:48
说说你思路吧,看看你的思路是否清晰。

如果,首先如果扫描的值是66,进入连续键盘,如果扫描的键不是68,如果不是乱码(就是420),就写入数组chgkey,固定数组为四位,最后,将四位乘以加权,得到的数即是我定义的一个全局变量

作者: XLXUN    时间: 2021-9-19 11:16
xianfajushi 发表于 2021-9-19 10:25
keysum=chgkey[0]*1000+chgkey[1]*100+chgkey[2]*10+chgkey[3]*1;有必要*1?填鸭式学习!

只是为了,对称好看
作者: yzwzfyz    时间: 2021-9-19 17:11
本帖最后由 yzwzfyz 于 2021-9-21 22:14 编辑

思路不清,假设是计算器键盘输入,输入的长短不定……
教你一个方法:
1、建立一个【输入缓冲区】,长度需足够用,如256个字节。当然用一个256个字节的数组替代也可。
2、每个键的键值不要超过255,这样最多可以适用256个不同的键。
3、建立两个指针:PC_INPUT,PC_USED。单字节即可。
4、串口中断(键入)时,将键值依PC_INPUT(0-255)指向【输入缓冲区】的位置,并存入,每收存一个键值就将PC_INPUT+1,PC_INPUT循环使用(0-255),无需清0。仅在开机时清0。数据分析不要在中断中做,以免运行时间太长。即中断只存数据。
5、在主程序中,分析键入的数据。
取键值的方法:当PC_INPUT <> PC_USED 时,就表示有新的键入了。
仅在开机时,让PC_INPUT = PC_USED =0。
数据取自【输入缓冲区】中,PC_USED所指的位置,每取一个键值就将PC_USED+1,PC_USED循环使用(0-255),无需清0。
当PC_INPUT = PC_USED 时,就表示输入的键值取完了。
6、何时开始取?由你自己定,可以每输入一个,取一个。也可以键入某个值(如“=”号键值)时,再开始取,反正键输入全部在缓冲区中,跑不掉!有PC_INPUT和PC_USED定位,也不会混乱。
7、分析处理数据,这时你可以自由发挥了。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1