按键实验里,例程是用位带操作控制LED的翻转,请问直接用库函数怎么操作呢??

2019-07-21 03:41发布

int main(void)
{
        u8 a,b;
         vu8 key=0;        
        delay_init();                     //延时函数初始化         
         LED_Init();                             //LED端口初始化
        KEY_Init();          //初始化与按键连接的硬件接口
        BEEP_Init();                 //初始化蜂鸣器端口
        LED0=0;                                        //先点亮红灯
        while(1)
        {
                 key=KEY_Scan(0);        //得到键值
                   if(key)
                {                                                   
                        switch(key)
                        {               
                                
                                case WKUP_PRES:        //控制蜂鸣器
                                //        BEEP=!BEEP;
                                a=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8);
                                if(a)        
                              GPIO_ResetBits(GPIOB,GPIO_Pin_8);        
                              else
                              GPIO_SetBits(GPIOB,GPIO_Pin_8);                                 
                                        break;
                        
                        
                                case KEY2_PRES:        //控制LED0翻转
                                        //LED0=!LED0;
                                 b=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5);
                                   if(b)        
                                GPIO_ResetBits(GPIOB,GPIO_Pin_5);        
                                 else
                                 GPIO_SetBits(GPIOB,GPIO_Pin_5);
                                  break;
                        
                        
                        
                                case KEY1_PRES:        //控制LED1翻转         
                                        LED1=!LED1;
                                        break;
                                case KEY0_PRES:        //同时控制LED0,LED1翻转
                                        LED0=!LED0;
                                        LED1=!LED1;
                                        break;
                        }
                }else delay_ms(10);
        }         
}

在历程里使用BEEP=!BEEP;LED0=!LED0;这样的位带操作LED和蜂鸣器的翻转。那么在没有正点原子SYS文件夹的情况下,只能用固件库里的函数,怎么控制状态翻转呢?
我再上面的主函数里写了前面两个,先读状态,再判断用SET 和RESET,试了下也能实现,但是感觉挺笨的,请问有没有更简洁的写法呢??~
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。