跳转至

例程-拨码

//main.cpp
#include "zf_common_headfile.h"
#pragma section all "cpu1_dsram"

#define LED1_ON() gpio_set_level(P21_4,0)
#define LED2_ON() gpio_set_level(P21_5,0)
#define LED3_ON() gpio_set_level(P20_8,0)
#define LED4_ON() gpio_set_level(P20_9,0)

#define LED1_OFF() gpio_set_level(P21_4,1)
#define LED2_OFF() gpio_set_level(P21_5,1)
#define LED3_OFF() gpio_set_level(P20_8,1)
#define LED4_OFF() gpio_set_level(P20_9,1)

void led_init()
{
    gpio_init(P21_4, GPO, 1, GPO_PUSH_PULL);
    gpio_init(P21_5, GPO, 1, GPO_PUSH_PULL);
    gpio_init(P20_8, GPO, 1, GPO_PUSH_PULL);
    gpio_init(P20_9, GPO, 1, GPO_PUSH_PULL);
}

// **************************** 代码区域 ****************************
void core1_main(void)
{
    disable_Watchdog();                     // 关闭看门狗
    interrupt_global_enable(0);             // 打开全局中断
    // 此处编写用户代码 例如外设初始化代码等

    switch_init();
    led_init();

    // 此处编写用户代码 例如外设初始化代码等
    cpu_wait_event_ready();                 // 等待所有核心初始化完毕

    while (TRUE)
    {
        // 此处编写需要循环执行的代码
        //方式一:正常函数获取
                if(Switch_Get(SWITCH_1) == SWITCH_ON) LED1_ON();
                if(Switch_Get(SWITCH_2) == SWITCH_ON) LED2_ON();
                if(Switch_Get(SWITCH_3) == SWITCH_ON) LED3_ON();
                if(Switch_Get(SWITCH_4) == SWITCH_ON) LED4_ON();

        //方式二:宏定义型函数获取
                if(!GET_SWITCH1()) LED1_OFF();
                if(!GET_SWITCH2()) LED2_OFF();
                if(!GET_SWITCH3()) LED3_OFF();
                if(!GET_SWITCH4()) LED4_OFF();
    }
}
#pragma section all restore
//switch.h
#ifndef CODE_SWITCH_H_
#define CODE_SWITCH_H_
#include "zf_common_headfile.h"
#include "zf_driver_gpio.h"

#define  GET_SWITCH1()  !gpio_get_level(P20_6)
#define  GET_SWITCH2()  !gpio_get_level(P20_7)
#define  GET_SWITCH3()  !gpio_get_level(P11_2)
#define  GET_SWITCH4()  !gpio_get_level(P11_3)

//开关端口的枚举
typedef enum
{
    SWITCH_1,
    SWITCH_2,
    SWITCH_3,
    SWITCH_4,
    SWITCH_MAX,
} SWITCH_e;

typedef enum
{
    SWITCH_ON = 0,         //拨码开启时对应电平
    SWITCH_OFF = 1,        //拨码关闭时对应电平
} SWITCH_STATUS_e;

typedef enum
{
  VHIGH = 0,
  VMEDIUM,
  VLOW,
}VOICE_TYPE_e;

/*
 *  供外部调用的函数接口声明
 */
void              switch_init();
SWITCH_STATUS_e   Switch_Get(SWITCH_e key);


#endif /* CODE_SWITCH_H_ */
//switch.c
#include "switch.h"
/* 定义SWITCH编号对应的管脚 */
gpio_pin_enum SWITCH_PTxn[SWITCH_MAX] = {P20_6, P20_7, P11_2, P11_3};

/******************************************************************************
 *  @brief      初始化switch端口
 *****************************************************************************/
void switch_init()
{
    uint8 i = SWITCH_MAX;

    //初始化全部 按键
    while(i--)
    {
        gpio_init(SWITCH_PTxn[i], GPI, 0, GPO_PUSH_PULL);
    }
}



/******************************************************************************
 *  @brief      获取switch状态
 *  @param      SWITCH_e         SWITCH编号
 *  @return     SWITCH_STATUS_e    SWITCH状态(SWITCH_ON,SWITCH_OFF)
 ******************************************************************************/
SWITCH_STATUS_e Switch_Get(SWITCH_e i)
{
    if(gpio_get_level(SWITCH_PTxn[i]) == SWITCH_OFF)
    {
        return SWITCH_OFF;
    }
    return SWITCH_ON;
}