找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1770|回复: 3
打印 上一主题 下一主题
收起左侧

关于辉芒微单片机触摸程序

[复制链接]
跳转到指定楼层
#
ID:604515 发表于 2023-8-4 16:43 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
这是一款辉芒微的触摸芯片,现在在官方的调试软件里,导出到工程,现在不会操作了,怎么样写:触摸一下,LED1亮,触摸5秒,LED2亮,

/**
  *********************************************************************************
  * @file                main.c
  * @author              FMD AE
  * @brief               Device: FT62F28X
  *                 Memory: Flash 8KX14b, EEPROM 128X8b, SRAM 616X8b
  *                 主函数,touch库的使用示例        
  * @version             V1.0.0           
  * @data                    2023-4-19
*/


//===========================================================
//include definition
//===========================================================
#include        "SYSCFG.h";
#include        "touch.h";
#include        "led.h";
#include        "uart.h"


//===========================================================
//Variable definition
//===========================================================


unsigned char strongest = 0; //demo_test
unsigned char Sav_strongest = 0; //demo_test
unsigned long Sav_single,single;


unsigned char temp = 0;
void ConmunicateToPc(void);
void TSC_Scan(void);
void SleepProcess(void);
void Get_Key_Demo(void);
/******************************************************************************
  * @brief  DelayUs program
  * @Description  延时函数
  * @param  time
  * @note   
  * @retval  None
  *****************************************************************************
*/


void DelayUs(unsigned int Time)
{   
        unsigned int a;
        for(a=0;a<Time;a++)
        {
                NOP();
        }
}


/*-------------------------------------------------
*        函数名称:DelayMs
*        功能:   短延时函数
*        输入参数:Time延时时间长度 延时时长Time ms
*        返回参数:无
-------------------------------------------------*/
void DelayMs(unsigned char Time)
{
        unsigned char a,b;
        for(a=0;a<Time;a++)
        {
                for(b=0;b<5;b++)
                {
                         DelayUs(197); //快1%
                }
        }
}


/******************************************************************************
  * @brief  interrupt ISR        program
  * @Description  中断入口函数 ,注意BANK的切换
  * @param  None
  * @note   
  * @retval  None
  *****************************************************************************
*/


void interrupt ISR(void)
{
                //进中断时bank保护
                if(AUXPGE==0) //BANK0-3
                {
                        temp = 0;
                }
                else
                {
                        AUXPGE = 0;
                        temp = 1;
                }  
                  
        //进中断时bank保护恢复
                if(AUXPGE==0)//BANK0-3
                {
                        AUXPGE = temp ;
                }
                else
                {
                        AUXPGE = 0;
                        AUXPGE = temp ;
                }
}


/******************************************************************************
  * @brief  Initialize_Communication program
  * @Description  应用程序应在系统初始化时必须把它们写为合适的值,
  *                        特别是各种使能位,以免产生不必要的中断及额外功耗。
  * @param  None
  * @note   
  * @retval  None
  *****************************************************************************
*/
void Initialize_Communication(void)
{
  //I2C 模块
  I2CCR1 = 0;
  I2CCR2 = 0;
  I2CADDR = 0;
  I2CCCR = 0;
  I2CDAT = 0;
  I2CISR = 0;
  //SPI 模块
  SPIDAT = 0;
  SPICR0 = 0;
  SPICFG = 0;
  SPISCR = 0;
  SPICRCP = 0;
  SPITXCRC = 0;
  SPIRXCRC = 0;
  SPIIER = 0;
  SPICR1 = 0;
  SPISTAT = 0;
  //UART 模块
  UR0DATL = 0;
  UR0DATH = 0;
  UR0CR1 = 0;
  UR0CR2 = 0;
  UR0BRRL = 0;
  UR0STAT = 0;
  UR1DATL = 0;
  UR1DATH = 0;
  UR1CR1 = 0;
  UR1CR2 = 0;
  UR1BRRL = 0;
  UR1STAT = 0;
}


/******************************************************************************
  * @brief  SYS_INITIAL        program
  * @Description  系统时钟、IO初始化
  * @param  None
  * @note   
  * @retval  None
  *****************************************************************************
*/
///*
void SYS_INITIAL(void)
{
         
        OSCCON = SYS_OSCCON;//0B01110001;    //WDT 32KHZ IRCF=110=16MHZ/4=4MHZ,0.25US/T
                                                        //Bit0=1,系统时钟为内部振荡器
                                                        //Bit0=0,时钟源由FOSC<2:0>决定即编译选项时选择
                           
        OPTION = 0B00001000;        //Bit3 PSA   预分频器分配位 0= 预分频器分配给Timer0模块 1:分配给WDT
                                                        //Bit2:0:预分频比选择位 000: 1:2
   
        DelayMs(40);                         //为进入debug模式延时大于20ms
   
    INTCON = 0;                          //暂禁止所有中断
   
        PORTA = 0;
        PORTB = 0b00000010;
    PORTD = 0;
    PORTC = 0;
   
    //**********特别注意*********************************************************//
    //PC1:由于F283B,F285B的PB7与PC1打在一起,如果用PB6PB7做debug模式那么PC1需要设为输入
    //PC6:当需要用PC6做debug模式时,需要设为输入
    //PC7:由于F283B,F285B的PC7与PD5打在一起, PD5与PC7要配置相同,设为输入
    //PD3:由于F283X,F285B,F286A,F287A的PD3与GND打在一起则禁止输出高或使能内部上拉,设为输入
    //    由于F287C的PD3与VDD打在一起则禁止输出低或使能内部下拉,设为输入  
   
    TRISA = TRISA_CONFIG;                // 0-输出 1-输入     RA4 - //0B00000000
    TRISB = TRISB_CONFIG;                // B4-B7  TK5-TK2    PB7--touch   //0B00000000
    TRISC = TRISC_CONFIG;         //  0B00000000
    TRISD = TRISD_CONFIG;        // TKCAP_PD5设为输入   //0B00101000
    //**********特别注意*********************************************************//
   
    ANSEL1 = 0B10000000; //TKCAP_PD5_AN15设为模拟输入脚               
   
        BANKSEL4_7;
        WPUA = 0B00000000;     //PA端口上拉控制 1-开上拉 0-关上拉
    WPUB = 0B00000000;
        WPUC = 0B00000000;
        WPUD = 0B00000000;
        WPDA = 0B00000000;     //PA端口上拉控制 1-开上拉 0-关上拉
    WPDB = 0B00000000;
        WPDC = 0B00000000;
        WPDD = 0B00000000;   
    BANKSEL0_3;               
  
}


/******************************************************************************
  * @brief  WDT_INITIAL        program
  * @Description  初始化设置看门狗为16位计数器,用于SLEEP模式的128ms唤醒
  * @param  None
  * @note   
  * @retval  None
  *****************************************************************************
*/


void WDT_INITIAL(void)
{
        CLRWDT();                             //清看门狗
        WDTCON = 0B00001111;    //bit[6:5]WCKSRC=00=LIRC(32K)
                                                        //bit[4:1]WDTPS=0110=1:4096,预分频1:1 定时时间=(4096*1)/32000=128ms  
                                                        //bit[0]SWDTEN= 1 开启                                                
}


/******************************************************************************
  * @brief  main        program
  * @Description 主函数
  * @param  None
  * @note   
  * @retval  None
  *****************************************************************************
*/




void main(void )
{
        
    Initialize_Communication();//必做,上电复位值
    SYS_INITIAL();//系统时钟、IO初始化


    //touch库资源使用详情请看touch.h说明
    TSC_INITIAL();//触摸按键初始化
    //低功耗定时,请勿关闭
        WDT_INITIAL(); //看门狗初始化


    PEIE = 1;  //使能外设中断
        GIE = 1;  //使能全局中断
   
//        LED(); //led.c  demo_test
        while(1)
        {
                //清看门狗   
                CLRWDT();  
                //按键扫描
                TSC_Scan();
                if(TSC_DataProcessing()== 1) //返回1表示所有按键处理完成一次。
                {
                        Get_Key_Demo();                                                   
                }
            
        }               
}
/******************************************************************************
  * @brief  SleepProcess        program
  * @Description 低功耗处理函数,若未选择低功耗功能,SleepProcess() 在实际工程中可以删除,
                                虽然已通过宏裁剪,但是函数也会编译占用4byte rom和 占用cpu执行时间。
                1. bSleepEnable用于使能低功耗功能,如程序满足休眠条件之后,请将bSleepEnable置1;
                2. bSleepMode为触摸库标志,用户不允许操作。
  * @param  None
  * @note   
  * @retval  None
  *****************************************************************************
*/
void SleepProcess(void)
{
#ifndef TOUCH_DEBUG  
        #ifdef _DEF_LOW_POWER  
//        if(PB7 == 0)//检测到PB7低电平进入休眠
//        {
                bSleepEnable = 1;  
//        }
        if(bSleepMode)        //满足此条件,说明程序将立即进入低功耗,请将GPIO及其它耗电外设关闭,以达到最低功耗
    {
               
    }
    while(bSleepMode)
    {
                TSC_SleepPrcoessing();
        CLRWDT();  
                TSC_Sleep();
//                if(PB7 == 1)//检测到PB7高电平退出休眠
//                {
//                        bSleepEnable = 0;  
//                }        
    }
        #endif
#endif
}


/******************************************************************************
  * @brief  TSC_Scan program
  * @Description 请勿删除此函数
  * @param  None
  * @note   
  * @retval  None
  *****************************************************************************
*/
void TSC_Scan(void)
{
        #ifndef TOUCH_DEBUG
        TSC_Start();
    #else
    TSC_Start_Test();
    ConmunicateToPc();
    #endif
}


/******************************************************************************
  * @brief  Get_Key_Demo program
  * @Description 获取触摸按键示例,用户参考实现自己的功能
  * @param  None
  * @note   
  * @retval  None
  *****************************************************************************
*/
void Get_Key_Demo(void)
{        
    /*只有调用CS库才能获取cs按键 TSC_GetCsKey();获取当前按下的一个按键*/
    strongest = TSC_GetCsKey();            
    if(Sav_strongest != strongest)
    {
//        LED_Scan();         


                        
    }
    Sav_strongest = strongest;
   
    /*获取多个按键,可以用来实现组合按键功能*/
    single = TSC_GetLocalKey();     
    if(Sav_single != single)
    {
//        LED_Local_Scan();                 
    }
    Sav_single = single;     
  
}








//===========================================================


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶1 踩
回复

使用道具 举报

板凳
ID:739727 发表于 2024-6-12 23:53 | 只看该作者
用定时器扫描
回复

使用道具 举报

沙发
ID:123289 发表于 2023-8-5 09:56 | 只看该作者
再更细致地研读芯片手册。
回复

使用道具 举报

楼主
ID:1090708 发表于 2023-8-4 17:19 | 只看该作者
有专门的调试软件啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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