【蓝桥杯嵌入式】14届程序题刷题记录及反思

一、题目分析

考察内容:

  • led
  • 按键(长按/短按)
  • adc(模拟输入)
  • PWM输出(PA1)
  • 脉冲捕获(PA7)

根据PWM输出进行占空比调节,高频与低频切换(步进)

频率测量转换为速度值

三个显示界面

锁定解锁

任务多次执行时长间隔要求

二、按键部分

//放在定时器中断函数

    if(htim->Instance == TIM6)          //0.01s进入一次
    {
        key[0].key_sta = HAL_GPIO_ReadPin(B1_PORT,B1_PIN);
        key[1].key_sta = HAL_GPIO_ReadPin(B2_PORT,B2_PIN);
        key[2].key_sta = HAL_GPIO_ReadPin(B3_PORT,B3_PIN);
        key[3].key_sta = HAL_GPIO_ReadPin(B4_PORT,B4_PIN);       
        for(uint8_t i = 0;i < 4;i ++){
            switch(key[i].judge_sta){
                case 0:{        //判断按键是否按下
                    if(key[i].key_sta == 0){
                        key[i].judge_sta = 1;
                        key[i].key_time = 0;    //按键时间清零
                    }else{
                        key[i].judge_sta = 0;
                    }
                }break;
                case 1:{        //消抖
                    if(key[i].key_sta == 0){
                        key[i].judge_sta = 2;
                    }else{
                        key[i].judge_sta = 0;
                    }
                }break;
                case 2:{        //判断按键松开
                    if(key[i].key_sta == 1){
                        key[i].judge_sta = 0;
                        if(key[i].key_time < Short_time){
                            key[i].single_flag = 1;      //短按键
                            key[i].key_time = 0;
                        }
                    }else{                              //按键没松开
                        key[i].key_time++;              //继续计时
                        if(key[i].key_time > Long_time){
                           key[i].long_flag = 1; 
                           key[i].key_time = 0;   
                        }       
        
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值