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,试了下也能实现,但是感觉挺笨的,请问有没有更简洁的写法呢??~
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
GPIO_SetBits(GPIOB,GPIO_Pin_5);
这样stm32f10x_gpio.c文件夹的函数。
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
/* Check the parameters */
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
assert_param(IS_GPIO_PIN(GPIO_Pin));
GPIOx->BSRR = GPIO_Pin;
}
GPIO_WriteBit (LED_PORT, LED_PIN, (BitAction)((1-GPIO_ReadOutputDataBit(LED_PORT, LED_PIN))))
一周热门 更多>