Cypress触摸芯片自己做的demo 代码

1.前言

(1)cyprees芯片主要是可以做一些触摸的检测并实现一些IO输出,使用的工具psoc creater
(2)psoc creater 可以i直接通过GUI的方式配置一些GPIO的状态以及集成的功能模块,编译后,我们可直接通过include 对应的头文件后,可在主函数中直接调用相关的接口,基本不怎么编写代码了

2.工程使用逻辑

  • 如下图为工程主界面:

    • topDesign:可以从右边拖一些关键的功能过来,并配置一些基础参数
    • PIN: 对一些功能进行功能进行对应的管脚进行对应
      在这里插入图片描述
  • 对上图进行详细介绍说明的
    – 一个capsense 进行触摸检测
    – 6个led灯

  • capsense的配置截图如下:

  • 在这里插入图片描述

  • led的配置如下: 注意不要勾选HW connection

  • 在这里插入图片描述
    点击生成:
    在这里插入图片描述

3.主函数逻辑

完成如上配置后,点击编译后会出现自动声场相关功能模块,我们需主要在main函数中进行编辑即可:

#include "CapSense.h"
#include "project.h"

#define LED_ON						(0u)
#define LED_OFF						(1u)
void LED_Write(uint8 value);
uint8 LED_Read(void);

uint8   LED1_Read(void);
void    LED1_Write(uint8 value);

uint8   LED2_Read(void);
void    LED2_Write(uint8 value);
uint8   LED3_Read(void);
void    LED3_Write(uint8 value);
typedef enum
{
    SENSOR_SCAN = 0x01u,                
    WAIT_FOR_SCAN_COMPLETE = 0x02u,     
    PROCESS_DATA = 0x03u,               
} DEVICE_STATE;

int main(void)
{
    CyGlobalIntEnable; /* Enable global interrupts. */

    /* Place your initialization/startup code here (e.g. MyInst_Start()) */
 /* Start CapSense block - Initializes CapSense Data structure and 
    performs first scan to set up sensor baselines */
    
    DEVICE_STATE currentState = SENSOR_SCAN;  
    CapSense_Start();
    /* Scan all widgets */
    //CapSense_ScanAllWidgets();
    
    
    
    for(;;)
    {
        /* Place your application code here. */
                /* Place your application code here. */
         /* Do this only when a scan is done */
   
     
              /* Process all widgets */
              CapSense_ProcessAllWidgets();
              /* Include Tuner */ 
             // CapSense_RunTuner(); 
              /* Scan result verification */
              if (CapSense_IsAnyWidgetActive())
              {
                   /* Add any required functionality
                      based on scanning result*/
               
              }
              /* Start next scan */

        
         switch(currentState)
        {
            case SENSOR_SCAN:
	            /* Initiate new scan only if the CapSense block is idle */
                if(CapSense_NOT_BUSY == CapSense_IsBusy())
                {
                    #if ENABLE_TUNER
                        /* Update CapSense parameters set via CapSense tuner before the 
                           beginning of CapSense scan 
                        */
                        CapSense_RunTuner();
                    #endif
                    
                    /* Scan widget configured by CSDSetupWidget API */
                    CapSense_ScanAllWidgets();
                                        
                    /* Set next state to WAIT_FOR_SCAN_COMPLETE  */
                    currentState = WAIT_FOR_SCAN_COMPLETE;
                }
                break;

            case WAIT_FOR_SCAN_COMPLETE:

                /* Put the device to CPU Sleep until CapSense scanning is complete*/
                if(CapSense_NOT_BUSY != CapSense_IsBusy())
                {
                    CySysPmSleep();
                }
                /* If CapSense scanning is complete, process the CapSense data */
                else
                {
                    currentState = PROCESS_DATA;
                }
                break;
        
            case PROCESS_DATA:
                
                /* Process data on all the enabled widgets */
                CapSense_ProcessAllWidgets();
                
                /* Controls LEDs Status based on the result of Widget processing. */
                //LED_Control();
                 LED_Write(CapSense_IsWidgetActive(CapSense_BUTTON0_WDGT_ID ) ? LED_OFF : LED_ON );
                LED1_Write(CapSense_IsWidgetActive(CapSense_BUTTON1_WDGT_ID ) ? LED_OFF : LED_ON );
                LED2_Write(CapSense_IsWidgetActive(CapSense_BUTTON2_WDGT_ID ) ? LED_OFF : LED_ON );
                LED3_Write(CapSense_IsWidgetActive(CapSense_BUTTON3_WDGT_ID ) ? LED_OFF : LED_ON );
                LED4_Write(CapSense_IsWidgetActive(CapSense_BUTTON4_WDGT_ID ) ? LED_ON : LED_OFF );
                LED5_Write(CapSense_IsWidgetActive(CapSense_BUTTON5_WDGT_ID ) ? LED_ON : LED_OFF );
                /* Set the device state to SENSOR_SCAN */
                currentState = SENSOR_SCAN;  
                break;  
             
            /*******************************************************************
             * Unknown power mode state. Unexpected situation.
             ******************************************************************/    
            default:
                break;
        } 
        //CyDelay(10);
    }
}

4.程序下载

  1. 编译工程完成HEX文件
  2. 打开psoc programmer 软件,选择对应的芯片iC,选中hex文件,点击下载:
  3. 在这里插入图片描述
  4. 使用效果如下
  5. 按下去的时候灯光灭掉,松手灯光亮起来
  6. 在这里插入图片描述

在这里插入图片描述

结论

本文通过查找简单的工程代码实现了一个触摸控制灯光亮灭场景。如有任何问题评论区交流。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Cypress USB芯片是一种高性能的USB解决方案。它由美国半导体公司Cypress Semiconductor Corporation开发和生产。 Cypress USB芯片具有可靠性高、性能出色、应用广泛等特点。它能够实现高速数据传输和稳定连接,支持USB 2.0、USB 3.0和USB 3.1等多种协议,满足不同设备的需求。 Cypress USB芯片在各种应用中被广泛使用。它们可以用于个人电脑、平板电脑、手机、摄像头、外部存储设备等各种USB设备中。此外,由于Cypress USB芯片可编程性强,也可以用于一些特定领域的应用,例如工业自动化和医疗设备等。 Cypress USB芯片系列包括FX2LP、FX3、EZ-USB FX3S、EZ-USB HX3等。FX2LP是一款高集成度的USB控制器,适合低速和全速USB应用。FX2LP具有灵活的配置和丰富的接口选择,可与各种外围设备进行高效通信。 FX3是一款超高速的USB 3.0控制器,支持5Gbps的数据传输速率。它还具有片上RAM和集成的ARM处理器,可通过固件进行灵活配置。FX3适用于对数据传输速度有较高要求的应用,如高清视频采集和数据存储等。 EZ-USB FX3S是FX3的低功耗版本,适用于对功耗要求较高的应用场景。EZ-USB HX3是一款USB集线器控制器,可一对多地进行USB连接,适用于需要连接多个USB设备的应用。 总的来说,Cypress USB芯片是一种可靠、高性能的USB解决方案,广泛应用于各种USB设备和特定领域的应用中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

没有水杯和雨伞的工科男

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

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

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

打赏作者

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

抵扣说明:

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

余额充值