概要

==说明:B1012之后的版本支持按键模式与触摸屏共存,同时最多支持8key;该版本之前只有非触摸屏才支持:==

系统除触摸屏以外,还支持非触摸屏,在非触摸屏的模式下,系统允许将E1~E6这6个扩展IO扩展为按钮,并在底层对按钮做了支持;

对于每个界面来说,按键的定义是可以不一样的,比如对于常规界面,1号按键的功能是“进入设置界面” 而到了设置界面,1号按键的可能可能就是“退出”,因此按键的处理逻辑应该是放在每个页面中,而非控件中,这点请大家预先理解;

其次就是按键有很多事件,常见的有按下和弹起两个事件,为了让按键的声明周期完整,一般我们把功能放在弹起事件中,这样比较稳定可靠;通过多重事件,我们可以实现:

因此,6个按键可以组合很多功能;

电路接法:

直接按钮接地即可:

可以参考:

https://lceda.cn/zhqsoft/shmictrl-28-wifi-5key

https://lceda.cn/zhqsoft/shmictrl-35-wifi-5key

软件使用:

void page.onkey(int t,int k){
        str s;
        s="k:"+int2hex(k,4)+" t:"+t+"\r\n";
        echo(s);
    }

其中,k是按钮状态,是2byte模式,高位是事件前的按钮状态,低位时事件当前的按钮状态;具体见下表:(bit=0 表示按钮被按下,否则上拉为1)

Bit n 描述
15 null =0;8key模式下8号按钮前状态
14 null =0;8key模式下7号按钮前状态
13 6号按钮的事件前状态
12 5号按钮的事件前状态
11 4号按钮的事件前状态
10 3号按钮的事件前状态
9 2号按钮的事件前状态
8 1号按钮的事件前状态
7 null =0;8key模式下8号按钮当前状态
6 null =0;8key模式下7号按钮当前状态
5 6号按钮的当前状态
4 5号按钮的当前状态
3 4号按钮的当前状态
2 3号按钮的当前状态
1 2号按钮的当前状态
0 1号按钮的当前状态

t是按键事件标志:

t 描述
0 按钮被按下
1 按钮被长按(按钮长按不放,先会出现t=0的按下事件,大约2秒后会出现长按事件)
2 按钮被松开,弹起事件
3 按钮状态发生变化,常用于检测某个按钮按着不放,组合其他按钮实现特殊功能的场合

当然,您可以使用下面代码方便简单的获取某个按键被按下的事件;

void page.onkey(int t,int k)
{    
    if (t==2){
        //按钮弹起事件
        k=k>>8; //t=2弹起事件,使用高八位获取哪个按钮被按下
                //t=0按下事件,使用低八位获取哪个按钮被按下
        if ((k&1)==0){
            echo ("1号按钮被按下\r\n");
        }
        if ((k&2)==0){
            echo ("2号按钮被按下\r\n");
        }
        if ((k&4)==0){
            echo ("3号按钮被按下\r\n");
        }
        if ((k&8)==0){
            echo ("4号按钮被按下\r\n");
        }
        if ((k&16)==0){
            echo ("5号按钮被按下\r\n");
        }
        if ((k&32)==0){
            echo ("6号按钮被按下\r\n");
        }
    }
}