标题: 请问为什么从键盘矩阵按下的数 不能通过独立按键 进行加减 [打印本页]

作者: qingyue    时间: 2024-6-10 17:22
标题: 请问为什么从键盘矩阵按下的数 不能通过独立按键 进行加减
#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include "MatrixKey.h"

unsigned char k=0;                         //k=通过键盘矩阵得到的数
unsigned int p,count,a;                    //p=进位得到的数  count=加的次数  a=通过独立按键加减得到的数

void main()
{
        LCD_Init();
        LCD_ShowString(1,1,"Password:");
        LCD_ShowNum(2,1,k,4);      
        while(1)
        {
                k=MatrixKey();
                if(k)                                
                {
                        if(k<=10)                              
                        {
                                if(count<4)      
                                {
                                        p*=10;                              
                                        p+=k%10;               
                                        count++;      
                                }
                                LCD_ShowNum(2,1,p,4);                  //显示
                        }
                 }
                if(P3_0==0)
                {
                        a=k;
                        a++;
                        if(a>17)
                        {
                                a=1;
                        }
                        LCD_ShowNum(2,1,a,4);      
                }
                if(P3_1==0)
                {
                        a=k;
                        a--;
                        if(a<0)
                        {
                                a=16;
                        }
                        LCD_ShowNum(2,1,a,4);      
                }
         }
}

捕获.PNG (93.77 KB, 下载次数: 21)

捕获.PNG

作者: xiaobendan001    时间: 2024-6-11 08:02
当K有数据后,就一直在刷新显示,P30和P31并没有改变P的内容,他们产生的a的显示瞬间被P覆盖了吧。
作者: lkc8210    时间: 2024-6-11 13:38
阵列键盘没有按下时
k的值是0
所以按下P30会显示1
按下P31会显示5535
作者: xiaobendan001    时间: 2024-6-11 15:19
从++和--下边的if来看,你的意图是每按一次开关就加一或者减一到了17之后就变成1,实际上每次运行都是只在K的数字上加了一而已。而且即使++有效了,似乎也看不到,因为太快了,只要按着不松手,程序只经历了显示函数后又++了,这速度在液晶上面可能看不到。




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