设计不错的网站,网站建设项目设计报告,用dw做的代码怎么放在网站上,广州中风险地区1.利用状态标志位控制LED状态翻转
在平常编写LED状态翻转函数时#xff0c;通常利用状态标志位实现LED状态的翻转。如下所示#xff1a;
unsigned char led_turn_flag; //LED状态标志位#xff0c;1-点亮#xff0c;0-熄灭/***************************************函…1.利用状态标志位控制LED状态翻转
在平常编写LED状态翻转函数时通常利用状态标志位实现LED状态的翻转。如下所示
unsigned char led_turn_flag; //LED状态标志位1-点亮0-熄灭/***************************************函数名称LED亮灭控制函数形参sta 1-点亮0-熄灭
****************************************/
void led_control(unsigned char sta)
{if(sta) //高电平{GPIO_SetBits(GPIOA,GPIO_Pin_1);}else{GPIO_ResetBits(GPIOA,GPIO_Pin_1);}
}/***************************************函数名称LED翻转控制函数形参无
****************************************/
void led_control_turn()
{led_control(led_turn_flag);
}
使用状态标志位可以轻松实现LED状态翻转但其存在可移植性差的问题。
led_turn_flag这个变量如果在其他.c文件中需要使用则需要在该.c文件中对该变量再次进行声明如此一来使得程序繁琐冗长、可读性差、可移植性差。
下面将介绍一种利用STM32关于GPIO库函数实现LED状态翻转其可读性强、可移植性强。
2.利用STM32库函数实现LED状态翻转
利用读GPIO引脚函数和写GPIO位函数实现先读取引脚状态再将其进行翻转代码如下
void led_control_turn(void)
{GPIO_WriteBit(GPIOA,GPIO_Pin_1,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_1)));//读取到是0,1-01就翻转为1读取到是1,1-10就翻转为0
}//下面两个函数是STM32自己的库函数不需要我们自己添加
/*** brief Sets or clears the selected data port bit.* param GPIOx: where x can be (A..G) to select the GPIO peripheral.* param GPIO_Pin: specifies the port bit to be written.* This parameter can be one of GPIO_Pin_x where x can be (0..15).* param BitVal: specifies the value to be written to the selected bit.* This parameter can be one of the BitAction enum values:* arg Bit_RESET: to clear the port pin* arg Bit_SET: to set the port pin* retval None*/
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal)
{/* Check the parameters */assert_param(IS_GPIO_ALL_PERIPH(GPIOx));assert_param(IS_GET_GPIO_PIN(GPIO_Pin));assert_param(IS_GPIO_BIT_ACTION(BitVal)); if (BitVal ! Bit_RESET){GPIOx-BSRR GPIO_Pin;}else{GPIOx-BRR GPIO_Pin;}
}/*** brief Reads the specified output data port bit.* param GPIOx: where x can be (A..G) to select the GPIO peripheral.* param GPIO_Pin: specifies the port bit to read.* This parameter can be GPIO_Pin_x where x can be (0..15).* retval The output port pin value.*/
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{uint8_t bitstatus 0x00;/* Check the parameters */assert_param(IS_GPIO_ALL_PERIPH(GPIOx));assert_param(IS_GET_GPIO_PIN(GPIO_Pin)); if ((GPIOx-ODR GPIO_Pin) ! (uint32_t)Bit_RESET){bitstatus (uint8_t)Bit_SET;}else{bitstatus (uint8_t)Bit_RESET;}return bitstatus;
}
利用STM32库函数实现LED状态翻转简洁明了可移植性强。