一个按键实现模式装换

        KeyMum=Key();
        if(KeyMum==1)
        {
            if(MODE==0){MODE=1;}
            else if(MODE==1){MODE=0;}
        }
        switch(MODE)
        {
            case 0:TimeShow();break;
            case 1:TimeSet();break;
        }

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现一个按键控制切换多种不同工作模式,可以采用状态机的方法,对于每个工作模式,都定义一个状态,当按键被按下时,状态机切换到下一个状态,从而实现多种工作模式切换。 下面是一个简单的示例代码,实现了两种工作模式切换: ```c #include "stm32f10x.h" #define KEY_GPIO_PORT GPIOA #define KEY_GPIO_PIN GPIO_Pin_0 #define MODE1_LED_GPIO_PORT GPIOB #define MODE1_LED_GPIO_PIN GPIO_Pin_12 #define MODE2_LED_GPIO_PORT GPIOB #define MODE2_LED_GPIO_PIN GPIO_Pin_13 typedef enum { MODE1, MODE2 } MODE_T; static MODE_T current_mode = MODE1; void KEY_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = KEY_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(KEY_GPIO_PORT, &GPIO_InitStructure); } void MODE1_LED_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitStructure.GPIO_Pin = MODE1_LED_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(MODE1_LED_GPIO_PORT, &GPIO_InitStructure); } void MODE2_LED_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitStructure.GPIO_Pin = MODE2_LED_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(MODE2_LED_GPIO_PORT, &GPIO_InitStructure); } void KEY_Scan(void) { static uint8_t key_down = 0; if (GPIO_ReadInputDataBit(KEY_GPIO_PORT, KEY_GPIO_PIN) == RESET) { if (key_down == 0) { key_down = 1; current_mode = (current_mode == MODE1) ? MODE2 : MODE1; } } else { key_down = 0; } } void LED_Display(void) { if (current_mode == MODE1) { GPIO_SetBits(MODE1_LED_GPIO_PORT, MODE1_LED_GPIO_PIN); GPIO_ResetBits(MODE2_LED_GPIO_PORT, MODE2_LED_GPIO_PIN); } else { GPIO_ResetBits(MODE1_LED_GPIO_PORT, MODE1_LED_GPIO_PIN); GPIO_SetBits(MODE2_LED_GPIO_PORT, MODE2_LED_GPIO_PIN); } } int main(void) { KEY_GPIO_Config(); MODE1_LED_GPIO_Config(); MODE2_LED_GPIO_Config(); while (1) { KEY_Scan(); LED_Display(); } } ``` 在这个示例代码中,我们定义了两种工作模式:MODE1和MODE2。在`KEY_Scan()`函数中,检测按键是否被按下,如果被按下,则切换到下一个工作模式。在`LED_Display()`函数中,根据当前工作模式,控制LED的亮灭。在`main()`函数中,循环调用`KEY_Scan()`和`LED_Display()`函数,实现按键控制工作模式切换
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值