CH59x CH58x 触摸按键应用开发实例讲解(二)

前段时间,我们根据当时在做的一个项目,写了篇《CH592/CH582 触摸按键应用开发实例讲解》的博文,在那篇博文中我们简单介绍了触摸按键的原理,所以这里我们就讲触摸按键的原理,而侧重讲解触摸按键的实现,官方提供的触摸库的添加及应用。

想要了解触摸按键的原理的朋友可以自行搜索相关资料,也可以参考我们之前的博文:

CH592/CH582 触摸按键应用开发实例讲解-优快云博客

一、在现有工程中添加触摸库

本博文以CH584M为例讲解,我们在官方提供的CH585例程中找到以下目录文件并复制到我们现有的工程目录中。

在工程中设置include目录并添加触摸库。

按上图所示添加相应的文件目录并修改设置好工程,那我们就完成了在现有的工程中添加触摸功能的软件框架。

二、初步理解例程中触摸功能的实现

从上图中我们可以看出,使用官方提供的触摸库还是比较简单的,我们需要做的只是简单几个步骤:

1、初始化触摸库的基本参数:

/*********************************************************************
 * @fn      touch_on_TMOS_init
 *
 * @brief   触摸初始化函数(基于TMOS)
 *
 * @return  none
 */
void touch_on_TMOS_init(void)
{
    TouchKey_TaskID = TMOS_ProcessEventRegister(Touch_Key_ProcessEvent);
    TKY_PeripheralInit();       /* 初始外设,例如背光和蜂鸣器等 */
    touch_Init(&touch_cfg);				/* 初始化触摸库  */

    wakeUpCount = 50; // 唤醒后持续时间,单位TRIGGER_TIME(100ms)
    wakeupflag = 1;   // 置成唤醒状态
    triggerTime = TRIGGER_TIME;
    TKY_SetSleepStatusValue(~tkyQueueAll);
#if TKY_SLEEP_EN
    tky_DealData_start();
#else
    tky_DealData_stop();
#endif

#if PRINT_EN
    tmos_set_event(TouchKey_TaskID, DEBUG_PRINT_EVENT);
#endif

    tmos_set_event(TouchKey_TaskID, WAKEUP_DATA_DEAL_EVT);
    tmos_set_event(TouchKey_TaskID, TKY_KEEPALIVE_EVENT);

//    TMR0_TimerInit(FREQ_SYS/1000);               //定时周期为1ms
//    TMR0_ITCfg(ENABLE, TMR0_3_IT_CYC_END);
//    PFIC_EnableIRQ( TMR0_IRQn );

    dg_log("Touch Key init Finish!\n");
}
/********************************************************************************************************
 * @fn      touch_Init
 * 
 * @brief   初始化按键. 该函数被 TKY_Init() 调用。
 *
 * @return  none
 */
void touch_Init(touch_cfg_t *p)
{
    touch_InitHard();             /* 初始化Touch硬件和库基本参数 */
    touch_InitVar(p);           /* 初始化按键变量 */
}


/********************************************************************************************************
 * @fn      touch_InitHard
 * @brief   初始化触摸按键
 * @param   无
 * @return  无
 */
static void touch_InitHard (void)
{
    touch_Regcfg();
    touch_Baseinit();
    touch_Channelinit();
}

/********************************************************************************************************
 * @fn      touch_Baseinit
 * @brief   触摸基础库初始化
 * @param   无
 * @return  无
 */
static void touch_Baseinit(void)
{
    uint8_t sta=0xff;
    TKY_BaseInitTypeDef TKY_BaseInitStructure = {0};
    for(uint8_t i = 0; i < TKY_MAX_QUEUE_NUM; i++)  //初始化tkyQueueAll变量
    {
        tkyQueueAll |= 1<<i;
    }
    dg_log("tQ : %04x\n",tkyQueueAll);

    //----------触摸按键基础设置初始化--------
    TKY_BaseInitStructure.filterMode = TKY_FILTER_MODE;
    TKY_BaseInitStructure.shieldEn = TKY_SHIELD_EN;
    TKY_BaseInitStructure.singlePressMod = TKY_SINGLE_PRESS_MODE;
    TKY_BaseInitStructure.filterGrade = TKY_FILTER_GRADE;
    TKY_BaseInitStructure.maxQueueNum = TKY_MAX
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

永远的元子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值