查看: 1151|回复: 1

NXPS08P+触摸按键

[复制链接]
  • TA的每日心情
    开心
    2019-10-17 08:07
  • 签到天数: 273 天

    [LV.8]以坛为家I

    74

    主题

    2338

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    7350
    最后登录
    2021-8-30
    发表于 2019-7-24 08:33:40 | 显示全部楼层 |阅读模式
    本帖最后由 anny 于 2019-7-24 08:44 编辑

    在工作中经常碰到有产品要用到触摸按键,所以对带有触摸按键的芯片特别敏感,S08P刚好有触摸功能,今天就测试一下。
    1、先看看程序,直接使用官方例程和库文件,很容易就实现了功能。
        在main程序中只保留下面的程序
          //Initialize system including clocks
        //Watchdog: disabled
        //FEE: BUS clock 16MHz
        //Serial terminal: SCI2 baudrate 115200
        Sys_Init();
        EnableInterrupts;

        printf("\n-- S08-LITE 触摸按键实验 --\n");
        printf("\n");

        //Initialize MTIM0, 625Hz interrupt interval, used for toggle LED
        MTIM0_Init();
        MTIM0_Start();   

        //Initialize MTIM1, 1ms interrupt interval, used for 1ms time delay
        MTIM1_Init();

        //Initialize GPIO used for LED
        LED_Init();

        //Initialize TSI ch2, ch15 used for touch pad E1, E2
        TSI_Init();
        TSI_Test();
       在TSI_Test程序子程序中更改了一下:
    void TSI_Test(void)
    {
        uint8_t u8TouchKeyEvent = 0;
        uint8_t pad1IsTouchedFlag = 0;
        uint8_t pad2IsTouchedFlag = 0;
        uint8_t u8TouchKeyId = 0;
        printf("TSI test: BEGINS\n");

        printf("TSI test: touch pad 1 or 2 on board now\n");
        printf("TSI test: pass test until pad 1, 2 are touched\n");

        while (1)
        {
            u8TouchKeyEvent = TSI_Task(&u8TouchKeyId);

            if (u8TouchKeyEvent == TOUCHKEY_EVENT_TOUCH)
            {
                if (u8TouchKeyId == 0)
                {
                    pad1IsTouchedFlag = 1;
                    LED0_On();
                }
                else
                {
                    pad2IsTouchedFlag = 1;
                    LED1_On();
                }
            }
            else if (u8TouchKeyEvent == TOUCHKEY_EVENT_RELEASE)
            {
                if (u8TouchKeyId == 0)
                {
                    LED0_Off();
                    pad1IsTouchedFlag = 0;
                }
                else
                {
                    LED1_Off();
                    pad2IsTouchedFlag = 0;
                }
            }

            if (pad1IsTouchedFlag && pad2IsTouchedFlag)
            {
                    LED2_Toggle();
                printf("TSI test: PASSED\n");
                printf("\n");
            }
            else
            {
                    LED2_Off();
            }
        }
    }  
    2、实验结果:实现了触摸按键控制分别二个LED,同时按下时会点亮三个LED

    TIM截图20190724082101.png

    1563872514010.gif

    NXPS08P芯片的触摸功能支持短按、长按和多键同时按下。
    3、触摸按键最怕表面有水,假如在按键表面滴些水会怎么样,测试了一下,结果还是很满意的

    1563927984355.gif

    4、总结一下,经过这二天的熟悉,没有看芯片文档(主要是E文看不懂),直接使用官方提供的例程程序库能自由的实现各种功能,小白也能很快上手。
    附上芯片文档:

    MC9S08PT60RM.pdf (7.34 MB, 下载次数: 4)
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2021-12-31 14:33
  • 签到天数: 45 天

    [LV.5]常住居民I

    48

    主题

    131

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1129
    最后登录
    2024-3-29
    发表于 2019-7-24 09:28:22 | 显示全部楼层
    赞一波
    11111签到
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-25 12:55 , Processed in 0.130588 second(s), 20 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表