本帖最后由 jinglixixi 于 2022-9-17 12:08 编辑
在ESK32-30519 开发板上配置了6个触摸键,在数码管的配合下可实现键值的显示,其电路原理图如图1所示。 图1 触摸键电路
6个触摸键在核心板上的名称为PAD1~PAD6,在程序中所对应的按键名称为KEY16、KEY17、KEY22、KEY23、KEY24和KEY25,故在分析键值时是按如下的程序来完成。 if(TKL_Is_KeyPress(i))
{
switch(i)
{
case 16: showNumber0=2;
break;
case 17: showNumber0=1;
break;
case 22: showNumber0=4;
break;
case 23: showNumber0=3;
break;
case 24: showNumber0=6;
break;
case 25: showNumber0=5;
break;
default: showNumber0=0;
break;
}
}
而按键与芯片引脚的具体连接关心是靠如下的定义来建立的。 #define TKL_SEL_KEY16_AFIO AFIO_GPxConfig(GPIO_PB ,AFIO_PIN_0 ,AFIO_MODE_12);
#define TKL_SEL_KEY17_AFIO AFIO_GPxConfig(GPIO_PB ,AFIO_PIN_1 ,AFIO_MODE_12);
#define TKL_SEL_KEY22_AFIO AFIO_GPxConfig(GPIO_PB ,AFIO_PIN_4 ,AFIO_MODE_12);
#define TKL_SEL_KEY23_AFIO AFIO_GPxConfig(GPIO_PB ,AFIO_PIN_5 ,AFIO_MODE_12);
#define TKL_SEL_KEY24_AFIO AFIO_GPxConfig(GPIO_PC ,AFIO_PIN_1 ,AFIO_MODE_12);
#define TKL_SEL_KEY25_AFIO AFIO_GPxConfig(GPIO_PC ,AFIO_PIN_2 ,AFIO_MODE_12);
通过对例程LEDC+TouchKey的编译和下载,其功能是: 在没有按键按下时,最右侧的数码管显示0,若按下PAD1~PAD6的任意一个键,则显示对应的数字编号1~6。
那么是该程序是否可以完成参数设置的任务呢? 显然是不可取得,因为它只能提供6种数值状态的处理,这明显是不能满足有一定数值宽度的要求的。
那么该如何来实现呢? 我们可以设置3个键来分别实现数值递增、数值递减及确认处理功能。 具体的就是以PAD1为数值递增键, PAD3为数值递减键,PAD5为确认处理键。 相应的处理程序为: for(u8 i=0;i<28;i++)
{
if(TKL_Is_KeyPress(i))
{
switch(i)
{
case 17: m=m+1;
break;
case 23: if(m>1) m=m-1;
break;
case 25: m=0;
break;
}
n=m/10;
delay(100);
}
}
相应的数值显示程序为: if(gIsUpdateChar)
{
LEDC_SetData(HTCFG_LEDC_COM_D1, NumberChar[n/1000]);
LEDC_SetData(HTCFG_LEDC_COM_D2, NumberChar[n%1000/100]);
LEDC_SetData(HTCFG_LEDC_COM_D3, NumberChar[n%100/10]);
LEDC_SetData(HTCFG_LEDC_COM_D4, NumberChar[n%10]);
gIsUpdateChar = FALSE;
}
经程序的编译和下载,则可得到图2至图4的显示效果,即按下PAD1时,数值依次递增;按下PAD3时,数值依次递减;按下PAD3时,则数值清零以表示完成设置。 图2 数值递增
图3 数值递减 图4 确认后清零
|