关于KEY1一些问题

2019-07-20 22:53发布

新手,在学习GPIO的输入,按键部分,在使用KE1的时候,多按几次会错乱,会执行KEY0的部分,求解

key.h文件:

#ifndef _KEY_H
#define _KEY_H
#include"sys.h"

#define KEY0 PEin(4)
#define KEY1 PEin(3)

#define KEY0_PRES 1
#define KEY1_PRES 2

void key_init(void);
u8 key_scan(u8);


#endif



key.c文件:

#include"stm32f10x.h"
#include"key.h"
#include"sys.h"
#include"delay.h"

void key_init(void)
{
         RCC->APB2ENR|=1<<6;
       
         GPIOE->CRL&=0xfff00fff;
         GPIOE->CRL|=0x00088000;
         
         GPIOE->ODR|=1<<3;
         GPIOE->ODR|=1<<4;
}

u8 key_scan(u8 mode)
{
        static u8 key_up=1;
        if(mode == 1) key_up=1;
        if(key_up&&(KEY0==0||KEY1==0))
        {
                 delay_ms(10);
                 key_up=0;
                 if(KEY0==0) return 1;
                 if(KEY1==0) return 2;
        }
        else if(~(KEY0==0||KEY1==0))
        {
                key_up=1;
                return 0;
        }
}


main函数:

#include"stm32f10x.h"
#include"led.h"
#include"delay.h"
#include"beep.h"
#include"key.h"

int main(void)
{
        u8 key;
        delay_init(72);
        led_init();
        beep_init();
        key_init();
        while(1)
        {
                key=key_scan(0);
                if(key)
                {
                        switch (key)
                        {
                                case KEY0_PRES:
                                {
                                        beep=1;
                                        break;
                                }
                                case KEY1_PRES:
                                {
                                        beep=0;
                                        break;
                                }
                        }
                }
                else delay_ms(10);
        }
}



0条回答

一周热门 更多>