找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2805|回复: 8
收起左侧

关于单片机矩阵键盘多位数的输入程序问题

[复制链接]
回帖奖励 5 黑币 回复本帖可获得 5 黑币奖励! 每人限 1 次
ID:849635 发表于 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);   
         }
     }
            


回复

使用道具 举报

ID:161164 发表于 2021-9-19 01:43 | 显示全部楼层
请你说出有什么问题
方便我们找错
回复

使用道具 举报

ID:123289 发表于 2021-9-19 08:48 | 显示全部楼层
说说你思路吧,看看你的思路是否清晰。
回复

使用道具 举报

ID:332444 发表于 2021-9-19 10:22 | 显示全部楼层
矩阵键盘值只有1位数要多位数需要自己去合成
回复

使用道具 举报

ID:332444 发表于 2021-9-19 10:24 | 显示全部楼层
那么多循环不怕逻辑混乱?
回复

使用道具 举报

ID:332444 发表于 2021-9-19 10:25 | 显示全部楼层
keysum=chgkey[0]*1000+chgkey[1]*100+chgkey[2]*10+chgkey[3]*1;有必要*1?填鸭式学习!
回复

使用道具 举报

ID:849635 发表于 2021-9-19 11:15 | 显示全部楼层
yzwzfyz 发表于 2021-9-19 08:48
说说你思路吧,看看你的思路是否清晰。

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

使用道具 举报

ID:849635 发表于 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?填鸭式学习!

只是为了,对称好看
回复

使用道具 举报

ID:123289 发表于 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、分析处理数据,这时你可以自由发挥了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表