精英库函数,T9拼音虚拟键盘,main函数里关于得到触摸屏的输入,有点疑惑

2019-07-21 02:13发布

我是看增值资料里的指纹识别的程序看到的,回头又看了T9的那个库函数版本。
在此贴上的是指纹识别模块里的源码。


1、不太明白标红的地方,如果触屏按下,根据key=i*3+j+1; 这句,key必不为0,但是在某个屏幕没有被按下的瞬间,key_x就会由最外层的else if置0,那标红的这句有什么意义吗?感觉不会进入这句呀。

2、第二个不明白的是标蓝的地方,假设我们是第一次触摸触摸屏,那key_x就还是初始的0,
      首先,我不明白一个无符号数0再减1,得到什么? 这样传递给AS608_key_staset后取余或整除,得到的是什么?
      其次,这句放在这里有什么用?最外层的else语句已经把没有触摸屏幕时候,原先触摸的那个区域恢复成白 {MOD}了,那这句放在这是不是多此一举?

//得到触摸屏的输入
//x,y:键盘坐标
//返回值:(1~15,对应按键表)
u8 AS608_get_keynum(u16 x,u16 y)
{
        u16 i,j;
        static u8 key_x=0;//0,没有任何按键按下
        u8 key=0;
        tp_dev.scan(0);                  
        if(tp_dev.sta&TP_PRES_DOWN)//触摸屏被按下
        {       
                for(i=0;i<5;i++)
                {
                        for(j=0;j<3;j++)
                        {
                                 if(tp_dev.x[0]<(x+j*80+80)&&tp_dev.x[0]>(x+j*80)&&tp_dev.y[0]<(y+i*30+30)&&tp_dev.y[0]>(y+i*30))
                                {       
                                        key=i*3+j+1;         
                                        break;                           
                                }
                        }
                        if(key)
                        {          
                                if(key_x==key)key=0;
                                else
                                {
                                        AS608_key_staset(x,y,key_x-1,0);
                                        key_x=key;
                                        AS608_key_staset(x,y,key_x-1,1);
                                }
                                break;
                        }
          }  
        }else if(key_x)
        {
                AS608_key_staset(x,y,key_x-1,0);
                key_x=0;
        }
        return key;
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。